Aangezien herhaaldelijk een datum heeft gegeven en vervolgens de API vervolgens niet heeft vrijgegeven, besloot ik de zaak in eigen handen te nemen. Let op: dit is niet de ideale manier om dingen te doen, maar voor nu werkt het. Ik wilde een sociale grafiek van onze populairste pagina's maken, zodat we konden weten wat voor soort foto's en inhoud resoneerde met onze kijkers, dus kwam ik met het onderstaande script en doorliep ik elke URL in onze database en kreeg ik de gegevens die ik nodig zijn.
Ik drong door tot in het iframe dat was gemaakt door een call-out en kwam met deze url:
http: //pinit-cdn..com/pinit.html url = http:? //www.allrecipes.com
Nou dat was gemakkelijk, het nummer wordt daar weergegeven in zijn eigen div id CountBubble. Dus ik curlde het en gebruikte de simple_html_dom php-bibliotheek om te parseren. Het bleef echter 0 terugkeren. Whoops! Dat nummer wordt gewijzigd met javascript nadat de pagina is geladen. Moet de bron hebben bekeken in plaats van het element te inspecteren. Dus ik bekijk in plaats daarvan de bron en er is een leuk stukje code dat daar gewoon zit voor mijn programmeerplezier.
snode.setAttribute ('src', '//api..com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
Daaruit verzamel ik de volgende URL zal waarschijnlijk de gegevens ophalen die ik nodig heb,
http:? //api..com/v1/urls/count.json callback = receiveCount & url = http: //www.allrecipes.com
welke toont:
removeCount ({"count": 1148, "url": "http://www.allrecipes.com"})
De json-gegevens zijn dus verpakt in een functieaanroep van de API die ze nog niet openbaar hebben gemaakt. Wat handig. Hieronder is het kleine stukje code dat je nodig hebt om dit in PHP te laten werken. U moet cURL op uw server hebben ingeschakeld.
$ pinurl = "http: //api..com/v1/urls/count.json? callback = ontvangCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // haal de html via een functie die cURL $ html = str_replace ("ontvangCount (", "", $ html) aanroept; // verwijder de functieaanroep de gegevens zijn verpakt in $ html = substr ($ html, "", -1); $ = json_decode ($ html); // converteer van json naar php array $ pincount = $ -> 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; ;}
Zoals u kunt zien, trekken we de gegevens met krul en verwijderen we vervolgens de functieaanroep die rond de json-gegevens is gewikkeld. Dan is het gewoon een kwestie van json_decode gebruiken om de json-gegevens om te zetten in een php-array. Voila! Helemaal klaar. Ik heb tot nu toe ongeveer 3.000 URL's uitgevoerd en de gegevens hebben geen probleem opgeleverd. Het was soms een beetje traag, niet zeker of door ontwerp of door. Het blijft de gegevens ophalen en opslaan terwijl ik dit typ. Ik weet zeker dat er op een gegeven moment een soort snelheidsbeperking zal zijn, maar ik ben nog niet tegen muren aangelopen. Misschien hoort dit niet eens te worden verborgen voor programmeurs, maar voor zover ik weet, is er geen officiële ondersteuning, tenzij je een van de weinige uitgevers bent waarmee ze hebben gekozen om mee te werken.