Het aantal spelden op Pinterest in PHP

Omdat pinterest herhaaldelijk een datum heeft gegeven en vervolgens zijn API niet heeft vrijgegeven, heb ik besloten de zaak in eigen handen te nemen. Houd er rekening mee dat dit niet de ideale manier is om dingen te doen, maar voor nu werkt het. Ik wilde een sociale grafiek maken van onze meest populaire pagina's, zodat we konden weten wat voor soort foto's en inhoud resoneerde met onze kijkers, dus ik bedacht het onderstaande script en doorliep vervolgens elke URL in onze database en kreeg de gegevens die ik had nodig zijn.

Ik boorde me het iframe in dat was gemaakt door een call-call met een pinterest-knop en kwam met deze URL:
http://pinit-cdn.pinterest.com/pinit.html?url=http://www.allrecipes.com
Nou dat was makkelijk, het nummer wordt daar weergegeven in zijn eigen div-id CountBubble. Dus ik heb het gekruld en de PHP-bibliotheek simple_html_dom gebruikt om te parseren. Het bleef echter 0 terugkeren. Whoops! Dat aantal is veranderd met javascript nadat de pagina is geladen. Had de bron moeten bekijken in plaats van het element te inspecteren. Dus ik bekijk de bron in plaats daarvan en er is dit leuke stukje code dat ik daar gewoon zit voor mijn programmeerplezier.

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

Van dat, ik verzamel de volgende URL zal waarschijnlijk de gegevens trekken die ik nodig heb,
http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url=http://www.allrecipes.com
welke toont:

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

Dus, zijn json-gegevens verpakt in een functieaanroep van de API die ze nog niet publiekelijk hebben vrijgegeven. Hoe handig. Hieronder is het kleine beetje code dat je nodig hebt om dit in PHP te laten werken. U moet cURL op uw server hebben ingeschakeld.

 $ pinurl = "http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // haal de html door een functie die cURL $ html = str_replace aanroept ("receiveCount (", "", $ html); // verwijder de functie-aanroep de gegevens zijn ingepakt in $ html = substr ($ html, "", -1); $ pinterest = json_decode ($ html); // converteer van json naar php array $ pincount = $ pinterest-> count; echo $ pincount; // er is de nummerfunctie 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); retourneer $ html;} 

Zoals je kunt zien, trekken we de gegevens met curl en ontdoen we de functieaanroep die om de json-gegevens is gewikkeld. Dan is het gewoon een kwestie van json_decode gebruiken om de json-gegevens in een php-array om te zetten. Voila! Helemaal klaar. Ik heb tot nu toe zo'n 3000 URL's gerund en de gegevens zijn geen probleem meer. Het was een beetje traag soms, niet zeker als door ontwerp of door. Het trekt nog steeds en slaat de gegevens op terwijl ik dit typ. Ik weet zeker dat er ooit een soort snelheidsbeperking zal zijn, maar tot nu toe ben ik nog geen muren tegengekomen. Misschien wordt dit zelfs niet voor programmeurs verborgen gehouden, maar voor zover ik weet, is er geen officiële ondersteuning, tenzij je een van de weinige uitgevers bent waarmee ze hebben samengewerkt.

Zie Ook