Anonim

Dato che ha ripetutamente dato una data e successivamente non è riuscito a rilasciare la loro API, ho deciso di prendere la questione nelle mie mani. Nota che questo non è il modo ideale per fare le cose, ma per ora funziona. Volevo creare un grafico sociale delle nostre pagine più popolari in modo da poter sapere che tipo di foto e contenuti risuonavano con i nostri spettatori, quindi ho trovato lo script qui sotto e poi ho passato in rassegna tutti gli URL del nostro database e ho ottenuto i dati che ho necessario.

Ho analizzato l'iframe creato da una didascalia di pulsante e ho trovato questo url:
http: //pinit-cdn..com/pinit.html url = http:? //www.allrecipes.com
Bene, è stato facile, il numero viene visualizzato proprio lì nel suo div id CountBubble. Quindi l'ho arricciato e ho usato la libreria php simple_html_dom per analizzare. Continuava a restituire 0 però. Ops! Quel numero viene modificato con JavaScript dopo il caricamento della pagina. Avrebbe dovuto visualizzare la fonte invece di ispezionare l'elemento. Quindi, invece, visualizzo la fonte e c'è questo bel pezzo di codice seduto lì per il mio piacere di programmare.

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

Da quello, raccolgo il seguente URL probabilmente tirerà i dati di cui ho bisogno,
http:? //api..com/v1/urls/count.json callback = receiveCount & url = http: //www.allrecipes.com
che visualizza:

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

Quindi, i suoi dati json racchiusi in una chiamata di funzione dall'API che non hanno ancora rilasciato pubblicamente. Quanto conveniente. Di seguito è riportato un po 'di codice necessario per far funzionare questo in PHP. Devi avere cURL abilitato sul tuo server.

$ pinurl = "http: //api..com/v1/urls/count.json? callback = receiveCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // ottiene l'html attraverso una funzione che chiama cURL $ html = str_replace ("receiveCount (", "", $ html); // rimuove la chiamata di funzione i dati sono racchiusi in $ html = substr ($ html, "", -1); $ = json_decode ($ html); // converti da json in array php $ pincount = $ -> count; echo $ pincount; // c'è la funzione numerica 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); $ ch); $cl) ;}

Come puoi vedere, estraiamo i dati con arricciatura, quindi eliminiamo la chiamata di funzione racchiusa tra i dati json. Quindi si tratta solo di usare json_decode per trasformare i dati json in un array php. Ecco! Tutto fatto. Finora ho eseguito circa 3000 URL e i dati non hanno restituito alcun problema. A volte è stato un po 'lento, non sono sicuro se di progettazione o da. Sta ancora estraendo e archiviando i dati mentre scrivo questo. Sono sicuro che ad un certo punto ci sarà una sorta di limitazione della velocità, ma finora non ho incontrato nessun muro. Forse questo non dovrebbe nemmeno essere nascosto ai programmatori, ma per quanto ne so, non c'è supporto ufficiale a meno che tu non sia uno dei pochi editori con cui hanno scelto di lavorare.

Ottenere il numero di pin di interesse in php