Skip to content

Instantly share code, notes, and snippets.

@creyesp
Last active April 8, 2025 18:55
Show Gist options
  • Save creyesp/9744b2b8637448faacb77392874b520c to your computer and use it in GitHub Desktop.
Save creyesp/9744b2b8637448faacb77392874b520c to your computer and use it in GitHub Desktop.

Data Engineering Challenge - Integración de datos con la API de NYTimes

Objetivo

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.

¿Qué vas a hacer?

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.

Tareas del desafío

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

Bonus (opcional)

  • Dockerizar la solucion

Entrega

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment