Uso de la API del New York Times para raspar metadatos

Lo que vas a crear

Introducción

La semana pasada, escribí una introducción a raspar las páginas web para recopilar metadatos, mencionando que no es posible raspar el sitio del New York Times. El paywall del Times bloquea sus intentos de recopilar metadatos básicos. Pero hay una manera de evitar esto usando la API de New York Times.

Recientemente comencé a construir un sitio comunitario sobre la plataforma Yii, que habré publicado en un futuro tutorial. Quería facilitar la adición de enlaces relacionados con el contenido del sitio. Si bien es fácil para las personas pegar URL en formularios, se requiere mucho tiempo para proporcionar también información de título y fuente.

Así que en el tutorial de hoy, voy a expandir el código de raspado que escribí recientemente para aprovechar la API del New York Times para recopilar titulares cuando se agregan los enlaces de Times.

Recuerda, participo en los hilos de comentarios a continuación, ¡dime qué piensas! También puedes contactarme en Twitter @lookahead_io.

Empezando

Regístrese para obtener una clave API

Primero, registrémonos para solicitar una clave API:

Después de enviar el formulario, recibirá su clave en un correo electrónico:

Explorando el API del New York Times

The Times ofrece API en las siguientes categorías:

  • Archivo
  • Búsqueda de artículos
  • Libros
  • Comunidad
  • Geográfico
  • Más popular
  • Críticas de cine
  • Semántico
  • Times Newswire
  • TiemposTags
  • Historias principales

Es mucho. Y, desde la página de la Galería, puede hacer clic en cualquier tema para ver la documentación de la categoría de API individual:

The Times usa LucyBot para alimentar sus documentos de API, y hay una sección de preguntas frecuentes útiles:

Incluso te muestran cómo obtener rápidamente tus límites de uso de API (deberás conectar tu clave):

 curl --head https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key= 2> / dev / null | grep -i "X-RateLimit" X-RateLimit-Limit-day: 1000 X-RateLimit-Limit-second: 5 X-RateLimit-Remaining-day: 180 X-RateLimit-Remaining second: 5

Al principio me costó entender la documentación: es una especificación basada en parámetros, no una guía de programación. Sin embargo, publiqué algunas preguntas como problemas en la página de GitHub del New York Times API, y fueron respondidas de manera rápida y útil.

Trabajar con la búsqueda de artículos

Para el episodio de hoy, me centraré en usar la Búsqueda de artículos del NY Times. Básicamente, extenderemos el Crear vínculo formulario del último tutorial:

Cuando el usuario hace clic Buscar, haremos una solicitud ajax a través de Enlace :: grab ($ url). Aquí está la jQuery:

$ (documento) .on ("click", '[id = lookup]', function (event) $ .ajax (url: $ ('# url_prefix'). val () + '/ link / grab', data: url: $ ('# url'). val (), success: function (data) $ ('# title'). val (data); return true;);); 

Aquí está el método de controlador y modelo:

// Llamada del controlador a través de AJAX Búsqueda de la función estática pública actionGrab ($ url) Yii :: $ app-> response-> format = Response :: FORMAT_JSON; enlace de retorno :: grab ($ url); … // Link :: grab () método public static function grab ($ url) // limpiar url para el nombre de host $ source_url = parse_url ($ url); $ source_url = $ source_url ['host']; $ source_url = str_ireplace ('www.', ", $ source_url); $ source_url = trim ($ source_url, '\\'); // use la API de NYT cuando hostname == nytimes.com if ($ source_url == ' nytimes.com ') … 

A continuación, usemos nuestra clave API para realizar una solicitud de búsqueda de artículo:

 $ nytKey = Yii :: $ app-> params ['nytapi']; $ curl_dest = 'http://api.nytimes.com /svc/search/v2/articlesearch.json?fl=headline&fq=web_url:%22'. $ url. '% 22 & api-key ='. $ nytKey; $ curl = curl_init (); curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ curl, CURLOPT_URL, $ curl_dest); $ result = json_decode (curl_exec ($ curl)); $ title = $ result-> response-> docs [0] -> headline-> main;  else // no NYT, use el raspador de metatag estándar del último episodio ... devolver $ título; 

Y funciona con bastante facilidad: aquí está el titular resultante (por cierto, El cambio climático está matando a los osos polares y deberíamos preocuparnos):

Si desea más detalles de su solicitud de API, simplemente agregue argumentos adicionales a la ?fl = titular solicitud como palabras clave y párrafo principal:

Yii :: $ app-> response-> format = Response :: FORMAT_JSON; $ nytKey = Yii :: $ app-> params ['nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'fl = titular, palabras clave, lead_paragraph & fq = web_url:% 22'. $ url. '% 22 & api-key ='. $ nytKey; $ curl = curl_init (); curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ curl, CURLOPT_URL, $ curl_dest); $ result = json_decode (curl_exec ($ curl)); var_dump ($ resultado);

Aquí está el resultado:

Tal vez escriba una biblioteca de PHP para analizar mejor la API de NYT en los próximos episodios, pero este código rompe las palabras clave y el párrafo principal:

Yii :: $ app-> response-> format = Response :: FORMAT_JSON; $ nytKey = Yii :: $ app-> params ['nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'fl = titular, palabras clave, lead_paragraph & fq = web_url:% 22'. $ url. '% 22 & api-key ='. $ nytKey; $ curl = curl_init (); curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ curl, CURLOPT_URL, $ curl_dest); $ result = json_decode (curl_exec ($ curl)); echo $ result-> response-> docs [0] -> headline-> main. '
'.'
'; echo $ result-> response-> docs [0] -> lead_paragraph. '
'.'
'; foreach ($ resultado-> respuesta-> docs [0] -> palabras clave como $ k) echo $ k-> valor. '
';

Esto es lo que se muestra para este artículo:

El camino de los osos polares a la decadencia corre por la aldea de Alaska Los osos que vienen aquí son refugiados climáticos, en tierra porque el hielo marino del que dependen para cazar focas está retrocediendo. Polar Bears Emisiones de gases de efecto invernadero Alaska Calentamiento Global Especies en peligro de extinción y extinción Unión Internacional para la Conservación de la Naturaleza Centro Nacional de Datos de Nieve y Hielo Polar Bears International Estudio Geológico de los Estados Unidos

Esperemos que esto empiece a expandir su imaginación sobre cómo usar estas API. Es muy emocionante lo que ahora puede ser posible.

Para concluir

El API del New York Times es muy útil, y me complace ver que lo ofrecen a la comunidad de desarrolladores. También fue refrescante obtener tan rápido soporte de API a través de GitHub, simplemente no esperaba esto. Tenga en cuenta que está destinado a proyectos no comerciales. Si tiene alguna idea para hacer dinero, envíeles una nota para ver si van a trabajar con usted. Los editores están ansiosos por nuevas fuentes de ingresos.

Espero que hayan encontrado útiles estos episodios de raspado web y que puedan usarlos en sus proyectos. Si desea ver el episodio de hoy en acción, puede probar algunos de los raspados web en mi sitio, Active Together.

Por favor, comparta cualquier opinión y comentarios en los comentarios. También siempre puedes contactarme directamente en Twitter @lookahead_io. Y asegúrese de revisar mi página de instructor y otras series, Construyendo su inicio con PHP y Programando con Yii2.

enlaces relacionados

  • La galería API del New York Times
  • Las especificaciones de la API pública del New York Times en GitHub
  • Cómo raspar páginas web para metadatos (Envato Tuts +)
  • Cómo raspar páginas web con Node.js y jQuery (Envato Tuts +)
  • Construyendo tu primer raspador web en Ruby (Envato Tuts +)