paint-brush
Flix-Finder: Creación de una aplicación de recomendación de películas con Django y Bright Data [Parte 3/3]por@infinity
2,032 lecturas
2,032 lecturas

Flix-Finder: Creación de una aplicación de recomendación de películas con Django y Bright Data [Parte 3/3]

por Rishabh Agarwal6m2023/07/17
Read on Terminal Reader

Demasiado Largo; Para Leer

Flix-Finder necesita algún proceso a través del cual sus datos de películas puedan actualizarse para reflejar las nuevas películas. ¡Esto es algo que estaríamos implementando en esta parte final! Hay varias formas de implementar esta funcionalidad. Queremos crear un nuevo punto final que se pueda usar para actualizar los datos. Tus datos cambiarían instantáneamente, como cuando presionas un botón.
featured image - Flix-Finder: Creación de una aplicación de recomendación de películas con Django y Bright Data [Parte 3/3]
Rishabh Agarwal HackerNoon profile picture
0-item
1-item


Estás leyendo la tercera parte de una serie de tres partes. ¡Le recomendamos encarecidamente que lea los dos artículos anteriores antes de continuar con esta parte!


Al final del blog anterior, Flix-Finder admitía búsquedas de películas basadas en parámetros de calificación de varias agencias. La funcionalidad de nuestra aplicación cumplió con las expectativas y logró su función prevista. Pero después de un tiempo, los clientes de Flix-Finder comenzaron a quejarse de que la aplicación no brindaba la información más reciente sobre las películas. Debido a que Flix-Finder emplea datos estáticos, esto es algo que anticipamos.


Flix-Finder necesita algún proceso a través del cual sus datos de películas puedan actualizarse para reflejar las nuevas películas. ¡Y esto es algo que estaríamos implementando en esta parte final!


A pesar de que hay varias formas de implementar esta funcionalidad, crearemos un nuevo punto final que se puede usar para actualizar los datos. Tus datos cambiarían instantáneamente, como cuando presionas un botón. Pero también hay otras estrategias, como utilizar un cronjob. Una vez que se describen los detalles de una estrategia en este blog, cualquier nueva técnica se puede crear fácilmente utilizando los mismos conceptos.

Planificándolo todo…


Antes de comenzar a codificar, demos un paso atrás y entendamos todos nuestros requisitos.


Queremos crear un nuevo punto final y, al presionar ese punto final, se deben actualizar los datos que usa Flix-Finder. Usemos /update el punto final y cualquier solicitud GET que llegue a este punto final debería actualizar los datos que usa nuestra aplicación.


Con la interfaz planeada, pensemos ahora en '¿ Cómo actualizar los datos? ' .


El proceso de actualización de los datos se puede dividir en tres pasos:

(1) Vuelva a ejecutar los recopiladores en Bright Data

(2) Obtener los resultados obtenidos al ejecutar el recopilador

(3) Sobrescribir los resultados en archivos estáticos


Para los primeros dos pasos, podemos usar las API proporcionadas por Bright Data. Una vez que tengamos los datos, podemos usar Vanilla Python para sobrescribir los archivos estáticos existentes.


¡Excelente! Con todo planeado, comencemos la implementación.


Agregar el nuevo Endpoint a Flix-Finder

Comience creando un nuevo método dentro del archivo view.py de la aplicación de recomendación en Django . Llamaremos a este método updateData . Aquí es donde residirá toda nuestra lógica de actualización de los datos estáticos.


 # recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")


Configuremos nuestras vistas también. Necesitamos agregar la asignación para el método recién creado en las vistas.


 # recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]


Con esto, hemos creado con éxito un nuevo punto final en Flix-Finder. Usaremos este punto final para actualizar los datos estáticos. Por ahora, este punto final no hace nada y simplemente devuelve un mensaje de cadena.


 ➜ ~ curl localhost:8000/update Movie Data Updated!

Generación de token de API en Bright Data

Antes de que podamos comenzar a usar la API de Bright Data para la actualización de datos, debemos generar un token de API.


Todas las comunicaciones con Bright Data deben contener este token y se utiliza con fines de autenticación.


Pasos para generar el token API:

  1. Dirígete a https://brightdata.com/cp/setting .
  2. En la sección Token API, haga clic en el botón Add Token .
  3. En el cuadro de diálogo, seleccione el usuario, el permiso y la fecha de vencimiento.
  4. Haga clic en el botón Guardar e ingrese el código 2FA.
  5. Copie y conserve de forma segura el token generado.


Asegúrese de no filtrar su token API. ¡Cualquiera con acceso a su API Token puede literalmente imitarlo en Bright Data!


Una vez que se genera el token de API, estamos listos para comenzar a usar las API para ejecutar los recopiladores y obtener datos de las ejecuciones de recopiladores.

API para recopiladores de inicio

Dirígete a la sección Iniciar por API de tus recopiladores.



Aquí encontrará solicitudes de curl que puede usar para volver a ejecutar los recopiladores y obtener los resultados.


API para iniciar la ejecución del recopilador: Bright Data proporciona un punto final para iniciar la ejecución del recopilador. El punto final https://api.brightdata.com/dca/trigger_immediate espera una solicitud POST. También espera un parámetro de consulta ' collector ' que se utiliza para identificar de forma única al recopilador. El encabezado debe contener el token de la API.


Aquí está la solicitud de curl para el mismo.


 curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"


La respuesta de este extremo es un ID de respuesta. Esto se puede usar para obtener los resultados más tarde.


API para obtener resultados de la ejecución de un recopilador: con el ID de respuesta obtenido al ejecutar un recopilador, Bright Data nos proporciona otra API para obtener resultados de la ejecución del recopilador. El punto final https://api.brightdata.com/dca/get_result espera una solicitud GET. También espera un parámetro de consulta 'response_id' que se utiliza para identificar de forma exclusiva al recopilador. El encabezado debe contener el token de la API.


Así es como se vería la solicitud curl para este punto final.


 curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"


Implementando el punto final de actualización

Con el conocimiento de los puntos finales a usar y el token API a la mano, podemos comenzar a implementar el punto final de actualización.


Implementemos este punto final de acuerdo con las subtareas que identificamos inicialmente.

(1) Vuelva a ejecutar los recopiladores en Bright Data

(2) Obtener los resultados obtenidos al ejecutar el recopilador

(3) Sobrescribir los resultados en archivos estáticos


Primero, debemos usar la API del recopilador de repetición y obtener un ID de respuesta. Usaremos la biblioteca de solicitudes de Python para realizar esta tarea.


 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')


El siguiente paso es usar el ID de respuesta para obtener los resultados. Esperaríamos un tiempo antes de intentar obtener los resultados.


 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}"} )


Con los datos disponibles, podemos sobrescribir el archivo estático con estos nuevos datos.


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


Con eso se completa la implementación del método de actualización.

Usando el nuevo punto final

Se puede realizar una solicitud curl simple al punto final localhost:8000/update para iniciar el proceso de actualización de datos. Una vez que la API regrese, los datos se habrán actualizado.


 ➜ ~ curl localhost:8000/update Movie Data Updated!

Observaciones finales

Finalmente, hemos llegado a la conclusión de esta sección. En Flix-Finder, pudimos integrar la funcionalidad de actualización de datos. Como resultado, nuestro Flix-Finder siempre estará disponible para sus usuarios con datos actualizados.


Espero que les haya gustado la serie de tres partes. Este repositorio de Github contiene el código fuente de toda la colección.


Puedes seguirme en HackerNoon para obtener más artículos increíbles. Nos vemos en el próximo artículo… Hasta entonces, ¡Feliz aprendizaje! 🙂