Anzahl der Pinterest Pins in PHP erhalten

Da pinterest immer wieder ein Datum angegeben hat und anschließend ihre API nicht veröffentlicht hat, habe ich beschlossen, die Angelegenheit selbst in die Hand zu nehmen. Bitte beachten Sie, dass dies nicht der ideale Weg ist, um Dinge zu tun, aber für den Moment funktioniert es. Ich wollte eine soziale Grafik unserer beliebtesten Seiten erstellen, damit wir wissen konnten, welche Art von Fotos und Inhalt bei unseren Zuschauern mitschwang, also habe ich das unten stehende Skript erstellt und dann jede URL in unserer Datenbank durchforstet und die Daten erhalten erforderlich.

Ich habe in den Iframe gebohrt, der durch einen pinterest Button Callout erstellt wurde und habe diese URL gefunden:
http://pinit-cdn.pinterest.com/pinit.html?url=http://www.allrecipes.com
Nun, das war einfach, die Nummer wird direkt in ihrer eigenen Div-ID CountBubble angezeigt. Also habe ich es gelockt und die php-Bibliothek simple_html_dom zum Parsen benutzt. Es kam immer wieder 0 zurück. Hoppla! Diese Nummer wird mit JavaScript geändert, nachdem die Seite geladen wurde. Sollte die Quelle angesehen haben, anstatt das Element zu überprüfen. Also schaue ich mir stattdessen die Quelle an und da ist dieses nette Stück Code, das nur für mein Programmiervergnügen da ist.

 snode.setAttribute ('src', '//api.pinterest.com/v1/urls/count.json?callback=receiveCount&url='+targetUrl); 

Daraus ergibt sich, dass die folgende URL wahrscheinlich die Daten zieht, die ich brauche,
http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url=http://www.allrecipes.com
welches anzeigt:

 receiveCount ({"count": 1148, "url": "http://www.allrecipes.com"}) 

So sind seine json-Daten in einen Funktionsaufruf von der API eingepackt, den sie noch nicht öffentlich veröffentlicht haben. Wie praktisch. Im Folgenden finden Sie den kleinen Code, den Sie benötigen, damit dies in PHP funktioniert. Sie müssen cURL auf Ihrem Server aktiviert haben.

 $ pinurl = "http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // html durch eine Funktion aufrufen, die cURL $ html = str_replace aufruft ("receiveCount (", "", $ html); // den Funktionsaufruf entfernen, um den die Daten gewickelt sind $ html = substr ($ html, "", -1); $ pinterest = json_decode ($ html); // konvertieren von json zu php array $ pincount = $ pinterest-> zählen; echo $ pincount; // es gibt die nummer funktion pull_html ($ url) {$ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, 10); $ html = curl_exec ($ ch); curl_close ($ ch); return $ html;} 

Wie Sie sehen können, ziehen wir die Daten mit curl und entfernen dann den Funktionsaufruf, der um die json-Daten gewickelt ist. Dann ist es nur eine Frage der Verwendung von json_decode, um die json-Daten in ein php-Array umzuwandeln. Voila! Alles erledigt. Ich habe bisher rund 3.000 URLs gelaufen und die Daten sind kein Problem mehr. Es war manchmal etwas langsam, nicht sicher, ob von Design oder von. Es zieht und speichert die Daten, während ich das schreibe. Ich bin mir sicher, irgendwann wird es eine Art Begrenzung der Geschwindigkeit geben, aber ich bin noch nicht in irgendwelche Mauern gerannt. Vielleicht sollte dies nicht einmal vor Programmierern verborgen sein, aber soweit ich weiß, gibt es keine offizielle Unterstützung, es sei denn, du bist einer der wenigen Verlage, mit denen du arbeiten möchtest.

Siehe Auch