Da pinterest gentagne gange har givet en dato og derefter ikke har slettet deres API, besluttede jeg at tage sagen i mine egne hænder. Bemærk venligst, at dette ikke er den ideelle måde at gøre ting på, men for nu fungerer det. Jeg ønskede at opbygge en social graf af vores mest populære sider, så vi kunne vide, hvad slags billeder og indhold der var resonerende med vores seere, så jeg kom op med scriptet nedenfor og derefter sløjfede gennem hver webadresse i vores database og fik dataene jeg havde brug for.
Jeg borede ned i iframe, der blev oprettet af en pinterest-knap og kom op med denne url:
http://pinit-cdn.pinterest.com/pinit.html?url=http://www.allrecipes.com
Nå det var nemt, tallet vises lige der i sin egen div id CountBubble. Så jeg curl'ed det, og brugte simple_html_dom php bibliotek til at analysere. Det holdt dog tilbage 0. Ups! Dette nummer ændres med javascript, efter at siden er indlæst. Skulle 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 for min programmeringsoplevelse.
snode.setAttribute ('src', '//api.pinterest.com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
Derefter samler jeg nedenstående URL vil nok trække de data, jeg har brug for,
http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url=http://www.allrecipes.com
som viser:
receiveCount ({"count": 1148, "url": "http://www.allrecipes.com"})
Så dens json data indpakket i et funktionsopkald fra API'en, de ikke har udgivet offentligt endnu. Hvor praktisk. Nedenfor er den lille kode, du skal bruge til at gøre dette arbejde i PHP. Du skal have cURL aktiveret på din server.
$ pinurl = "http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // hent html gennem en funktion, der kalder cURL $ html = str_replace ("receiveCount (", "" $ html); // fjern funktionsopkald dataene pakkes i $ html = substr ($ html, -1); $ pinterest = json_decode ($ html); // konvertere fra json til php array $ pincount = $ pinterest-> tælle; echo $ pincount; // der er talfunktionen 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 $ html;}
Som du kan se, trækker vi dataene med krøllet og fjerner det funktionsopkald, der er pakket rundt om json-dataene. Så er det bare et spørgsmål om at bruge json_decode til at konvertere json data til en php array. Voila! Helt færdig. Jeg har kørt omkring 3.000 webadresser hidtil, og dataene er returneret intet problem. Det var lidt langsomt til tider, ikke sikkert, hvis det var design eller ved. Dens stadig trækker og lagrer dataene, når jeg skriver dette. Jeg er sikker på, at der på et tidspunkt vil være en form for takstbegrænsning, men jeg har ikke kørt ind i nogen vægge hidtil. Måske er det ikke engang at være skjult for programmører, men så vidt jeg ved, er der ingen officiel støtte, medmindre du er en af de få udgivere, de har valgt at arbejde med.