Verwenden der New York Times-API zum Abkratzen von Metadaten

Was Sie erstellen werden

Einführung

Letzte Woche habe ich eine Einführung in das Scraping von Webseiten zum Sammeln von Metadaten geschrieben und erwähnt, dass es nicht möglich ist, die New York Times-Site zu kratzen. Die Paywall von Times blockiert Ihre Versuche, grundlegende Metadaten zu sammeln. Mit der New York Times API kann dies jedoch umgangen werden.

Vor kurzem habe ich angefangen, eine Community-Site auf der Yii-Plattform zu erstellen, die ich in einem zukünftigen Tutorial veröffentlichen werde. Ich wollte das Hinzufügen von Links zu Inhalten auf der Website erleichtern. URLs können zwar leicht in Formulare eingefügt werden, es ist jedoch zeitaufwendig, auch Titel- und Quelleninformationen bereitzustellen.

Im heutigen Tutorial werde ich den Scraping-Code, den ich kürzlich geschrieben habe, erweitern, um die New York Times API zu nutzen, um Schlagzeilen zu sammeln, wenn Times-Links hinzugefügt werden.

Denken Sie daran, ich beteilige mich an den Kommentarthreads unten, also sagen Sie mir, was Sie denken! Sie können mich auch auf Twitter @lookahead_io erreichen.

Fertig machen

Melden Sie sich für einen API-Schlüssel an

Lassen Sie uns zunächst einen API-Schlüssel anfordern:

Nachdem Sie das Formular abgeschickt haben, erhalten Sie Ihren Schlüssel per E-Mail:

Erkunden der New York Times API

The Times bietet APIs in den folgenden Kategorien an:

  • Archiv
  • Artikelsuche
  • Bücher
  • Gemeinschaft
  • Geografisch
  • Am beliebtesten
  • Filmkritiken
  • Semantisch
  • Times Newswire
  • TimesTags
  • Top-Geschichten

Das ist viel. Außerdem können Sie auf der Galerie-Seite auf ein beliebiges Thema klicken, um die Dokumentation zur einzelnen API-Kategorie anzuzeigen:

Die Times verwendet LucyBot, um ihre API-Dokumente zu aktivieren, und es gibt hilfreiche FAQs:

Sie zeigen Ihnen sogar, wie Sie schnell die API-Nutzungsgrenzen erhalten (Sie müssen Ihren Schlüssel eingeben):

 curl --head https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key= 2> / dev / null | grep -i "X-RateLimit" X-RateLimit-Limit-Tag: 1000 X-RateLimit-Limit-Sekunde: 5 X-RateLimit-Resttag: 180 X-RateLimit-Restsekunde: 5

Ich hatte anfangs Schwierigkeiten, die Dokumentation zu verstehen - es handelt sich um eine parameterbasierte Spezifikation und nicht um eine Programmieranleitung. Ich habe jedoch einige Fragen als Probleme auf der GitHub-Seite der New York Times-API veröffentlicht, die schnell und hilfreich beantwortet wurden.

Arbeiten mit der Artikelsuche

Für die heutige Episode werde ich mich auf die NY Times Artikelsuche konzentrieren. Grundsätzlich erweitern wir die Link erstellen Formular aus dem letzten Tutorial:

Wenn der Benutzer klickt Sieh nach oben, Wir machen eine Ajax-Anfrage bis Link :: grab ($ url). Hier ist die jQuery:

$ (document) .on ("click", '[id = lookup] "), Funktion (Ereignis) $ .ajax (url: $ (' # url_prefix '). val () +' / link / grab ', data: url: $ ('# url'). val (), success: function (data) $ ('# title'). val (data); return true;;); 

Hier ist die Controller- und Modellmethode:

// Controller-Aufruf über AJAX-Lookup-Anforderung öffentliche statische Funktion actionGrab ($ url) Yii :: $ app-> response-> format = Antwort :: FORMAT_JSON; return Link :: grab ($ url); … // Link :: grab () - Methode öffentliche statische Funktion grab ($ url) // Bereinigungs-URL für Hostname $ source_url = parse_url ($ url); $ source_url = $ source_url ['host']; $ source_url = str_ireplace ('www.', ", $ source_url); $ source_url = trim ($ source_url, '\\'); // verwendet die NYT-API, wenn hostname == nytimes.com if ($ source_url == ' nytimes.com ') … 

Als Nächstes verwenden wir unseren API-Schlüssel, um eine Artikelsuchanforderung zu erstellen:

 $ 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 // nicht NYT, verwende den Standard-Metatag-Scraper der letzten Episode… return $ title; 

Und es funktioniert ganz einfach - hier ist die resultierende Schlagzeile (übrigens), Der Klimawandel bringt Eisbären um und wir sollten uns darum kümmern):

Wenn Sie weitere Details zu Ihrer API-Anforderung wünschen, fügen Sie einfach weitere Argumente hinzu ?fl = Überschrift Anfrage wie Schlüsselwörter und Lead_Absatz:

Yii :: $ app-> response-> format = Antwort :: FORMAT_JSON; $ nytKey = Yii :: $ app-> params ['nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'fl = Überschrift, Schlüsselwörter, 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);

Hier ist das Ergebnis:

Vielleicht schreibe ich eine PHP-Bibliothek, um die NYT-API in den nächsten Episoden besser analysieren zu können, aber dieser Code bricht die Schlüsselwörter und den Hauptabschnitt auf:

Yii :: $ app-> response-> format = Antwort :: FORMAT_JSON; $ nytKey = Yii :: $ app-> params ['nytapi']; $ curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. 'fl = Überschrift, Schlüsselwörter, 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] -> Schlüsselwörter als $ k) echo $ k-> value. '
';

Folgendes wird für diesen Artikel gezeigt:

Der Weg der Eisbären zur Ablehnung führt durch Alaskas Dorf Die Bären, die hierher kommen, sind Klimaflüchtlinge, an Land, weil das Meereis, auf das sie sich bei der Robbenjagd verlassen, rückläufig ist. Eisbären Treibhausgasemissionen Alaska Globale Erwärmung gefährdete und ausgestorbene Arten Internationale Vereinigung zur Erhaltung der Natur Nationales Schnee- und Eisdatenzentrum Eisbären Internationale Geologische Übersicht der Vereinigten Staaten

Hoffentlich erweitert das Ihre Vorstellung von der Verwendung dieser APIs. Es ist ziemlich aufregend, was jetzt möglich ist.

Abschließend

Die New York Times-API ist sehr nützlich und ich bin froh, dass sie sie der Entwicklergemeinschaft anbietet. Es war auch erfrischend, eine so schnelle API-Unterstützung über GitHub zu erhalten. Ich habe das einfach nicht erwartet. Beachten Sie, dass es für nicht kommerzielle Projekte gedacht ist. Wenn Sie eine Idee zum Geldverdienen haben, senden Sie ihnen eine Notiz, um zu sehen, ob sie mit Ihnen zusammenarbeiten. Die Verleger sind auf neue Einnahmequellen gespannt.

Ich hoffe, Sie fanden diese Web-Scraping-Episoden hilfreich und setzen sie in Ihren Projekten ein. Wenn Sie die heutige Episode in Aktion sehen möchten, können Sie das Web-Scraping auf meiner Website Active Together ausprobieren.

Teilen Sie bitte Ihre Gedanken und Rückmeldungen in den Kommentaren mit. Sie können mich auch immer direkt auf Twitter @lookahead_io erreichen. Schauen Sie sich auch meine Instructor-Seite und andere Serien an, Erstellen Sie Ihr Startup mit PHP und programmieren Sie mit Yii2.

ähnliche Links

  • Die New York Times API-Galerie
  • Die öffentlichen API-Spezifikationen der New York Times für GitHub
  • So kratzen Sie Webseiten für Metadaten ab (Envato Tuts +)
  • So kratzen Sie Webseiten mit Node.js und jQuery (Envato Tuts +) ab
  • Erstellen Ihres ersten Web Scrapers in Ruby (Envato Tuts +)