Anonim

Como você repetidamente deu uma data e depois falhou ao liberar sua API, decidi tomar o assunto com minhas próprias mãos. Observe que essa não é a maneira ideal de fazer as coisas, mas, por enquanto, funciona. Eu queria criar um gráfico social de nossas páginas mais populares para que pudéssemos saber que tipo de fotos e conteúdo ressoava com nossos espectadores. Por isso, criei o script abaixo e depois percorri cada URL do banco de dados e obtive os dados que eu necessário.

Analisei detalhadamente o iframe criado por uma chamada de botão e criei este URL:
http: //pinit-cdn..com/pinit.html? url = http: //www.allrecipes.com
Bem, isso foi fácil, o número é exibido ali mesmo em seu próprio ID de div CountBubble. Então eu enrolei e usei a biblioteca php simple_html_dom para analisar. Ele continuou retornando 0 embora. Ops! Esse número é alterado com javascript após o carregamento da página. Deveria ter visualizado a fonte em vez de inspecionar o elemento. Então, eu vejo a fonte e há esse belo pedaço de código apenas para o meu prazer de programação.

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

A partir disso, eu recolho o seguinte URL provavelmente extrairá os dados necessários,
http: //api..com/v1/urls/count.json? callback = receiveCount & url = http: //www.allrecipes.com
que exibe:

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

Portanto, seus dados json são agrupados em uma chamada de função da API que ainda não foram divulgados publicamente. Quão conveniente. Abaixo está um pouco do código que você precisa para fazer isso funcionar em PHP. Você deve ter o cURL ativado no seu servidor.

$ pinurl = "http: //api..com/v1/urls/count.json? callback = receiveCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // obtém o html através de uma função que chama cURL $ html = str_replace ("receiveCount (", "", $ html); // remove a chamada da função, os dados são agrupados em $ html = substr ($ html, "", -1); $ = json_decode ($ html); // converte de json para php array $ pincount = $ -> count; echo $ pincount; // existe a função numérica 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; ;}

Como você pode ver, extraímos os dados com curl e eliminamos a chamada de função que envolve os dados json. Então é só usar o json_decode para transformar os dados do json em uma matriz php. Voila! Tudo feito. Até agora, executei cerca de 3.000 URLs e os dados não retornaram nenhum problema. Às vezes era um pouco lento, não sei se por design ou por. Ainda está puxando e armazenando os dados enquanto digito isso. Tenho certeza de que em algum momento haverá algum tipo de limitação de taxa, mas ainda não encontrei nenhuma barreira. Talvez isso não deva ser oculto aos programadores, mas até onde eu sei, não há suporte oficial, a menos que você seja um dos poucos editores com quem eles escolheram trabalhar.

Obtendo o número de pinos do pinterest no php