Utilizzo dell'API del New York Times per scansionare i metadati

Cosa starai creando

introduzione

La scorsa settimana ho scritto un'introduzione allo scraping delle pagine Web per raccogliere i metadati, menzionando che non è possibile analizzare il sito del New York Times. Il paywall Times blocca i tuoi tentativi di raccogliere metadati di base. Ma c'è un modo per aggirare questo usando l'API del New York Times.

Recentemente ho iniziato a costruire un sito di community sulla piattaforma Yii, che avrò pubblicato in un futuro tutorial. Volevo semplificare l'aggiunta di link relativi ai contenuti del sito. Mentre è facile per le persone incollare gli URL nei moduli, diventa anche molto tempo fornire informazioni sul titolo e sulla fonte.

Quindi, nel tutorial di oggi, ho intenzione di espandere il codice di scraping che ho scritto di recente per sfruttare l'API del New York Times per raccogliere i titoli quando vengono aggiunti i link di Times.

Ricorda, parteciperò ai thread dei commenti qui sotto, quindi dimmi cosa ne pensi! Puoi raggiungermi anche su Twitter @lookahead_io.

Iniziare

Registrati per una chiave API

Innanzitutto, registrarsi per richiedere una chiave API:

Dopo aver inviato il modulo, riceverai la tua chiave in un'email:

Esplorando l'API del New York Times

Il Times offre API nelle seguenti categorie:

  • Archivio
  • Ricerca di articoli
  • Libri
  • Comunità
  • geografico
  • Più popolare
  • Recensioni di film
  • Semantico
  • Times Newswire
  • TimesTags
  • Top Stories

È molto. E, dalla pagina Galleria, puoi fare clic su qualsiasi argomento per visualizzare la documentazione della singola categoria API:

The Times utilizza LucyBot per alimentare i propri documenti API e vi è una utile FAQ:

Ti mostrano persino come ottenere rapidamente i limiti di utilizzo dell'API (dovrai inserire la chiave):

 curl - testa 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-Restaining-day: 180 X-RateLimit-Remaining-second: 5

Inizialmente ho faticato a dare un senso alla documentazione: si tratta di una specifica basata su parametri, non una guida alla programmazione. Tuttavia, ho inviato alcune domande come problemi alla pagina GitHub dell'API del New York Times e hanno risposto in modo rapido e utile.

Lavorare con la ricerca di articoli

Per l'episodio di oggi, mi concentrerò sull'utilizzo della ricerca articoli del New York Times. Fondamentalmente, estenderemo il Crea collegamento forma dall'ultimo tutorial:

Quando l'utente fa clic Consultare, faremo una richiesta ajax fino a Collegamento :: Grab ($ url). Ecco la jQuery:

$ (document) .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;);); 

Ecco il controller e il metodo del modello:

// Chiamata controller tramite richiesta di ricerca AJAX funzione statica pubblica actionGrab ($ url) Yii :: $ app-> response-> format = Response :: FORMAT_JSON; return Link :: grab ($ url);  ... // Metodo Link :: grab () public static function grab ($ url) // ripulisci url per hostname $ source_url = parse_url ($ url); $ source_url = $ source_url ['host']; $ source_url = str_ireplace ('www.', ", $ source_url); $ source_url = trim ($ source_url, '\\'); // usa l'API NYT quando hostname == nytimes.com if ($ source_url == ' nytimes.com ') ... 

Successivamente, utilizziamo la nostra chiave API per effettuare una richiesta di ricerca articolo:

 $ 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 // not NYT, usa lo standard raschietto metatag dell'ultimo episodio ... return $ title; 

E funziona abbastanza facilmente: ecco il titolo risultante (a proposito, il cambiamento climatico sta uccidendo gli orsi polari e dovremmo preoccuparcene):

Se desideri maggiori dettagli dalla tua richiesta API, aggiungi solo argomenti aggiuntivi a ?fl = titolo richiesta come parole chiave e lead_paragraph:

Yii :: $ app-> response-> format = Response :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = titolo, parole chiave, 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 ($ risultato);

Ecco il risultato:

Forse scriverò una libreria PHP per analizzare meglio l'API NYT nei prossimi episodi, ma questo codice scomunica le parole chiave e il paragrafo guida:

Yii :: $ app-> response-> format = Response :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = titolo, parole chiave, 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 ($ result-> response-> docs [0] -> parole chiave come $ k) echo $ k-> valore. '
';

Ecco cosa mostra per questo articolo:

Il percorso verso il declino degli orsi polari passa attraverso il villaggio dell'Alaska Gli orsi che vengono qui sono rifugiati climatici, a terra perché il ghiaccio marino su cui fanno affidamento per la caccia alle foche si sta ritirando. Polar Bears Emissioni di gas a effetto serra Alaska Riscaldamento globale Specie in via di estinzione e estinte Unione internazionale per la conservazione della natura Centro nazionale di dati su neve e ghiaccio Polar Bears International United States Geological Survey

Speriamo che inizi a espandere la tua immaginazione su come utilizzare queste API. È piuttosto eccitante quello che potrebbe essere ora possibile.

In chiusura

L'API del New York Times è molto utile e sono lieto di vederli offrirli alla comunità degli sviluppatori. È stato anche utile per ottenere un supporto API così veloce tramite GitHub-I, ma non me lo aspettavo. Tieni presente che è destinato a progetti non commerciali. Se hai qualche idea di fare soldi, invia loro una nota per vedere se lavoreranno con te. Gli editori sono desiderosi di nuove fonti di entrate.

Spero che abbiate trovato utili questi episodi di scraping web e li abbia utilizzati nei vostri progetti. Se ti piacerebbe vedere l'episodio di oggi in azione, puoi provare alcuni dei raschiamenti web sul mio sito, Active Together.

Si prega di condividere eventuali pensieri e feedback nei commenti. Puoi sempre contattarmi direttamente su Twitter @lookahead_io. E assicurati di controllare la mia pagina di istruttore e altre serie, Crea la tua startup con PHP e Programmazione con Yii2.

Link correlati

  • La Galleria dell'API del New York Times
  • Le specifiche dell'API pubblica del New York Times su GitHub
  • Come raschiare le pagine Web per i metadati (Envato Tuts +)
  • Come raschiare le pagine Web con Node.js e jQuery (Envato Tuts +)
  • Costruire il primo raschietto Web in Ruby (Envato Tuts +)