paint-brush
Flix-Finder : créer une application de recommandation de films avec Django et Bright Data [Partie 3/3]par@infinity
2,032 lectures
2,032 lectures

Flix-Finder : créer une application de recommandation de films avec Django et Bright Data [Partie 3/3]

par Rishabh Agarwal6m2023/07/17
Read on Terminal Reader

Trop long; Pour lire

Flix-Finder a besoin d'un processus par lequel ses données de film peuvent être mises à jour pour refléter les nouveaux films. C'est quelque chose que nous implémenterions dans cette dernière partie ! Il existe plusieurs façons d'implémenter cette fonctionnalité. Nous voulons 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.
featured image - Flix-Finder : créer une application de recommandation de films avec Django et Bright Data [Partie 3/3]
Rishabh Agarwal HackerNoon profile picture
0-item
1-item


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.

Tout planifier…


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 ? ' .


Le processus de mise à jour des données peut être divisé en trois étapes :

(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.


Ajout du nouveau point de terminaison à Flix-Finder

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!

Génération d'un jeton API sur Bright Data

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 :

  1. Rendez-vous sur https://brightdata.com/cp/setting .
  2. Dans la section Jeton API, cliquez sur le bouton Add Token .
  3. Dans la boîte de dialogue, sélectionnez l'utilisateur, l'autorisation et la date d'expiration.
  4. Cliquez sur le bouton Enregistrer et entrez le code 2FA.
  5. Copiez et conservez en toute sécurité le jeton généré.


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.

API pour les collecteurs initiateurs

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"


Implémentation du point de terminaison de mise à jour

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.


Implémentons ce point final en fonction des sous-tâches que nous avons identifiées initialement.

(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.

Utilisation du nouveau point de terminaison

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!

Remarques finales

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 ! 🙂