Ponieważ wielokrotnie podawałem datę, a następnie nie wydałem ich API, postanowiłem wziąć sprawę w swoje ręce. Pamiętaj, że nie jest to idealny sposób na robienie różnych rzeczy, ale na razie działa. Chciałem zbudować wykres społecznościowy naszych najpopularniejszych stron, abyśmy mogli wiedzieć, jakie zdjęcia i treści rezonują z naszymi przeglądarkami, więc wymyśliłem poniższy skrypt, a następnie przeglądałem każdy adres URL w naszej bazie danych i otrzymywałem dane potrzebne.
Wgłębiłem się w element iframe utworzony przez objaśnienie przycisku i wymyśliłem ten adres URL:
http: //pinit-cdn..com/pinit.html? url = http: //www.allrecipes.com
Cóż, to było łatwe, liczba jest wyświetlana w jej własnym identyfikatorze div CountBubble. Więc zwinąłem go i użyłem biblioteki php simple_html_dom do parsowania. Mimo to zwracał 0. Ups! Ta liczba jest zmieniana za pomocą javascript po załadowaniu strony. Powinien był obejrzeć źródło zamiast sprawdzać element. Zamiast tego widzę źródło i jest tam ten przyjemny fragment kodu, który po prostu siedzi dla mojej przyjemności programowania.
snode.setAttribute ('src', '//api..com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
Z tego, zbieram następujący adres URL prawdopodobnie wyciągnie potrzebne mi dane,
http: //api..com/v1/urls/count.json? callback = receiveCount & url = http: //www.allrecipes.com
który wyświetla:
receiveCount ({„count”: 1148, „url”: „http://www.allrecipes.com”})
Tak więc, jego dane JSON zawinięte w wywołanie funkcji z interfejsu API, którego nie opublikowały jeszcze publicznie. Jak wygodnie. Poniżej znajduje się trochę kodu, który jest niezbędny, aby działał w PHP. Musisz mieć włączony cURL na swoim serwerze.
$ pinurl = "http: //api..com/v1/urls/count.json? callback = receiveCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // pobierz html przez funkcję, która wywołuje cURL $ html = str_replace ("receiveCount (", "", $ html); // usuń wywołanie funkcji dane są opakowane w $ html = substr ($ html, "", -1); $ = json_decode ($ html); // konwersja z json do tablicy php $ pincount = $ -> liczba; echo $ pincount; // jest funkcja liczbowa 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_cl return ;}
Jak widać, wyciągamy dane za pomocą curl, a następnie usuwamy wywołanie funkcji, które jest owinięte wokół danych JSON. W takim razie wystarczy użyć json_decode, aby zamienić dane json w tablicę php. Voila! Wszystko gotowe. Do tej pory uruchomiłem około 3000 adresów URL i dane nie zwróciły żadnego problemu. Czasami było to trochę powolne, nie jestem pewien, czy z założenia czy przez. Ciągle pobiera i przechowuje dane podczas pisania. Jestem pewien, że w pewnym momencie nastąpi ograniczenie prędkości, ale jak dotąd nie natknąłem się na żadne ściany. Może nawet nie powinno to być ukryte przed programistami, ale o ile wiem, nie ma oficjalnego wsparcia, chyba że jesteś jednym z niewielu wydawców, z którymi zdecydowali się współpracować.