Sie lesen den dritten Teil einer dreiteiligen Serie. Wir empfehlen Ihnen dringend, die beiden vorherigen Artikel zu lesen, bevor Sie mit diesem Teil fortfahren!
Bis zum Ende des vorherigen Blogs unterstützte Flix-Finder die Filmsuche auf Basis von Bewertungsparametern verschiedener Agenturen. Die Funktionalität unserer App entsprach den Erwartungen und erfüllte die beabsichtigte Funktion. Doch nach einiger Zeit beschwerten sich die Kunden von Flix-Finder darüber, dass die App nicht die aktuellsten Informationen zu Filmen bereitstellte. Da Flix-Finder statische Daten verwendet, ist dies etwas, was wir erwarten.
Flix-Finder benötigt einen Prozess, durch den seine Filmdaten aktualisiert werden können, um die neuen Filme widerzuspiegeln. Und das ist etwas, was wir in diesem letzten Teil umsetzen würden!
Obwohl es mehrere Möglichkeiten gibt, diese Funktionalität zu implementieren, erstellen wir einen neuen Endpunkt, der zum Aktualisieren der Daten verwendet werden kann. Ihre Daten würden sich augenblicklich ändern, ähnlich wie wenn Sie eine Taste drücken. Es gibt aber auch andere Strategien, beispielsweise die Nutzung eines Cronjobs. Sobald die Besonderheiten einer Strategie in diesem Blog beschrieben sind, kann jede neue Technik leicht mit denselben Konzepten erstellt werden.
Bevor wir mit dem Codieren beginnen, sollten wir einen Schritt zurücktreten und alle unsere Anforderungen verstehen.
Wir möchten einen neuen Endpunkt erstellen und wenn Sie diesen Endpunkt erreichen, sollten die von Flix-Finder verwendeten Daten aktualisiert werden. Lassen Sie uns den Endpunkt /update
verwenden und jede GET-Anfrage, die diesen Endpunkt erreicht, sollte die von unserer App verwendeten Daten aktualisieren.
Lassen Sie uns nun nach der Planung der Schnittstelle darüber nachdenken: „ Wie werden die Daten aktualisiert?“ ' .
(1) Führen Sie die Collectors für Bright Data erneut aus
(2) Rufen Sie die Ergebnisse ab, die Sie beim Ausführen des Kollektors erhalten haben
(3) Überschreiben Sie die Ergebnisse in statische Dateien
Für die ersten beiden Schritte können wir die von Bright Data bereitgestellten APIs verwenden. Sobald wir die Daten haben, können wir Vanilla Python verwenden, um die vorhandenen statischen Dateien zu überschreiben.
Großartig! Wenn alles geplant ist, beginnen wir mit der Umsetzung.
Erstellen Sie zunächst eine neue Methode in der view.py
Datei der Empfehlungs-App in Django . Wir werden diese Methode updateData
nennen. Hier wird sich unsere gesamte Logik zur Aktualisierung der statischen Daten befinden.
# recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")
Lassen Sie uns auch unsere Ansichten darlegen. Wir müssen die Zuordnung für die neu erstellte Methode in Ansichten hinzufügen.
# recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]
Damit haben wir erfolgreich einen neuen Endpunkt im Flix-Finder erstellt. Wir werden diesen Endpunkt verwenden, um die statischen Daten zu aktualisieren. Dieser Endpunkt führt vorerst keine Aktion aus und gibt lediglich eine String-Nachricht zurück.
➜ ~ curl localhost:8000/update Movie Data Updated!
Bevor wir die API von Bright Data für die Datenaktualisierung verwenden können, müssen wir ein API-Token generieren.
Alle Kommunikationen mit Bright Data sollten dieses Token enthalten und es wird für Authentifizierungszwecke verwendet.
Schritte zum Generieren eines API-Tokens:
Add Token
.
Stellen Sie sicher, dass Ihr API-Token nicht verloren geht. Jeder, der Zugriff auf Ihr API-Token hat, kann Sie auf Bright Data buchstäblich nachahmen!!!
Sobald das API-Token generiert ist, können wir mit der Verwendung der APIs zum Ausführen der Kollektoren und zum Abrufen von Daten aus Kollektorläufen beginnen.
Gehen Sie zum Abschnitt „Initiieren durch API“ Ihrer Collectors.
Hier finden Sie Curl-Anfragen, mit denen Sie Collectors erneut ausführen und die Ergebnisse abrufen können.
API zum Initiieren der Collector-Ausführung: Bright Data bietet einen Endpunkt zum Initiieren der Collector-Ausführung. Der Endpunkt https://api.brightdata.com/dca/trigger_immediate
erwartet eine POST-Anfrage. Außerdem wird ein Abfrageparameter „ Collector “ erwartet, der zur eindeutigen Identifizierung des Collectors verwendet wird. Der Header sollte das API-Token enthalten.
Hier ist die Curl-Anfrage dafür.
curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"
Die Antwort dieses Endpunkts ist eine Antwort-ID. Dies kann verwendet werden, um später die Ergebnisse abzurufen.
API zum Abrufen von Ergebnissen aus einem Collector-Lauf: Mit der Antwort-ID, die beim Ausführen eines Collectors erhalten wurde, stellt uns Bright Data eine weitere API zum Abrufen von Ergebnissen aus dem Collector-Lauf zur Verfügung. Der Endpunkt https://api.brightdata.com/dca/get_result
erwartet eine GET-Anfrage. Außerdem wird ein Abfrageparameter „response_id“ erwartet, der zur eindeutigen Identifizierung des Collectors verwendet wird. Der Header sollte das API-Token enthalten.
So würde die Curl-Anfrage für diesen Endpunkt aussehen.
curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"
Mit dem Wissen über die zu verwendenden Endpunkte und dem verfügbaren API-Token können wir mit der Implementierung des Update-Endpunkts beginnen.
(1) Führen Sie die Collectors für Bright Data erneut aus
(2) Rufen Sie die Ergebnisse ab, die Sie beim Ausführen des Kollektors erhalten haben
(3) Überschreiben Sie die Ergebnisse in statische Dateien
Zuerst müssen wir die Rerun-Collector-API verwenden und eine Antwort-ID erhalten. Zur Ausführung dieser Aufgabe verwenden wir die Requests-Bibliothek von 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')
Der nächste Schritt besteht darin, die Antwort-ID zum Abrufen der Ergebnisse zu verwenden. Wir würden einige Zeit warten, bevor wir versuchen, die Ergebnisse abzurufen.
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}"} )
Mit den vorliegenden Daten können wir die statische Datei mit diesen neuen Daten überschreiben.
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()
Damit ist die Implementierung der Update-Methode abgeschlossen.
Eine einfache Curl-Anfrage kann an den Endpunkt localhost:8000/update
gestellt werden, um den Datenaktualisierungsprozess zu starten. Sobald die API zurückkehrt, wären die Daten aktualisiert worden.
➜ ~ curl localhost:8000/update Movie Data Updated!
Endlich sind wir am Ende dieses Abschnitts angelangt. Im Flix-Finder konnten wir eine Datenaktualisierungsfunktion integrieren. Dadurch steht unser Flix-Finder seinen Nutzern stets mit aktuellen Daten zur Verfügung!
Ich hoffe, Ihnen hat die dreiteilige Serie gefallen. Dieses Github-Repository enthält den Quellcode der gesamten Sammlung.
Sie können mir auf HackerNoon folgen, um weitere dieser erstaunlichen Artikel zu sehen. Wir sehen uns im nächsten Artikel ... Bis dahin viel Spaß beim Lernen! 🙂