Anonim

Da jeg gentagne gange har givet en dato og derefter ikke har frigivet deres API, besluttede jeg at tage sagen i mine egne hænder. Bemærk, at dette ikke er den ideelle måde at gøre tingene på, men det fungerer i øjeblikket. Jeg ønskede at opbygge en social graf over vores mest populære sider, så vi kunne vide, hvilken slags fotos og indhold der resonerer med vores seere, så jeg kom med scriptet nedenfor og derefter løbede gennem hver URL i vores database og fik de data, jeg havde brug for.

Jeg borede ned i iframe, der blev oprettet ved hjælp af en knapudbydelse og kom med denne url:
http: //pinit-cdn..com/pinit.html url = http:? //www.allrecipes.com
Det var godt, antallet vises lige der i sin egen div ID CountBubble. Så jeg krøllede det og brugte simple_html_dom php-biblioteket til at analysere. Det vendte dog tilbage 0. Ups! Dette nummer ændres med javascript, når siden er indlæst. Burde have set kilden i stedet for at inspicere elementet. Så jeg ser kilden i stedet, og der er dette dejlige stykke kode, der bare sidder der til min programmeringsglæde.

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

Fra det samler jeg følgende URL vil sandsynligvis trække de data, jeg har brug for,
http:? //api..com/v1/urls/count.json tilbagekald = receiveCount & url = http: //www.allrecipes.com
som viser:

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

Så dets json-data indpakket i et funktionsopkald fra API'et har de ikke offentliggjort endnu. Hvor praktisk. Nedenfor er den lille kode, du har brug for for at gøre dette arbejde i PHP. Du skal have cURL aktiveret på din server.

$ pinurl = "http: //api..com/v1/urls/count.json? callback = modtagerantal & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // få html gennem en funktion, der kalder cURL $ html = str_replace ("modtagerCount (", "", $ html); // fjern funktionskaldet, dataene er pakket ind i $ html = substr ($ html, "", -1); $ = json_decode ($ html); // konvertere fra json til php array $ pincount = $ -> count; ekko $ pincount; // der er talefunktionen 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 ($ cht) ;}

Som du kan se, trækker vi dataene med krøller og derefter fjerne funktionskaldet, der er pakket rundt om json-dataene. Så er det bare et spørgsmål om at bruge json_decode til at omdanne json-dataene til en php-matrix. Voila! Helt færdig. Jeg har kørt omkring 3.000 URL'er indtil videre, og dataene har ikke returneret noget problem. Det var til tider lidt langsomt, ikke sikker på om det var efter design eller af. Det er stadig at trække og opbevare dataene, mens jeg skriver dette. Jeg er sikker på, at der på et tidspunkt vil være en slags takstbegrænsning, men jeg har ikke løbet ind i nogen vægge hidtil. Måske er det ikke engang meningen, at det er skjult for programmerere, men så vidt jeg ved er der ingen officiel support, medmindre du er en af ​​de få udgivere, de har valgt at arbejde med.

Få antal pinterstifter i php