Dahil paulit-ulit na nagbigay ng isang petsa at pagkatapos ay nabigo na ilabas ang kanilang API, nagpasya akong dalhin ang bagay sa aking sariling mga kamay. Mangyaring tandaan na hindi ito ang mainam na paraan upang gawin ang mga bagay, ngunit, sa ngayon ito gumagana. Nais kong bumuo ng isang social graph ng aming pinakatanyag na mga pahina upang malaman namin kung anong uri ng mga larawan at nilalaman ang sumasalamin sa aming mga manonood, kaya't dumating ako sa script sa ibaba at pagkatapos ay naka-loop sa bawat URL sa aming database at nakuha ang data ko kailangan.
Drill down ako sa iframe na nilikha ng isang pindutan ng callout at dumating sa url na ito:
http: //pinit-cdn..com/pinit.html? url = http: //www.allrecipes.com
Mahusay na madali, ang bilang ay ipinapakita mismo doon sa sarili nitong div id CountBubble. Kaya ko ito curl'ed, at ginamit ang simpleng_html_dom php library upang mai-parse. Patuloy itong bumalik 0 kahit na. Sinong! Ang bilang na iyon ay binago gamit ang javascript pagkatapos na-load ang pahina. Dapat tingnan ang pinagmulan sa halip na siyasatin ang elemento. Kaya titingnan ko ang mapagkukunan sa halip at mayroong ang magandang piraso ng code na nakaupo lamang doon para sa aking kasiyahan sa programming.
snode.setAttribute ('src', '//api..com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
Mula doon, tinitipon ko ang sumusunod na URL ay marahil ay hilahin ang data na kailangan ko,
http: //api..com/v1/urls/count.json? callback = natanggapCount & url = http: //www.allrecipes.com
na nagpapakita:
acceptCount ({"count": 1148, "url": "http://www.allrecipes.com"})
Kaya, ang data ng json nito na nakabalot sa isang tawag na function mula sa API na hindi pa nila inilalabas sa publiko. Gaano kadali. Nasa ibaba ang kaunting code na kailangan mong gawin ang gawaing ito sa PHP. Dapat ay pinagana mo ang cURL sa iyong server.
$ pinurl = "http: //api..com/v1/urls/count.json? callback = natanggapCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // makuha ang html sa pamamagitan ng isang function na tumatawag sa cURL $ html = str_replace ("acceptCount (", "", $ html); // alisin ang pagpapaandar ng tawag ng data ay nakabalot sa $ html = substr ($ html, "", -1); $ = json_decode ($ html); // convert mula kay json hanggang sa php array $ pincount = $ -> count; echo $ pincount; // mayroong ang numero ng function 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 ;}
Tulad ng nakikita mo, hilahin namin ang data gamit ang curl pagkatapos ay alisin ang function na tawag na nakabalot sa data ng json. Pagkatapos ito ay isang bagay lamang ng paggamit ng json_decode upang i-on ang data ng json sa isang php array. Voila! Tapos na. Tumakbo ako sa paligid ng 3, 000 mga URL hanggang ngayon at ang data ay hindi na bumalik. Medyo mabagal ito minsan, hindi sigurado kung sa pamamagitan ng disenyo o ng. Ang paghila nito at pag-iimbak pa rin ng data habang nai-type ko ito. Sigurado ako sa ilang mga oras na magkakaroon ng ilang uri ng rate na naglilimita, ngunit hindi ko pa tumatakbo sa anumang mga pader. Siguro hindi ito dapat itago mula sa mga programmer, ngunit sa pagkakaalam ko, walang opisyal na suporta maliban kung isa ka sa ilang mga publisher na pinili nila upang makasama.