Bruke New York Times API til å skrape metadata

Hva du skal skape

Introduksjon

I forrige uke skrev jeg en introduksjon til skrapende nettsider for å samle metadata, og nevner at det ikke er mulig å skrape New York Times-siden. The Times paywall blokkerer forsøkene dine på å samle grunnleggende metadata. Men det er en vei rundt dette ved hjelp av New York Times API.

Nylig begynte jeg å bygge et fellesskapsside på toppen av Yii-plattformen, som jeg vil ha publisert i en fremtidig opplæring. Jeg ønsket å gjøre det enkelt å legge til lenker relatert til innhold på nettstedet. Mens det er enkelt for folk å lime inn nettadresser i skjemaer, blir det tidkrevende å også gi tittel og kildeinformasjon.

Så i dagens veiledning, skal jeg utvide skrapekoden jeg skrev nylig for å utnytte New York Times API for å samle overskrifter når Times-lenker legges til.

Husk at jeg deltar i kommentarene nedenfor, så fortell meg hva du synes! Du kan også nå meg på Twitter @lookahead_io.

Starter

Registrer deg for en API-nøkkel

Først, la oss registrere deg for å be om en API-nøkkel:

Etter at du har sendt inn skjemaet, vil du motta nøkkelen din i en e-postadresse:

Utforsker New York Times API

The Times tilbyr APIer i følgende kategorier:

  • Arkiv
  • Artikkel Søk
  • bøker
  • Samfunnet
  • Geographic
  • Mest populær
  • Filmanmeldelser
  • semantisk
  • Times Newswire
  • TimesTags
  • Hovedsakene

Det er mye. Og fra Galleri-siden kan du klikke på et emne for å se den enkelte API-kategoridokumentasjonen:

Tider bruker LucyBot til å drive sine API-dokumenter, og det er en nyttig FAQ:

De viser deg selv hvordan du raskt får tak i API-bruksgrensene dine (du må koble til nøkkelen din):

 krølle - hodet https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key= 2> / dev / null | grep -i "X-RateLimit" X-Rate Limit-Limit-dag: 1000 X-Rate Limit-Limit-sekund: 5 X-Rate Limit-Resterende-dag: 180 X-Rate Limit-Resterende-sekund: 5

Jeg har først slitt for å få mening om dokumentasjonen - det er en parameterbasert spesifikasjon, ikke en programmeringsguide. Imidlertid skrev jeg noen spørsmål som problemer på New York Times API GitHub-siden, og de ble raskt og hjelpsomme besvart.

Arbeider med artikkelsøk

For dagens episode skal jeg fokusere på å bruke NY Times Article Search. I utgangspunktet vil vi utvide Opprett Link skjema fra den siste opplæringen:

Når brukeren klikker Se opp, Vi gjør en ajax-forespørsel gjennom til Link :: grab ($ url). Her er jQuery:

$ (dokument) .on ("klikk", "[id = oppslag]", funksjon (hendelse) $ .ajax (url: $ ('# url_prefix') .val () + '/ link / grab' data: url: $ ('# url') .val (), suksess: funksjon (data) $ ('# tittel') .val (data); return true;);); 

Her er kontrolleren og modellmetoden:

// Controller-oppringning via AJAX Oppslagsforespørsel offentlig statisk funksjon actionGrab ($ url) Yii :: $ app-> response-> format = Svar :: FORMAT_JSON; Return Link :: grip ($ url);  ... // Link :: grab () metode offentlig statisk funksjon grip ($ url) // rydde opp ur for vertsnavn $ source_url = parse_url ($ url); $ source_url = $ source_url ['vert']; $ source_url = str_ireplace ('www.', ', $ source_url); $ source_url = trim ($ source_url,' \\ '; // bruk NYT API når vertsnavn == nytimes.com hvis ($ source_url ==' nytimes.com ') ... 

Deretter bruker vi API-nøkkelen til å foreta en artikkelsøkforespørsel:

 $ 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;  ellers // ikke NYT, bruk standard metatagskraperen fra siste episode ... returner $ title; 

Og det fungerer ganske enkelt - her er den resulterende overskriften (forresten, Klimaendringene dreper Polar Bears, og vi skal bryr seg):

Hvis du vil ha flere detaljer fra API-forespørselen, legger du bare til flere argumenter til ?fl = overskrift forespørsel som søkeord og lead_paragraph:

Yii :: $ app-> response-> format = Svar :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = overskrift, søkeord, 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 ($ resultat);

Her er resultatet:

Kanskje jeg skal skrive et PHP-bibliotek for å bedre analysere NYT API i kommende episoder, men denne koden bryter ut søkeordene og leddepartiet:

Yii :: $ app-> response-> format = Svar :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = overskrift, søkeord, 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)); ekko $ result-> response-> docs [0] -> headline-> main. '
''
'; echo $ result-> response-> docs [0] -> lead_paragraph. '
''
'; foreach ($ result-> response-> docs [0] -> søkeord som $ k) echo $ k-> value. '
';

Her er hva det viser for denne artikkelen:

Polar Bears 'Path to Decline kjører gjennom Alaskan Village Bjørnene som kommer hit, er klimaflyktninger, på land fordi sjøisen de stoler på for jaktforsegling er tilbakevendende. Polar Bears Drivhusgassutslipp Alaska Global Warming Endangered and Extinct Species Internasjonal Union for Naturvern Naturlig Snø og Ice Datasenter Polar Bears International United States Geological Survey

Forhåpentligvis begynner det å utvide fantasien din om hvordan du bruker disse APIene. Det er ganske spennende hva kan nå være mulig.

I Avslutning

New York Times API er veldig nyttig, og jeg er glad for å se dem tilby den til utviklerfellesskapet. Det var også forfriskende å få en slik rask API-støtte via GitHub-jeg forventer ikke dette. Husk at det er ment for ikke-kommersielle prosjekter. Hvis du har noen penger å lage ide, send dem et notat for å se om de vil jobbe med deg. Utgivere er ivrige etter nye inntektskilder.

Jeg håper du fant disse webskrapingsepisodene nyttig og la dem bruke i prosjektene dine. Hvis du vil se dagens episode i gang, kan du prøve ut noen av nettskrapingen på nettstedet mitt, Active Together.

Vennligst gjør noen tanker og tilbakemeldinger i kommentarene. Du kan også alltid nå meg på Twitter @lookahead_io direkte. Og sørg for å sjekke ut min instruktørside og andre serier, Bygg din oppstart med PHP og programmering med Yii2.

Relaterte linker

  • New York Times API Gallery
  • New York Times offentlige API-spesifikasjoner på GitHub
  • Slik skraver du websider for metadata (Envato Tuts +)
  • Slik skraver du websider med Node.js og jQuery (Envato Tuts +)
  • Bygg din første nettskraper i Ruby (Envato Tuts +)