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.
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? ' .
(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.
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!
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:
Add Token
.
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.
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"
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.
(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.
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!
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! 🙂