Folosind API-ul New York Times pentru a șterge metadatele

Ce veți crea

Introducere

Saptamana trecuta, am scris o introducere pentru a dezgropa paginile web pentru a colecta metadatele, mentionand ca nu este posibil sa scarpinem site-ul New York Times. The paywall Times blochează încercările dvs. de a aduna metadate de bază. Dar există o modalitate prin care se folosește API-ul New York Times.

Recent am inceput sa construiesc un site comunitar pe partea de sus a platformei Yii, pe care l-am publicat intr-un viitor tutorial. Am vrut să fac ușor adăugarea de linkuri legate de conținut pe site. Deși este ușor pentru utilizatori să insereze adrese URL în formulare, devine din ce în ce mai dificil să se furnizeze informații despre titlu și sursă.

Deci, în tutorialul de astăzi, voi extinde codul de zgâriere pe care l-am scris recent pentru a utiliza New York Times API pentru a aduna titluri atunci când sunt adăugate linkuri Times.

Rețineți că particip la comentariile de mai jos, deci spuneți-mi ce credeți! Puteți să mă contactați și pe Twitter @lookahead_io.

Noțiuni de bază

Înscrieți-vă pentru o cheie API

În primul rând, să vă înscrieți pentru a solicita o cheie API:

După ce trimiteți formularul, veți primi cheia într-un e-mail:

Explorarea API-ului New York Times

The Times oferă API-uri în următoarele categorii:

  • Arhiva
  • Căutarea articolelor
  • Cărți
  • Comunitate
  • Geografic
  • Cel mai popular
  • Recenzii de filme
  • Semantic
  • Times Newswire
  • TimesTags
  • Stiri de top

E mult. Și, din pagina Galerie, puteți face clic pe orice subiect pentru a vedea documentația categoriei API individuale:

Times folosesc LucyBot pentru a-și acționa documentele API și există o întrebare utilă:

Ei chiar vă arată cum să obțineți rapid limitele de utilizare a API-ului (va trebui să conectați cheia dvs.):

 curl -head https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key= 2> / dev / null | grep -i "X-RateLimit" X-RateLimit-Limita-zi: 1000 X-RateLimit-Limita-secundă: 5 X-Rata Limită-rămășiță-zi: 180 X-RateLimit-a doua: 5

Am încercat inițial să înțeleg documentația - este o specificație bazată pe parametri, nu un ghid de programare. Cu toate acestea, am trimis câteva întrebări ca probleme la pagina New York Times API GitHub și au fost repede și ușor de răspuns.

Lucrul cu căutarea unui articol

Pentru episodul de astăzi, mă voi concentra pe folosirea căutării articolelor din NY Times. Practic, vom extinde Creați o legătură formular din ultimul tutorial:

Când utilizatorul face clic Privește în sus, vom face o cerere ajax până la Link :: apuca ($ url). Iată jQuery:

$ (document) .on ("click", "[id = lookup"], functie (eveniment) $. date: url: $ ('# url') val (), succes: functie (date) $ ('titlu'). 

Iată modul de controler și model:

// Control apelant prin AJAX cerere de căutare statică funcția statică actionGrab ($ url) Yii :: $ app-> răspuns-> format = răspuns :: FORMAT_JSON; returnează Link :: apuca ($ url);  ... // Link :: metoda grab () metoda public static apuca ($ url) // curata url pentru hostname $ source_url = parse_url ($ url); $ source_url = $ source_url ['gazdă']; ($ source_url, '\\'); // folosiți API-ul NYT când hostname == nytimes.com dacă ($ source_url == '$ source_url =' str_ireplace ' nytimes.com ') ... 

Apoi, hai să folosim cheia API pentru a face o solicitare de căutare a unui articol:

 $ 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 = $ rezultat-> răspuns-> docs [0] -> titlu-> principal;  altceva // nu NYT, utilizați răzuitorul metatag standard din ultimul episod ... return $ title; 

Și funcționează destul de ușor - iată titlul rezultat (apropo, schimbările climatice ucid urșii polari și ar trebui să avem grijă):

Dacă doriți mai multe detalii din solicitarea dvs. API, trebuie doar să adăugați argumente suplimentare la ?fl = titlu cum ar fi Cuvinte cheie și lead_paragraph:

Yii :: $ app-> răspuns-> format = Răspuns :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = titlu, cuvinte cheie, lead_paragraph & FQ = parametru 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 ($ rezultat);

Iată rezultatul:

Poate voi scrie o bibliotecă PHP pentru a analiza mai bine API-ul NYT în episoadele viitoare, dar acest cod sparge cuvintele cheie și paragraful principal:

Yii :: $ app-> răspuns-> format = Răspuns :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = titlu, cuvinte cheie, lead_paragraph & FQ = parametru 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-> answer-> docs [0] -> headline-> main. "
''
„; echo $ result-> answer-> docs [0] -> lead_paragraph. "
''
„; foreach ($ result-> answer-> docs [0] -> cuvinte cheie ca $ k) echo $ k-> value. "
„;

Iată ce arată pentru acest articol:

Calea ursilor polari de a refuza să alerge prin satul Alaskan Urșii care vin aici sunt refugiații climatici, pe uscat, deoarece gheața de mare pe care se bazează pentru cămășile de vânătoare se retrage. Polar Bears Emisiile de gaze cu efect de seră Alaska Global Încălzirea pe cale de dispariție și a dispărut specii Uniunea Internațională pentru Conservarea Naturii Național de zăpadă și gheață Centrul de date Polar Bears International Statele Unite ale Americii geologice Survey

Sperăm că începe să vă extindeți imaginația cu privire la modul de utilizare a acestor API-uri. Este destul de interesant ceea ce acum este posibil.

În încheiere

API-ul New York Times este foarte util și mă bucur să văd că le oferă comunității de dezvoltatori. De asemenea, a fost revigorant să obțineți un astfel de suport API rapid prin GitHub - nu tocmai mă așteptam la asta. Rețineți că este destinat proiectelor necomerciale. Dacă aveți o idee de a face bani, trimiteți-le o notă pentru a vedea dacă vor lucra cu dvs. Editorii sunt dornici de noi surse de venit.

Sper că ați găsit aceste episoade de răsturnare web utile și le-ați pus să le folosească în proiectele dvs. Dacă doriți să vedeți episodul de astăzi în acțiune, puteți încerca o parte din răsturnarea de pe site-ul meu, Active Together.

Vă rugăm să împărtășiți orice gânduri și feedback în comentarii. De asemenea, puteți să mă contactați direct pe Twitter @lookahead_io direct. Și asigurați-vă că pentru a verifica pagina mea de instructor și alte serii, construirea dvs. de pornire cu PHP și de programare cu Yii2.

Link-uri conexe

  • Galeria API din New York Times
  • Specificațiile public API ale New York Times pe GitHub
  • Cum să scrapeți paginile Web pentru metadate (Envato Tuts +)
  • Cum să scrapeți paginile Web cu Node.js și jQuery (Envato Tuts +)
  • Construirea primei raclete Web în Ruby (Envato Tuts +)
Cod