Da immer wieder ein Datum angegeben wurde und anschließend deren API nicht freigegeben werden konnte, entschloss ich mich, die Angelegenheit selbst in die Hand zu nehmen. Bitte beachten Sie, dass dies nicht der ideale Weg ist, um Dinge zu tun, aber im Moment funktioniert es. Ich wollte ein soziales Diagramm unserer beliebtesten Seiten erstellen, damit wir wissen, welche Art von Fotos und Inhalten bei unseren Zuschauern Anklang fanden. Deshalb habe ich das folgende Skript erstellt und dann jede URL in unserer Datenbank durchlaufen und die Daten abgerufen, die ich erhalten habe erforderlich.
Ich habe einen Drilldown in den Iframe durchgeführt, der durch eine Schaltflächenbeschriftung erstellt wurde, und habe die folgende URL gefunden:
http: //pinit-cdn..com/pinit.html? url = http: //www.allrecipes.com
Nun, das war einfach, die Nummer wird direkt dort in der eigenen Div-ID CountBubble angezeigt. Also habe ich es gekräuselt und die simple_html_dom-PHP-Bibliothek zum Parsen verwendet. Es gab jedoch immer wieder 0 zurück. Hoppla! Diese Nummer wird mit Javascript geändert, nachdem die Seite geladen wurde. Hätte die Quelle anzeigen sollen, anstatt das Element zu untersuchen. Also sehe ich mir stattdessen den Quellcode an und es gibt dieses schöne Stück Code, das nur für mein Programmiervergnügen da ist.
snode.setAttribute ('src', '//api..com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
Daraus entnehme ich, dass die folgende URL wahrscheinlich die Daten abruft, die ich benötige.
http: //api..com/v1/urls/count.json? callback = receiveCount & url = http: //www.allrecipes.com
welche zeigt:
receiveCount ({"count": 1148, "url": "http://www.allrecipes.com"})
Daher werden die JSON-Daten in einen Funktionsaufruf von der API eingebunden, die sie noch nicht öffentlich veröffentlicht haben. Wie praktisch. Nachfolgend finden Sie den Code, den Sie benötigen, um diese Funktion in PHP auszuführen. Auf Ihrem Server muss cURL aktiviert sein.
$ pinurl = "http: //api..com/v1/urls/count.json? callback = receiveCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // Hole den HTML-Code über eine Funktion, die cURL aufruft. $ html = str_replace ("receiveCount (", "", $ html); // Entferne den Funktionsaufruf, in den die Daten in $ html = substr ($ html, "", -1); $ = json_decode ($ html); // konvertiere von json nach php array $ pincount = $ -> count; echo $ pincount; // es gibt die Nummernfunktion pull_html ($ url) {$ ch = curl_init () curl_setopt ($ ch, CURLOPT_URL, $ url) curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1) curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, 10) curl_html = curl_exec ($ ch) ;}
Wie Sie sehen können, ziehen wir die Daten mit einer Locke und entfernen dann den Funktionsaufruf, der um die json-Daten gewickelt ist. Dann müssen Sie nur noch json_decode verwenden, um die json-Daten in ein PHP-Array umzuwandeln. Voila! Alles erledigt. Ich habe bis jetzt ungefähr 3.000 URLs ausgeführt und die Daten haben kein Problem zurückgegeben. Es war manchmal etwas langsam, nicht sicher, ob es beabsichtigt oder beabsichtigt war. Es zieht und speichert immer noch die Daten, während ich dies tippe. Ich bin mir sicher, dass es irgendwann eine Art Geschwindigkeitsbegrenzung geben wird, aber ich bin bisher noch keinen Wänden begegnet. Vielleicht sollte dies nicht einmal den Programmierern verborgen bleiben, aber meines Wissens gibt es keine offizielle Unterstützung, es sei denn, Sie sind einer der wenigen Verlage, mit denen sie zusammenarbeiten.