El objetivo de este desafío es construir un pequeño pipeline de datos automatizado que extraiga información desde una fuente externa (la API del New York Times), la almacene en una base de datos analítica (BigQuery) y permita consultarla de manera eficiente.
Vas a desarrollar un script en Python que se conecte a la API de noticias del NYTimes y extraiga artículos recientes según ciertos parámetros. Esa información debe ser almacenada en una tabla en Google BigQuery para su posterior análisis.
- Conectarse a la API del New York Times:
- Usar el endpoint content de la API del NYTimes: https://developer.nytimes.com/docs/timeswire-product/1/overview Para esto, deberás:
- Crear una cuenta en el portal de desarrolladores del NYTimes
- Obtener una API Key
- Aprender cómo usar el endpoint content, que permite consultar noticias recientes.
- Este endpoint permite usar dos parámetros: source y section.
- Si no se especifican, usar el valor "all" en ambos.
- Automatizar la extracción de datos:
- Como el endpoint no permite consultar por fechas, deberás definir cada cuánto ejecutar el script para no perder noticias nuevas.
- Asegurarte de no insertar duplicados entre ejecuciones consecutivas.
- Guardar los datos en BigQuery:
- Crear una tabla en BigQuery para almacenar las noticias.
- Definir el esquema de la tabla (campos y tipos de datos) de acuerdo a la información que devuelve la API.
- Asegurate de incluir una marca de tiempo indicando cuándo se cargó cada noticia.
- Crear dos vistas analíticas en BigQuery:
- Vista 1: Cantidad de noticias por autor y día: Usar el campo byline, que puede tener más de un autor. Asegurate de contar cada autor por separado.
- Vista 2: Noticia más reciente por cada combinación de section y subsection. Debe mostrar: section, subsection, url, title, updated_date.
- Dockerizar la solucion
La solución debe ser entregada en un repositorio de github con la documentación correspondiente para reproducir los resultados. El repositorio puede ser publico o privado (en este caso compartir al usuario creyesp) Los datos deben ser almacenados en este dataset