Utilisation de l'API du New York Times pour supprimer des métadonnées

Ce que vous allez créer

introduction

La semaine dernière, j'ai écrit une introduction à la suppression de pages Web pour collecter des métadonnées, en précisant qu'il était impossible de supprimer le site du New York Times. Le paywall Times bloque vos tentatives de collecte de métadonnées de base. Mais il y a un moyen de contourner cela en utilisant l'API du New York Times.

Récemment, j'ai commencé à construire un site communautaire au-dessus de la plate-forme Yii, que je publierai dans un prochain tutoriel. Je voulais faciliter l'ajout de liens liés au contenu du site. Bien qu'il soit facile de coller des URL dans des formulaires, il est également fastidieux de fournir des informations sur le titre et la source..

Donc, dans le tutoriel d'aujourd'hui, je vais développer le code de grattage que j'ai écrit récemment pour tirer parti de l'API du New York Times afin de rassembler les titres lorsque des liens Times sont ajoutés..

N'oubliez pas que je participe aux commentaires ci-dessous, alors dites-moi ce que vous en pensez! Vous pouvez également me joindre sur Twitter @lookahead_io.

Commencer

Inscrivez-vous pour une clé API

Tout d'abord, inscrivons-nous pour demander une clé API:

Après avoir envoyé le formulaire, vous recevrez votre clé dans un courrier électronique:

Explorer l'API du New York Times

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

  • Archiver
  • 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 afficher la documentation de chaque catégorie d’API:

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

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

 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-Limit: 5 X-RateLimit-day-resting: 180 X-RateLimit-Limited-resting: 5

J'ai d'abord eu du mal à comprendre la documentation. Il s'agit d'une spécification basée sur des paramètres et non d'un guide de programmation. Cependant, j'ai posté certaines questions sous forme de problèmes sur la page GitHub de l'API du New York Times. On y a répondu rapidement et utilement..

Travailler avec la recherche d'article

Pour l'épisode d'aujourd'hui, je vais me concentrer sur l'utilisation de la recherche d'articles dans le NY Times. Fondamentalement, nous étendrons la Créer un lien formulaire du dernier tutoriel:

Lorsque l'utilisateur clique Chercher, nous ferons une demande ajax jusqu'à Link :: grab ($ url). Voici le jQuery:

$ (document) .on ("clic", '[id = recherche]', fonction (événement) $ .ajax (url: $ ('# url_prefix'). val () + '/ link / grab', data: url: $ ('# url'). val (), succès: fonction (data) $ ('# title'). val (data); return (;);); 

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

// Appel du contrôleur via une demande de consultation AJAX, fonction statique publique actionGrab ($ url) Yii :: $ app-> response-> format = Response :: FORMAT_JSON; retourne Link :: grab ($ url); … // Méthode Link :: grab () public static function grab ($ url) // URL de nettoyage pour le nom d'hôte $ source_url = parse_url ($ url); $ source_url = $ source_url ['hôte']; $ source_url = str_ireplace ('www.', ", $ source_url); $ source_url = trim ($ source_url, '\\'); // utilise l'API NYT lorsque hostname == nytimes.com if ($ source_url == ' nytimes.com ') … 

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

 $ 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 // pas NYT, utilisez le programme standard de métabalise du dernier épisode… return $ title; 

Et cela fonctionne assez facilement-voici le titre résultant (à propos, le changement climatique tue les ours polaires et nous devrions nous en préoccuper):

Si vous souhaitez plus de détails à partir de votre demande d'API, ajoutez simplement des arguments supplémentaires à la commande. ?fl = titre demande telle que mots clés et plomb_ paragraphe:

Yii :: $ app-> response-> format = Response :: FORMAT_JSON; $ nytKey = Yii :: $ app-> params ['nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'fl = titre, mots-clés, principal_ paragraphe & 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 ($ result);

Voici le résultat:

J'écrirai peut-être une bibliothèque PHP pour mieux analyser l'API NYT dans les prochains épisodes, mais ce code détache les mots-clés et le paragraphe 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 = titre, mots-clés, principal_ paragraphe & 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_icle. '
'.'
'; foreach ($ result-> response-> docs [0] -> mots-clés en tant que $ k) echo $ k-> valeur. '
';

Voici ce que cela montre pour cet article:

La trajectoire de déclin des ours polaires passe par un village de l'Alaska Les ours qui viennent ici sont des réfugiés climatiques, sur terre parce que la glace de mer dont ils dépendent pour chasser les phoques se retire. Polar Bears Émissions de gaz à effet de serre Alaska Réchauffement de la planète Espèces en voie de disparition et disparues Union internationale pour la conservation de la nature Centre national de données sur la neige et la glace Polar Bears International Enquête géologique des États-Unis

Espérons que cela commence à élargir votre imagination sur l'utilisation de ces API. C'est assez excitant ce qui peut maintenant être possible.

En clôture

L'API du New York Times est très utile et je suis ravi de le voir l'offrir à la communauté des développeurs. Il était également rafraîchissant d'obtenir un support aussi rapide des API via GitHub. Je ne m'y attendais pas. N'oubliez pas qu'il est destiné à des projets non commerciaux. Si vous avez une idée de gagner de l'argent, envoyez-leur une note pour voir s'ils travailleront avec vous. Les éditeurs sont avides de nouvelles sources de revenus.

J'espère que vous avez trouvé ces épisodes de raclage Web utiles et que vous les avez utilisés dans vos projets. Si vous souhaitez voir l'épisode d'aujourd'hui en action, vous pouvez essayer une partie de la récupération Web sur mon site, Active Together.

S'il vous plaît, partagez vos pensées et vos commentaires dans les commentaires. Vous pouvez également toujours me joindre directement sur Twitter @lookahead_io. Et n'oubliez pas de consulter ma page d'instructeur et d'autres séries, Construire votre démarrage avec PHP et Programmer avec Yii2.

Liens connexes

  • La galerie des API du New York Times
  • Spécifications de l'API publique du New York Times sur GitHub
  • Comment gratter les pages Web pour les métadonnées (Envato Tuts +)
  • Comment supprimer des pages Web avec Node.js et jQuery (Envato Tuts +)
  • Construire votre premier grattoir Web en Ruby (Envato Tuts +)