Anonim

Siden jeg gjentatte ganger har gitt en dato og deretter ikke klarte å gi ut API-en deres, bestemte jeg meg for å ta saken i mine egne hender. Vær oppmerksom på at dette ikke er den ideelle måten å gjøre ting på, men for nå fungerer det. Jeg ønsket å lage en sosial graf over de mest populære sidene våre, slik at vi kunne vite hva slags bilder og innhold som resonerer med seerne, så jeg kom med skriptet nedenfor og deretter gikk gjennom hver URL i databasen vår og fikk dataene jeg behov for.

Jeg boret ned i iframmen som ble opprettet av en knapputfordring og kom med denne url:
http: //pinit-cdn..com/pinit.html url = http: //www.allrecipes.com
Det var enkelt, tallet vises akkurat der i sin egen div ID CountBubble. Så jeg krøllet det, og brukte det enkle_html_dom php-biblioteket for å analysere. Det fortsatte å returnere 0 skjønt. Uff! Dette tallet blir endret med javascript etter at siden er lastet inn. Burde ha sett kilden i stedet for å inspisere elementet. Så jeg ser på kilden i stedet, og det er dette fine koden som bare sitter der for min programmeringsglede.

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

Fra det samler jeg følgende URL vil sannsynligvis trekke dataene jeg trenger,
http: //api..com/v1/urls/count.json tilbakeringing = receiveCount & url = http: //www.allrecipes.com
som viser:

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

Så, json-dataene deres er pakket inn i en funksjonsanrop fra API-en, de har ikke utgitt offentlig ennå. Hvor praktisk. Nedenfor er den lille koden du trenger for å få dette til å fungere i PHP. Du må ha CURL aktivert på serveren din.

$ pinurl = "http: //api..com/v1/urls/count.json? callback = ontvangCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // få html gjennom en funksjon som kaller cURL $ html = str_replace ("motta beløp (", "", $ html); // fjern funksjonen. kaller dataene er pakket inn i $ html = substr ($ html, "", -1); $ = json_decode ($ html); // konvertere fra json til php array $ pincount = $ -> count; echo $ pincount; // der er tallfunksjonen 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, drar vi dataene med krøll og striper ut funksjonsanropet som er pakket rundt json-dataene. Da er det bare å bruke json_decode for å gjøre json-dataene om til en php-matrise. Voila! Ferdig. Jeg har kjørt rundt 3000 URL-er så langt, og dataene har ikke gitt noe problem. Det var til tider litt tregt, ikke sikker på om av design eller av. Det er fremdeles å trekke og lagre dataene mens jeg skriver dette. Jeg er sikker på at det på et tidspunkt vil være en slags takstbegrensning, men jeg har ikke støpt på noen vegger så langt. Kanskje dette ikke en gang skal være skjult for programmerere, men så vidt jeg vet er det ingen offisiell støtte med mindre du er en av få utgivere de har valgt å jobbe med.

Få antall pinternåler i php