Advertisement
  1. Code
  2. PHP

Utilisation de l'API du New York Times pour gratter les métadonnées

Scroll to top
Read Time: 5 min
This post is part of a series called How to Scrape Web Pages for Metadata.
How to Scrape Web Pages for Metadata

() translation by (you can also view the original English article)

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

Introduction

La semaine dernière, j'ai écrit une introduction aux pages web de grattage pour recueillir des métadonnées, mentionnant qu'il n'est pas possible de rayer le site de New York Times. The Times paywall bloque vos tentatives de collecte des métadonnées de base. Mais il y a un moyen de le faire en utilisant l'API du New York Times.

Récemment, j'ai commencé à construire un site communautaire sur la plate-forme Yii, dont j'ai écrit sur la Programmation avec Yii2: Construire une communauté avec commentaires, partage et vote (Envato Tuts+). Je voulais faciliter l'ajout de liens liés au contenu sur le site. Bien qu'il soit facile pour les personnes de coller des URL dans des formulaires, il devient beaucoup plus important de fournir des informations sur les titres et les sources.

Donc, dans le tutoriel d'aujourd'hui, je vais étendre le code de raclage que j'ai écrit récemment pour tirer parti de l'API du New York Times pour recueillir les manchettes lorsque les liens Times sont ajoutés.

Rappelez-vous, je participe aux fils de commentaires ci-dessous, alors dites-moi ce que vous en pensez! Vous pouvez également me rejoindre sur Twitter @lookahead_io.

Commençons

Inscrivez-vous pour une clé d'API

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

D'abord, inscrivez-vous pour demander une clé API:

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

Après avoir soumis le formulaire, vous recevrez votre clé dans un courriel:

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

Exploration de l'API de New York Times

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

The Times propose des API dans les catégories suivantes:

  • Archive
  • Recherche d'article
  • Livres
  • Communauté
  • Géographique
  • Le plus populaire
  • Critiques de films
  • Sémantique
  • Times Newswire
  • TimesTags
  • Meilleurs histoires

C'est beaucoup. Et, à partir de la page Galerie, vous pouvez cliquer sur n'importe quel sujet pour voir la documentation de la catégorie API individuelle:

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

The Times utilise LucyBot pour alimenter ses documents API, et il existe une FAQ utile:

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

Ils vous montrent même comment obtenir rapidement vos limites d'utilisation de l'API (vous devrez brancher votre clé):

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

J'ai initialement eu du mal à comprendre la documentation: c'est une spécification paramétrique, pas un guide de programmation. Cependant, j'ai posté quelques questions en tant que problèmes à la page GitHub de l'API New York Times, et ils ont répondu rapidement et efficacement.

Travailler avec la recherche d'article

Pour l'épisode d'aujourd'hui, je me concentrerai sur l'utilisation de la New York Times Search. Fondamentalement, nous allons étendre le formulaire Create Link à partir du dernier tutoriel:

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

Lorsque l'utilisateur clique sur Lookup, nous ferons une requête ajax via Link::grab($url). Voici le 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
});

Voici la méthode du contrôleur et du modèle:

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

Ensuite, utilisons notre clé API pour faire une demande de recherche d'article:

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
}

Et cela fonctionne assez facilement—voici le titre qui en résulte (en passant, le changement climatique tue les ours polaires et nous devrions nous occuper):

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 vous souhaitez plus de détails à partir de votre demande d'API, ajoutez simplement des arguments supplémentaires à la requête ?fl=headline, comme les keywords et le paragraphe 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);

Voici le résultat:

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

Peut-être que je vais écrire une bibliothèque PHP pour mieux analyser l'API NYT dans les épisodes à venir, mais ce code éclate les mots-clés et le paragraphe principal:

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
}

Voici ce qu'il montre pour cet article:

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

Espérons que cela commence à élargir votre imagination sur la façon d'utiliser ces API. C'est plutôt excitant ce qui peut être possible.

En clôture

L'API du New York Times est très utile et je suis heureux de les voir en offrant à la communauté des développeurs. Il était également rafraîchissant d'obtenir un tel support API rapide via GitHub—je ne m'attendais pas à cela. Gardez à l'esprit qu'il est destiné à des projets non commerciaux. Si vous avez une idée d'argent, envoyez-leur une note pour voir s'ils vont travailler avec vous. Les éditeurs souhaitent de nouvelles sources de revenus.

J'espère que vous avez trouvé ces épisodes de raclage Web utiles et que vous les utiliserez dans vos projets. Si vous souhaitez voir l'épisode actuel en action, vous pouvez essayer une partie du grattage web sur mon site, Active Together.

Veuillez faire part de vos réflexions et commentaires dans les commentaires. Vous pouvez également me contacter directement sur Twitter @lookahead_io directement. Et assurez-vous de vérifier ma page d'instructeur et d'autres séries, Créer votre démarrage avec PHP et Programmer avec Yii2.

Liens connexes

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.