由于已经多次给出日期,然后又未能发布其API,因此我决定亲自处理此事。 请注意,这不是理想的处理方式,但是目前可以使用。 我想为我们最受欢迎的页面建立一个社交图,这样我们就能知道什么样的照片和内容引起了观众的共鸣,所以我想出了下面的脚本,然后遍历数据库中的每个URL并获取了我需要。
我深入研究了由按钮标注创建的iframe,并提出了以下网址:
http://pinit-cdn..com/pinit.html?url = http://www.allrecipes.com
嗯,这很容易,该数字将显示在其自己的div ID CountBubble中。 所以我卷曲了它,并使用了simple_html_dom php库进行解析。 它仍然返回0。 哎呀! 页面加载后,该数字会用javascript更改。 应该查看源而不是检查元素。 因此,我改为查看源代码,并且出于我的编程乐趣,坐在那里有一段不错的代码。
snode.setAttribute('src','//api..com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
据此,我收集了以下URL可能会提取我需要的数据,
http://api..com/v1/urls/count.json?callback = receiveCount&url = http://www.allrecipes.com
显示:
receiveCount({“ count”:1148,“ url”:“ http://www.allrecipes.com”})
因此,其json数据包装在尚未公开发布的API的函数调用中。 多么方便。 以下是使此代码在PHP中起作用所需的一些代码。 您必须在服务器上启用cURL。
$ pinurl =“ http://api..com/v1/urls/count.json?callback = receiveCount&url =”; $ targeturl =“ http://www.allrecipes.com/”; $ pinurl。= $ brandurl; $ html = pull_html($ pinurl); //通过调用cURL的函数获取html $ html = str_replace(“ receiveCount(”,“”,$ html); //删除将数据包装在$ html = substr($ html,“”,中的函数调用-1); $ = json_decode($ html); //从json转换为php数组$ pincount = $-> count; echo $ pincount; //有数字函数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($ ch);返回$ html ;}
如您所见,我们使用curl提取数据,然后去除包装在json数据周围的函数调用。 然后,只需使用json_decode将json数据转换为php数组即可。 瞧! 全部做完。 到目前为止,我已经运行了大约3, 000个URL,数据返回没有问题。 有时速度有些慢,不确定是通过设计还是通过。 在我键入此内容时,它仍会提取和存储数据。 我确定在某个时候会有一定的速率限制,但是到目前为止我还没有遇到任何障碍。 也许这甚至不应该被程序员所掩盖,但是据我所知,除非您是他们选择与之合作的少数出版商之一,否则就没有官方的支持。