paint-brush
Flix-Finder:使用 Django 和 Bright Data 构建电影推荐应用程序 [第 3/3 部分]经过@infinity
1,989 讀數
1,989 讀數

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


您正在阅读由三部分组成的系列的第三部分。强烈建议您在继续本部分之前阅读前两篇文章!


到上一篇博客结束时,Flix-Finder 支持根据各个机构的评级参数进行电影搜索。我们的应用程序的功能符合预期并达到了预期的功能。但过了一段时间,Flix-Finder 的客户开始抱怨该应用程序没有提供有关电影的最新信息。由于 Flix-Finder 使用静态数据,这是我们所期望的。


Flix-Finder 需要一些过程来更新其电影数据以反映新电影。而且,这是我们将在最后一部分中实施的内容!


尽管有多种方法可以实现此功能,但我们将创建一个可用于更新数据的新端点。您的数据会立即发生变化,就像您按下按钮一样。但还有其他策略,例如使用 cronjob。一旦本博客中描述了一种策略的细节,就可以使用相同的概念轻松创建任何新技术。

计划好一切……


在开始编码之前,让我们退后一步并了解我们的所有需求。


我们想要创建一个新端点,点击该端点应该会更新 Flix-Finder 使用的数据。让我们使用/update端点,任何到达此端点的GET 请求都应该更新我们的应用程序使用的数据。


接口规划好了,现在让我们思考一下‘如何更新数据? '


更新数据的过程可以分为三个步骤:

(1) 在 Bright Data 上重新运行收集器

(2) 获取运行收集器得到的结果

(3) 将结果覆盖到静态文件中


对于前两个步骤,我们可以使用 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 Token。


与 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 的 requests 库来执行此任务。


 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方法的实现就完成了。

使用新端点

可以向端点localhost:8000/update发出简单的curl 请求来启动数据更新过程。一旦 API 返回,数据就会更新。


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

结束语

最后,我们得出了本节的结论。在 Flix-Finder 中,我们能够集成数据更新功能。因此,我们的 Flix-Finder 将始终向用户提供最新数据!


我希望您喜欢这个由三部分组成的系列。这个Github 存储库包含整个集合的源代码。


您可以在 HackerNoon 上关注我,以获取更多此类精彩文章。下一篇文章见……到此为止,祝您学习愉快! 🙂