您正在阅读由三部分组成的系列的第三部分。强烈建议您在继续本部分之前阅读前两篇文章!
到上一篇博客结束时,Flix-Finder 支持根据各个机构的评级参数进行电影搜索。我们的应用程序的功能符合预期并达到了预期的功能。但过了一段时间,Flix-Finder 的客户开始抱怨该应用程序没有提供有关电影的最新信息。由于 Flix-Finder 使用静态数据,这是我们所期望的。
Flix-Finder 需要一些过程来更新其电影数据以反映新电影。而且,这是我们将在最后一部分中实施的内容!
尽管有多种方法可以实现此功能,但我们将创建一个可用于更新数据的新端点。您的数据会立即发生变化,就像您按下按钮一样。但还有其他策略,例如使用 cronjob。一旦本博客中描述了一种策略的细节,就可以使用相同的概念轻松创建任何新技术。
在开始编码之前,让我们退后一步并了解我们的所有需求。
我们想要创建一个新端点,点击该端点应该会更新 Flix-Finder 使用的数据。让我们使用/update
端点,任何到达此端点的GET 请求都应该更新我们的应用程序使用的数据。
接口规划好了,现在让我们思考一下‘如何更新数据? ' 。
(1) 在 Bright Data 上重新运行收集器
(2) 获取运行收集器得到的结果
(3) 将结果覆盖到静态文件中
对于前两个步骤,我们可以使用 Bright Data 提供的 API。一旦我们有了数据,我们就可以使用普通 Python 来覆盖现有的静态文件。
伟大的!一切都计划好了,让我们开始实施吧。
首先在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 进行数据更新之前,我们需要生成一个 API Token。
与 Bright Data 的所有通信都应包含此令牌,并且它用于身份验证目的。
生成API令牌的步骤:
Add Token
按钮。
确保不要泄露您的 API 令牌。任何有权访问您的 API 令牌的人都可以在 Bright Data 上模仿您!!!
生成 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 上关注我,以获取更多此类精彩文章。下一篇文章见……到此为止,祝您学习愉快! 🙂