Bạn đang đọc phần thứ ba của loạt bài gồm ba phần. Chúng tôi rất khuyến khích bạn đọc hai bài viết trước trước khi tiếp tục với phần này!
Đến cuối blog trước, Flix-Finder đã hỗ trợ tìm kiếm phim dựa trên các thông số xếp hạng từ các cơ quan khác nhau. Chức năng của ứng dụng của chúng tôi đã đáp ứng mong đợi và đạt được chức năng dự kiến. Nhưng sau một thời gian, khách hàng của Flix-Finder bắt đầu phàn nàn rằng ứng dụng không cung cấp thông tin mới nhất về phim. Vì Flix-Finder sử dụng dữ liệu tĩnh nên đây là điều chúng tôi dự đoán.
Flix-Finder cần một số quy trình để dữ liệu phim của nó có thể được cập nhật để phản ánh các phim mới. Và, đây là điều chúng ta sẽ thực hiện trong phần cuối cùng này!
Mặc dù thực tế là có một số cách để triển khai chức năng này, nhưng chúng tôi sẽ tạo một điểm cuối mới có thể được sử dụng để cập nhật dữ liệu. Dữ liệu của bạn sẽ thay đổi ngay lập tức, giống như khi bạn nhấn một nút. Nhưng cũng có những chiến lược khác, chẳng hạn như sử dụng một cronjob. Khi các chi tiết cụ thể của một chiến lược được mô tả trong blog này, bất kỳ kỹ thuật mới nào cũng có thể được tạo dễ dàng bằng cách sử dụng các khái niệm tương tự.
Trước khi bắt đầu viết mã, chúng ta hãy lùi lại một bước và hiểu tất cả các yêu cầu của mình.
Chúng tôi muốn tạo một điểm cuối mới và nhấn vào điểm cuối đó sẽ cập nhật dữ liệu mà Flix-Finder sử dụng. Hãy để chúng tôi sử dụng /update
điểm cuối và mọi yêu cầu GET chạm vào điểm cuối này sẽ cập nhật dữ liệu mà ứng dụng của chúng tôi sử dụng.
Với giao diện đã được lên kế hoạch, bây giờ chúng ta hãy nghĩ về ' Làm cách nào để cập nhật dữ liệu? ' .
(1) Chạy lại Collectors trên Bright Data
(2) Tìm nạp kết quả thu được từ việc chạy trình thu thập
(3) Ghi đè kết quả vào tệp tĩnh
Đối với hai bước đầu tiên, chúng ta có thể sử dụng API do Bright Data cung cấp. Khi chúng tôi có dữ liệu, chúng tôi có thể sử dụng vanilla Python để ghi đè lên các tệp tĩnh hiện có.
Tuyệt vời! Với mọi thứ đã được lên kế hoạch, chúng ta hãy bắt đầu thực hiện.
Bắt đầu bằng cách tạo một phương thức mới bên trong tệp view.py
của ứng dụng đề xuất trong Django . Chúng tôi sẽ gọi phương thức này updateData
. Đây là nơi chứa tất cả logic cập nhật dữ liệu tĩnh của chúng tôi.
# recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")
Hãy để chúng tôi thiết lập quan điểm của chúng tôi là tốt. Chúng ta cần thêm ánh xạ cho phương thức mới được tạo trong chế độ xem.
# recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]
Với điều này, chúng ta đã tạo thành công một điểm cuối mới trong Flix-Finder. Chúng tôi sẽ sử dụng điểm cuối này để cập nhật dữ liệu tĩnh. Hiện tại, điểm cuối này không thực hiện bất kỳ điều gì và chỉ trả về một thông báo Chuỗi.
➜ ~ curl localhost:8000/update Movie Data Updated!
Trước khi chúng tôi có thể bắt đầu sử dụng API của Bright Data để cập nhật dữ liệu, chúng tôi cần tạo Mã thông báo API.
Tất cả các thông tin liên lạc đến Bright Data phải chứa mã thông báo này và nó được sử dụng cho mục đích xác thực.
Các bước để tạo mã thông báo API:
Add Token
.
Đảm bảo không làm rò rỉ Mã thông báo API của bạn. Bất kỳ ai có quyền truy cập vào Mã thông báo API của bạn đều có thể bắt chước bạn trên Bright Data theo đúng nghĩa đen!!!
Sau khi Mã thông báo API được tạo, chúng tôi đã sẵn sàng bắt đầu sử dụng API để chạy trình thu thập và tìm nạp dữ liệu từ các lần chạy trình thu thập.
Chuyển đến phần Khởi tạo bằng API trong bộ sưu tập của bạn.
Tại đây, bạn sẽ tìm thấy các yêu cầu cuộn tròn mà bạn có thể sử dụng để chạy lại trình thu thập và tìm nạp kết quả.
API để bắt đầu chạy bộ sưu tập: Bright Data cung cấp một điểm cuối để bắt đầu chạy bộ sưu tập. Điểm cuối https://api.brightdata.com/dca/trigger_immediate
mong đợi một yêu cầu POST. Nó cũng mong đợi một tham số truy vấn ' bộ sưu tập ' được sử dụng để xác định duy nhất bộ sưu tập. Tiêu đề phải chứa mã thông báo API.
Đây là yêu cầu curl cho cùng.
curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"
Phản hồi của điểm cuối này là ID phản hồi. Điều này có thể được sử dụng để tìm nạp kết quả sau này.
API để tìm nạp kết quả từ lần chạy của trình thu thập: Với ID phản hồi có được khi chạy trình thu thập, Bright Data cung cấp cho chúng tôi một API khác để tìm nạp kết quả từ lần chạy trình thu thập. Điểm cuối https://api.brightdata.com/dca/get_result
mong đợi một yêu cầu GET. Nó cũng mong đợi một tham số truy vấn 'response_id' được sử dụng để xác định duy nhất trình thu thập. Tiêu đề phải chứa mã thông báo API.
Đây là cách yêu cầu cuộn tròn cho điểm cuối này sẽ trông như thế nào.
curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"
Với kiến thức về điểm cuối để sử dụng và mã thông báo API tiện dụng, chúng tôi có thể bắt đầu triển khai điểm cuối cập nhật.
(1) Chạy lại Collectors trên Bright Data
(2) Tìm nạp kết quả thu được từ việc chạy trình thu thập
(3) Ghi đè kết quả vào tệp tĩnh
Trước tiên, chúng tôi cần sử dụng API trình thu thập chạy lại và nhận ID phản hồi. Chúng tôi sẽ sử dụng thư viện yêu cầu của Python để thực hiện tác vụ này.
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')
Bước tiếp theo là sử dụng ID phản hồi để tìm nạp kết quả. Chúng tôi sẽ đợi một thời gian trước khi thử tìm nạp kết quả.
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}"} )
Với dữ liệu trong tay, chúng ta có thể ghi đè lên tệp tĩnh bằng dữ liệu mới này.
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()
Với điều đó, việc thực hiện phương pháp cập nhật đã hoàn tất.
Có thể thực hiện một yêu cầu cuộn tròn đơn giản tới điểm cuối localhost:8000/update
để bắt đầu quá trình cập nhật dữ liệu. Khi API trở lại, dữ liệu sẽ được cập nhật.
➜ ~ curl localhost:8000/update Movie Data Updated!
Cuối cùng, chúng tôi đã đi đến kết luận của phần này. Trong Flix-Finder, chúng tôi có thể tích hợp chức năng cập nhật dữ liệu. Do đó, Flix-Finder của chúng tôi sẽ luôn có sẵn cho người dùng với dữ liệu mới!
Tôi hy vọng bạn thích bộ ba phần. Kho lưu trữ Github này chứa toàn bộ mã nguồn của bộ sưu tập.
Bạn có thể theo dõi tôi trên HackerNoon để biết thêm các bài viết tuyệt vời như vậy. Hẹn gặp lại bạn trong bài viết tiếp theo… Đến lúc đó, Chúc bạn học tập vui vẻ! 🙂