1. Code
  2. PHP
  3. Yii

Utilizando el API de New York Times para extraer metadatos

La semana pasada, escribí una introducción recopilar páginas web para extraer metadatos, mencionando que no es posible en el sitio de New York Times. El bloqueo pagado de Times bloquea tus intentos de recopilar metadatos básicos. Pero hay una manera alrededor de esto usando el New York Times API.
Scroll to top
This post is part of a series called How to Scrape Web Pages for Metadata.
How to Scrape Web Pages for Metadata

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Introducción

La semana pasada, escribí una introducción recopilar páginas web para extraer metadatos, mencionando que no es posible en el sitio de New York Times. El bloqueo pagado de Times bloquea tus intentos de recopilar metadatos básicos. Pero hay una manera alrededor de esto usando el New York Times API.

Recientemente comencé a construir un sitio de la comunidad encima de la plataforma de Yii, que escribí en programación con Yii2: Construyendo la comunidad con los comentarios, la distribución y la votación (Envato Tuts +). Quería facilitar la adición de enlaces relacionados con el contenido del sitio. Si bien es fácil para las personas pegar direcciones URL en formularios, toma mucho tiempo proporcionar también título e información de origen.

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

Recuerde, yo participo en los hilos de comentarios a continuación, así que dime lo que piensas! También puedes contactarme en Twitter @lookahead_io.

Para empezar

Inscríbase para una clave API

New York Times API - API Gallery Home PageNew York Times API - API Gallery Home PageNew York Times API - API Gallery Home Page

En primer lugar, vamos a inscribirnos y solicitar una clave API:

New York Times API - API Sign Up PageNew York Times API - API Sign Up PageNew York Times API - API Sign Up Page

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

New York Times API - Email with API Key New York Times API - Email with API Key New York Times API - Email with API Key

Explorando la API de New York Times

New York Times API - CategoriesNew York Times API - CategoriesNew York Times API - Categories

El Times ofrece APIs en las siguientes categorías:

  • Archivo
  • Búsqueda de artículo
  • Libros
  • Comunidad
  • Geográfica
  • Más populares
  • Comentarios de la película
  • Semántica
  • Times Newswire
  • TimesTags
  • Historias principales

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

New York Times API - Documentation of articlesearch jsonNew York Times API - Documentation of articlesearch jsonNew York Times API - Documentation of articlesearch json

El Times usa LucyBot para su documentacion de la API, y hay un FAQ de ayuda:

New York Times API - FAQNew York Times API - FAQNew York Times API - FAQ

Incluso te muestran cómo obtener rápidamente los usos de la API (usted necesitará su clave):

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

Inicialmente tuve problemas para dar sentido a la documentación: es una especificación basada en parámetros, no una guía de programación. Sin embargo, publiqué algunas preguntas y problemas a la página GitHub de la API de New York Times, y fueron respondidas rápida y útilmente.

Trabajando con búsqueda

Para el episodio de hoy, voy a centrar en la búsqueda de artículo de NY Times. Básicamente, a ampliar la forma de crear el enlace del tutorial pasado:

New York Times API - Create Link Form with NYT Story URL about Polar BearsNew York Times API - Create Link Form with NYT Story URL about Polar BearsNew York Times API - Create Link Form with NYT Story URL about Polar Bears

Cuando el usuario hace clic en búsqueda, vamos a hacer una petición ajax a través de Link::grab($url). Aquí es el jQuery:

1
$(document).on("click", '[id=lookup]', function(event) {
2
  $.ajax({
3
     url: $('#url_prefix').val()+'/link/grab',
4
     data: {url:   $('#url').val()},
5
     success: function(data) {
6
       $('#title').val(data);
7
       return true;
8
     }
9
  });
10
});

Este es el método de controlador y modelo:

1
// Controller call via AJAX Lookup request

2
public static function actionGrab($url) {
3
  Yii::$app->response->format = Response::FORMAT_JSON;
4
  return Link::grab($url);
5
}
6
...
7
// Link::grab() method

8
public static function grab($url) {
9
  //clean up url for hostname

10
  $source_url = parse_url($url);
11
  $source_url = $source_url['host'];  
12
  $source_url=str_ireplace('www.','',$source_url);
13
  $source_url = trim($source_url,' \\');
14
  // use the NYT API when hostname == nytimes.com 

15
  if ($source_url=='nytimes.com') {
16
   ...

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

1
    $nytKey=Yii::$app->params['nytapi'];    
2
    $curl_dest = 'http://api.nytimes.com

3
        /svc/search/v2/articlesearch.json?fl=headline&fq=web_url:%22'.
4
        $url.'%22&api-key='.$nytKey;
5
    $curl = curl_init();
6
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
7
    curl_setopt($curl, CURLOPT_URL,$curl_dest);
8
    $result = json_decode(curl_exec($curl));
9
    $title = $result->response->docs[0]->headline->main;
10
  } else {
11
    // not NYT, use the standard metatag scraper from last episode

12
         ...
13
    }
14
  }
15
  return $title;
16
}

Y trabaja bastante fácilmente, aquí está el título resultante (por cierto, el cambio climático está matando a los osos polares y deberíamos preocuparnos):

New York Times API - Create Link Form with NYT Story URL and Headline from Article Search APINew York Times API - Create Link Form with NYT Story URL and Headline from Article Search APINew York Times API - Create Link Form with NYT Story URL and Headline from Article Search API

Si usted quiere más detalles de su petición de API, sólo tiene que añadir argumentos adicionales para el ?fl=headline como keywords y lead_paragraph:

1
Yii::$app->response->format = Response::FORMAT_JSON;
2
$nytKey=Yii::$app->params['nytapi'];
3
$curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'.
4
  'fl=headline,keywords,lead_paragraph&fq=web_url:%22'.$url.'%22&api-key='.$nytKey;
5
$curl = curl_init();
6
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
7
curl_setopt($curl, CURLOPT_URL,$curl_dest);
8
$result = json_decode(curl_exec($curl));
9
var_dump($result);

Aquí está el resultado:

The response from the API requestThe response from the API requestThe response from the API request

Tal vez voy a escribir una librería PHP para analizar mejor el API de NYT en próximos episodios, pero este código quiebra las palabras clave y el párrafo guia:

1
Yii::$app->response->format = Response::FORMAT_JSON;
2
$nytKey=Yii::$app->params['nytapi'];
3
$curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'.
4
  'fl=headline,keywords,lead_paragraph&fq=web_url:%22'.$url.'%22&api-key='.$nytKey;
5
$curl = curl_init();
6
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
7
curl_setopt($curl, CURLOPT_URL,$curl_dest);
8
$result = json_decode(curl_exec($curl));
9
echo $result->response->docs[0]->headline->main.'<br />'.'<br />';
10
echo $result->response->docs[0]->lead_paragraph.'<br />'.'<br />';
11
foreach ($result->response->docs[0]->keywords as $k) {
12
  echo $k->value.'<br/>';
13
}

Aquí está lo que muestra para este artículo:

1
Polar Bears’ Path to Decline Runs Through Alaskan Village
2
3
The bears that come here are climate refugees, on land because
4
the sea ice they rely on for hunting seals is receding.
5
6
Polar Bears
7
Greenhouse Gas Emissions
8
Alaska
9
Global Warming
10
Endangered and Extinct Species
11
International Union for Conservation of Nature
12
National Snow and Ice Data Center
13
Polar Bears International
14
United States Geological Survey

Ojala comience a expandir su imaginación de cómo utilizar estas API. Es muy emocionante lo que puede lograr.

En conclusion:

La API del New York Times es muy útil, y me alegra verlos ofreciendo a la comunidad de desarrolladores. También fue refrescante para obtener ese apoyo rápido de API a través de GitHub, simplemente no esperaba esto. Tenga en cuenta que está pensado para proyectos no comerciales. Si tienes alguna idea de hacer dinero, envie una nota a ver si trabajaran con usted. Los editores son deseosos de nuevas fuentes de ingresos.

Espero que encuentre estos episodios de extraccion de metadatos útiles y los utilice en sus proyectos. Si desea ver el episodio de hoy en acción, puede probar algunos de la web extraccion en mi sitio, Active Together.

Por favor comparta sus pensamientos y comentarios en los comentarios. También puede contactarme siempre en Twitter @lookahead_io directamente. Y asegúrese de revisar mi página de instructor y otras series, Construyendo su startup con PHP y la programación con Yii2.

Enlaces relacionados