Använda New York Times API för att skrapa metadata

Vad du ska skapa

Introduktion

Förra veckan skrev jag en introduktion till skrapning av webbsidor för att samla metadata och nämna att det inte går att skrapa New York Times-webbplatsen. The Times paywall blockerar dina försök att samla grundläggande metadata. Men det finns ett sätt runt detta med hjälp av New York Times API.

Nyligen började jag bygga en community-plats ovanpå Yii-plattformen, som jag kommer att ha publicerat i en framtida handledning. Jag ville göra det enkelt att lägga till länkar relaterade till innehåll på webbplatsen. Även om det är lätt för människor att klistra in webbadresser i formulär, blir det tidskrävande att även tillhandahålla titel- och källinformation.

Så i dagens handledning kommer jag att utöka skrapkoden som jag skrev nyligen för att utnyttja New York Times API för att samla rubriker när Times-länkar läggs till.

Kom ihåg att jag deltar i kommentarspreadema nedan, så berätta vad du tycker! Du kan också nå mig på Twitter @lookahead_io.

Komma igång

Registrera dig för en API-nyckel

Låt oss först registrera dig för att begära en API-nyckel:

När du skickar in formuläret får du din nyckel i ett e-postmeddelande:

Utforska New York Times API

Tiderna erbjuder API i följande kategorier:

  • arkiv
  • Artikel sökning
  • Böcker
  • gemenskap
  • Geografisk
  • Mest populär
  • Filmrecensioner
  • Semantisk
  • Times Newswire
  • TimesTags
  • Mest lästa artiklar

Det är mycket. Och från Gallerysidan kan du klicka på något ämne för att se den enskilda API-kategoridokumentationen:

Tiderna använder LucyBot för att driva sina API-dokument, och det finns en användbar FAQ:

De visar till och med hur du snabbt får dina API-användningsgränser (du måste ange din nyckel):

 curl - head https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key= 2> / dev / null | grep -i "X-RateLimit" X-RateLimit-Limit-dag: 1000 X-RateLimit-Limit-sekund: 5 X-RateLimit-Återstående dag: 180 X-RateLimit-Återstående-sekund: 5

Jag kämpade i början för att ge mening om dokumentationen - det är en parameterbaserad specifikation, inte en programmeringsguide. Jag lade dock upp några frågor som problem på New York Times API GitHub-sidan, och de besvarades snabbt och användbart.

Arbeta med artikel sökning

För dagens avsnitt kommer jag att fokusera på att använda NY Times Article Search. I grund och botten kommer vi att förlänga Skapa länk formuläret från den sista handledningen:

När användaren klickar Slå upp, Vi gör en ajaxförfrågan till Länk :: grab ($ url). Här är jQuery:

$ (dokument) .on ("klicka", "[id = uppslag]", funktion (händelse) $ .ajax (url: $ ('# url_prefix') .val () + '/ link / grab' data: url: $ ('# url') .val (), framgång: funktion (data) $ ('# title') .val (data); returnera true;);); 

Här är kontrollern och modellmetoden:

// Controller-samtal via AJAX Lookup-begäran offentlig statisk funktion actionGrab ($ url) Yii :: $ app-> response-> format = Svar :: FORMAT_JSON; returnera länk :: greppa ($ url);  ... // Länk :: grab () metod offentlig statisk funktion grip ($ url) // städa url för värdnamn $ source_url = parse_url ($ url); $ source_url = $ source_url ['host']; $ source_url = str_ireplace ('www.', ', $ source_url); $ source_url = trim ($ source_url,' \\ '; // använd NYT API när värdnamn == nytimes.com om ($ source_url ==' nytimes.com ") ... 

Låt oss sedan använda vår API-nyckel för att göra en artikelsökningsbegäran:

 $ 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, använd standardmetatagskrapan från sista episoden ... returnera $ title; 

Och det fungerar ganska enkelt - här är den resulterande rubriken (förresten, klimatförändringarna dödar polarbjörnar och vi bör bry sig om):

Om du vill ha mer information från din API-förfrågan, lägg bara till ytterligare argument till ?fl = rubrik begära t.ex. nyckelord och 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 = rubrik, nyckelord, 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 ($ result);

Här är resultatet:

Kanske ska jag skriva ett PHP-bibliotek för att bättre analysera NYT API i kommande episoder, men den här koden bryter ut sökorden och ledningsavsnittet:

Yii :: $ app-> response-> format = Svar :: FORMAT_JSON; $ NytKey = Yii :: $ app-> params [ 'nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'Fl = rubrik, nyckelord, 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] -> sökord som $ k) echo $ k-> value. '
';

Här är vad det visar för den här artikeln:

Polar Bears Path att minska körningar genom Alaskan Village Björnarna som kommer hit är klimatflyktingar på land eftersom den is som de är beroende av för att jaga sälar minskar. Polar Bears Växthusgasutsläpp Alaska Global Uppvärmning Utrotningshotade och utrotade arter Internationell union för naturskydd Naturlig snö och is Data Center Polar Bears International United States Geological Survey

Förhoppningsvis börjar det utöka din fantasi om hur du använder dessa API. Det är ganska spännande vad som nu kan vara möjligt.

I stängning

New York Times API är mycket användbart, och jag är glad att se dem erbjuda den till utvecklaren. Det var också uppfriskande att få så snabbt API-stöd via GitHub-jag förväntade mig inte detta. Tänk på att den är avsedd för icke-kommersiella projekt. Om du har några pengar att göra idé, skicka dem en anteckning för att se om de kommer att arbeta med dig. Utgivare är angelägna om nya inkomstkällor.

Jag hoppas att du hittade dessa webbskrapningsepisoder och hjälp dem till att använda i dina projekt. Om du vill se dagens episod i aktion kan du prova några av webbskrapningen på min sida, Active Together.

Vänligen dela alla tankar och feedback i kommentarerna. Du kan också alltid nå mig på Twitter @lookahead_io direkt. Och se till att kolla in min instruktörssida och andra serier, Bygg din start med PHP och programmering med Yii2.

relaterade länkar

  • New York Times API Gallery
  • New York Times offentliga API-specifikationer på GitHub
  • Så här skrapar du webbsidor för metadata (Envato Tuts +)
  • Så här skrapar du webbsidor med Node.js och jQuery (Envato Tuts +)
  • Bygg din första webbskrapa i Ruby (Envato Tuts +)