Vous lisez la troisième partie d'une série en trois parties. Nous vous encourageons vivement à lire les deux articles précédents avant de passer à cette partie !
À la fin du blog précédent, Flix-Finder prenait en charge les recherches de films en fonction des paramètres de classement de diverses agences. La fonctionnalité de notre application a répondu aux attentes et a atteint sa fonction prévue. Mais après un certain temps, les clients de Flix-Finder ont commencé à se plaindre que l'application ne fournissait pas les informations les plus récentes sur les films. Parce que Flix-Finder utilise des données statiques, c'est quelque chose que nous anticipons.
Flix-Finder a besoin d'un processus par lequel ses données de film peuvent être mises à jour pour refléter les nouveaux films. Et c'est quelque chose que nous implémenterions dans cette dernière partie !
Malgré le fait qu'il existe plusieurs façons d'implémenter cette fonctionnalité, nous allons créer un nouveau point de terminaison qui peut être utilisé pour mettre à jour les données. Vos données changeraient instantanément, un peu comme lorsque vous appuyez sur un bouton. Mais il existe également d'autres stratégies, telles que l'utilisation d'un cronjob. Une fois que les spécificités d'une stratégie sont décrites dans ce blog, toute nouvelle technique peut être facilement créée en utilisant les mêmes concepts.
Avant de commencer à coder, prenons du recul et comprenons toutes nos exigences.
Nous voulons créer un nouveau point de terminaison et frapper ce point de terminaison devrait mettre à jour les données utilisées par Flix-Finder. Utilisons /update
endpoint et toute requête GET atteignant ce point de terminaison devrait mettre à jour les données utilisées par notre application.
L'interface étant prévue, réfléchissons maintenant à ' Comment mettre à jour les données ? ' .
(1) Réexécutez les collecteurs sur Bright Data
(2) Récupérer les résultats obtenus en exécutant le collecteur
(3) Écraser les résultats dans des fichiers statiques
Pour les deux premières étapes, nous pouvons utiliser les API fournies par Bright Data. Une fois que nous avons les données, nous pouvons utiliser Python vanille pour écraser les fichiers statiques existants.
Super! Avec tout prévu, commençons la mise en œuvre.
Commencez par créer une nouvelle méthode dans le fichier view.py
de l'application de recommandation dans Django . Nous appellerons cette méthode updateData
. C'est là que résidera toute notre logique de mise à jour des données statiques.
# recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")
Établissons également nos points de vue. Nous devons ajouter le mappage pour la méthode nouvellement créée dans les vues.
# recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]
Avec cela, nous avons créé avec succès un nouveau point de terminaison dans Flix-Finder. Nous utiliserons ce point de terminaison pour mettre à jour les données statiques. Pour l'instant, ce point de terminaison ne fait rien et renvoie simplement un message String.
➜ ~ curl localhost:8000/update Movie Data Updated!
Avant de pouvoir commencer à utiliser l'API de Bright Data pour la mise à jour des données, nous devons générer un jeton API.
Toutes les communications vers Bright Data doivent contenir ce jeton et il est utilisé à des fins d'authentification.
Étapes pour générer un jeton API :
Add Token
.
Assurez-vous de ne pas divulguer votre jeton API. Toute personne ayant accès à votre jeton API peut littéralement vous imiter sur Bright Data !!!
Une fois le jeton d'API généré, nous sommes prêts à commencer à utiliser les API pour exécuter les collecteurs et récupérer les données des exécutions de collecteur.
Rendez-vous dans la section Initier par API de vos collecteurs.
Vous trouverez ici des requêtes curl que vous pouvez utiliser pour relancer les collecteurs et récupérer les résultats.
API pour lancer l'exécution du collecteur : Bright Data fournit un point de terminaison pour lancer l'exécution du collecteur. Le point de terminaison https://api.brightdata.com/dca/trigger_immediate
attend une requête POST. Il attend également un paramètre de requête ' collector ' qui est utilisé pour identifier de manière unique le collecteur. L'en-tête doit contenir le jeton d'API.
Voici la requête curl pour la même chose.
curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"
La réponse de ce point de terminaison est un ID de réponse. Cela peut être utilisé pour récupérer plus tard les résultats.
API pour récupérer les résultats de l'exécution d'un collecteur : avec l'ID de réponse obtenu lors de l'exécution d'un collecteur, Bright Data nous fournit une autre API pour récupérer les résultats de l'exécution du collecteur. Le point de terminaison https://api.brightdata.com/dca/get_result
attend une requête GET. Il attend également un paramètre de requête 'response_id' qui est utilisé pour identifier de manière unique le collecteur. L'en-tête doit contenir le jeton d'API.
Voici à quoi ressemblerait la requête curl pour ce point de terminaison.
curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"
Avec la connaissance des points de terminaison à utiliser et du jeton d'API à portée de main, nous pouvons commencer à implémenter le point de terminaison de mise à jour.
(1) Réexécutez les collecteurs sur Bright Data
(2) Récupérer les résultats obtenus en exécutant le collecteur
(3) Écraser les résultats dans des fichiers statiques
Nous devons d'abord utiliser l'API du collecteur de réexécution et obtenir un ID de réponse. Nous utiliserons la bibliothèque de requêtes de Python pour effectuer cette tâche.
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')
L'étape suivante consiste à utiliser l'ID de réponse pour récupérer les résultats. Nous attendrions un certain temps avant d'essayer d'aller chercher les résultats.
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}"} )
Avec les données en main, nous pouvons écraser le fichier statique avec ces nouvelles données.
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()
Avec cela, la mise en œuvre de la méthode de mise à jour est terminée.
Une simple requête curl peut être faite au point de terminaison localhost:8000/update
pour lancer le processus de mise à jour des données. Une fois l'API retournée, les données auraient été mises à jour.
➜ ~ curl localhost:8000/update Movie Data Updated!
Enfin, nous sommes arrivés à la conclusion de cette section. Dans le Flix-Finder, nous avons pu intégrer une fonctionnalité de mise à jour des données. En conséquence, notre Flix-Finder sera toujours disponible pour ses utilisateurs avec des données fraîches !
J'espère que vous avez aimé la série en trois parties. Ce référentiel Github contient l'intégralité du code source de la collection.
Vous pouvez me suivre sur HackerNoon pour plus d'articles aussi incroyables. Rendez-vous dans le prochain article… D'ici là, Happy Learning ! 🙂