paint-brush
Flix-Finder: Django と Bright Data を使用した映画おすすめアプリの構築 [パート 3/3]@infinity
2,032 測定値
2,032 測定値

Flix-Finder: Django と Bright Data を使用した映画おすすめアプリの構築 [パート 3/3]

Rishabh Agarwal6m2023/07/17
Read on Terminal Reader

長すぎる; 読むには

Flix-Finder には、新しい映画を反映するために映画データを更新するためのプロセスが必要です。これは、この最後の部分で実装する予定です。この機能を実装するにはいくつかの方法があります。データの更新に使用できる新しいエンドポイントを作成したいと考えています。ボタンを押したときと同じように、データは瞬時に変更されます。
featured image - Flix-Finder: Django と Bright Data を使用した映画おすすめアプリの構築 [パート 3/3]
Rishabh Agarwal HackerNoon profile picture
0-item
1-item


3 部構成のシリーズの 3 番目の部分を読んでいます。この部分に進む前に、前の 2 つの記事を読むことを強くお勧めします。


前回のブログの終わりまでに、Flix-Finder はさまざまな代理店の評価パラメータに基づいた映画検索をサポートしていました。私たちのアプリの機能は期待を満たし、意図した機能を達成しました。しかししばらくすると、Flix-Finder の顧客は、このアプリが映画に関する最新情報を提供していないことに不満を抱き始めました。 Flix-Finder は静的データを使用するため、これは予想されることです。


Flix-Finder には、新しい映画を反映するために映画データを更新するためのプロセスが必要です。そして、これはこの最後の部分で実装する予定のものです。


この機能を実装するにはいくつかの方法がありますが、ここではデータの更新に使用できる新しいエンドポイントを作成します。ボタンを押したときと同じように、データは瞬時に変更されます。ただし、cron ジョブを利用するなど、他の戦略もあります。このブログで 1 つの戦略の詳細を説明すると、同じ概念を使用して新しいテクニックを簡単に作成できるようになります。

徹底的に計画を立てて…


コードを書き始める前に、一歩下がってすべての要件を理解しましょう。


新しいエンドポイントを作成したいのですが、そのエンドポイントを押すと、Flix-Finder が使用するデータが更新されるはずです。 /updateエンドポイントを使用すると、このエンドポイントに到達するGET リクエストは、アプリが使用するデータを更新する必要があります。


インターフェイスを計画したら、「データを更新する方法」について考えてみましょう。 '


データを更新するプロセスは、次の 3 つのステップに分かれています。

(1) Bright Data でコレクタを再実行する

(2) コレクターを実行して得られた結果を取得する

(3) 結果を静的ファイルに上書きする


最初の 2 つのステップでは、Bright Data が提供する API を使用できます。データを取得したら、バニラ Python を使用して既存の静的ファイルを上書きできます。


素晴らしい!すべての計画が完了したら、実装を開始しましょう。


新しいエンドポイントを Flix-Finder に追加する

まず、 Djangoのレコメンダー アプリのview.pyファイル内に新しいメソッドを作成します。このメソッドをupdateDataと呼びます。ここに、静的データを更新するすべてのロジックが存在します。


 # recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")


私たちの見解も設定してみましょう。新しく作成したメソッドのマッピングをビューに追加する必要があります。


 # recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]


これで、Flix-Finder で新しいエンドポイントが正常に作成されました。このエンドポイントを使用して静的データを更新します。現時点では、このエンドポイントは何も行わず、単に文字列メッセージを返します。


 ➜ ~ curl localhost:8000/update Movie Data Updated!

Bright Data での API トークンの生成

データ更新に Bright Data の API を使用し始める前に、API トークンを生成する必要があります。


Bright Data へのすべての通信にはこのトークンが含まれている必要があり、認証の目的で使用されます。


API トークンを生成する手順:

  1. https://brightdata.com/cp/settingに移動します。
  2. 「API トークン」セクションで、 Add Tokenボタンをクリックします。
  3. ダイアログ ボックスで、ユーザー、権限、有効期限を選択します。
  4. 保存ボタンをクリックし、2FA コードを入力します。
  5. 生成されたトークンをコピーして安全に保管します。


API トークンが漏洩しないように注意してください。あなたの API トークンにアクセスできる人は誰でも、Bright Data 上で文字通りあなたの真似をすることができます。


API トークンが生成されると、コレクターを実行し、コレクターの実行からデータを取得するために API を使用できるようになります。

コレクターを開始するための API

コレクターの「API による開始」セクションに移動します。



ここには、コレクターを再実行して結果を取得するために使用できるcurlリクエストがあります。


コレクターの実行を開始するための API: Bright Data は、コレクターの実行を開始するためのエンドポイントを提供します。エンドポイントhttps://api.brightdata.com/dca/trigger_immediate POST リクエストを予期します。また、コレクタを一意に識別するために使用されるクエリ パラメータ「 collector 」も必要です。ヘッダーには API トークンが含まれている必要があります。


これは同じものに対するカールリクエストです。


 curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"


このエンドポイントの応答は応答 ID です。これは、後で結果を取得するために使用できます。


コレクターの実行から結果を取得する API:コレクターの実行から取得した応答 ID を使用して、Bright Data はコレクターの実行から結果を取得するための別の API を提供します。エンドポイントhttps://api.brightdata.com/dca/get_result GET リクエストを予期します。また、コレクタを一意に識別するために使用されるクエリ パラメータ「response_id」も必要です。ヘッダーには API トークンが含まれている必要があります。


このエンドポイントに対する CURL リクエストは次のようになります。


 curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"


更新エンドポイントの実装

使用するエンドポイントと API トークンに関する知識があれば、更新エンドポイントの実装を開始できます。


最初に特定したサブタスクに従って、このエンドポイントを実装しましょう。

(1) Bright Data でコレクタを再実行する

(2) コレクターを実行して得られた結果を取得する

(3) 結果を静的ファイルに上書きする


まず、再実行コレクター API を使用して応答 ID を取得する必要があります。このタスクを実行するには、Python のリクエスト ライブラリを使用します。


 API_TOKEN = "###########" # Replace by your API Token response = requests.post( "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba", headers={"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json"}, json={} ) if response.status_code < 200 or response.status_code > 299 or 'response_id' not in response.json(): return HttpResponseServerError('Something Wrong Happened') response_id = response.json().get('response_id')


次のステップでは、応答 ID を使用して結果を取得します。結果を取得する前に、しばらく待ちます。


 time.sleep(30) # Sleeping for 30 seconds get_results_response = requests.get( f"https://api.brightdata.com/dca/get_result?response_id={response_id}", headers={"Authorization": f"Bearer {API_TOKEN}"} )


データを入手したら、この新しいデータで静的ファイルを上書きできます。


 movie_data = get_results_response.json() data_file = open(ROTTEN_TOMATO_DATA_FILE_PATH, encoding="utf8", mode="w") json.dump(movie_data, data_file, indent=4) data_file.close()


以上で update メソッドの実装は完了です。

新しいエンドポイントの使用

単純なcurlリクエストをエンドポイントlocalhost:8000/updateに対して行うことで、データ更新プロセスを開始できます。 API が返されると、データは更新されています。


 ➜ ~ curl localhost:8000/update Movie Data Updated!

結論

ついにこのセクションの結論に達しました。 Flix-Finder では、データ更新機能を統合することができました。その結果、Flix-Finder は常に最新のデータをユーザーに提供できるようになります。


3部構成のシリーズを気に入っていただけたなら幸いです。このGithub リポジトリには、コレクション全体のソース コードが含まれています。


HackerNoon で私をフォローして、このような素晴らしい記事をもっとご覧ください。次の記事でお会いしましょう…それまで、楽しく学習してください! 🙂