Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Lenzi

Buscando links com curl no google

Recommended Posts

Bom dia pessoal.

 

Estou criando um sistema que, carinhosamente o chamo de Odin.

Sua função é buscar links de determinados sites no Google, isso em grande quantidade.

 

Enfim, quase pronto e já simulando pesquisas no Google e consequente mente copiando os links que me interessam.

Deu trabalho descobrir os padrões de codificação dos links mas, tudo ok. Lindo e maravilhoso :D

 

Até que.

 

Ao fazer a tentativa em massa já armazenando no BD, em menos de 2 segundos consegui 2000 Links porém...

 

Eis o problema. O Google bloqueou as tentativas seguintes, só consigo em IP diferente ou após gerar um novo ip no localhost.(Imagina o estrago em um ambiente de rede compartilhado)

 

Preciso mascarar meu ip ou algo parecido... Enfim, o código está abaixo e aceito sugestões.

<?php
include "conecta.php";
ini_set('display_errors', 1);
ini_set('display_startup_erros', 1);
error_reporting(E_ALL);
$key = $_GET['key'];
$id = $_GET['id'];
$page = $_GET['page'];



$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_URL, "https://www.google.com.br/search?q=$key+site:%2522youtube.com%2522&lr=lang_pt&hl=pt-BR&as_qdr=all&tbs=lr:lang_1pt&tbm=vid&start=$page");
// any old https page
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_FILETIME, true);
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Pegar o código de resposta
$buscaid = mysql_query("SELECT palavras from keywods where id=$id ") or die();
while ($buscaide = mysql_fetch_array($buscaid)) {
$palavra = str_replace('+', ' ', $buscaide['palavras']);
}
$result = curl_exec($ch);
if (curl_error($ch)) {
print "<br>error #" . curl_errno($ch) . ": " . curl_error($ch);
}
curl_close($ch);
//phpinfo();




if ($response_code == '404') {
echo 'Página não existente';
} else {
//Iniciamos o DOM
$doc = new DOMDocument();
$doc->formatOutput = true;
@$doc->loadHTML('<?xml encoding="UTF-8">' . $result);
$confere = "";
$xpath = new DOMXPath($doc);
$nodes = $xpath->query("//a/@href"); //Procuramos todos os a href's da pág
//echo $elemento;
foreach ($nodes as $href) {
$x = ($href->nodeValue); // echo atual valor do attributo
$href->parentNode->removeAttribute('href'); // remove attribute
$mystring = $x;
//Aqui virá uma caralhada de links cheio de array. O Google entrega os pontos assim tão facil, os links vem cheio de extenssões de array
        //Cookies e os caralhos. Muita atenção, tem que entender o padrão e assim procuramos apenas os que tem a palavra watch, indicio que esse link é de vídeos.
        if (strstr($mystring, 'watch')) {
        
$res = explode("/url?q=http://www.youtube.com/watch%3Fv%3D", $mystring); //A primeira coisa que vem nesses links, é essa inicial, retirando ela, ficará
            // um array que deveremos separalos.

            $resfinal = explode("&", $res[1]); //Quando dividimos os & e comercial, sabemos que o primeiro item, faz parte do link do youtube
            //Já o resto, sabemos que é padrão 
$link0 = $resfinal[0]; //A resposta virá em um array, e o que nos interessa é a posição zero para montar o link ====> Ficando assim, https://www.youtube.com/watch?v=$resfinal[0] if ($link0 != $confere) { //Aqui conferimos se o link é igual ao anterior do array Foreach, se for, não faz nada. Se for, ai faz tudp hehe $procuralink = mysql_query("SELECT links FROM link where links='$link0'") or die("Erro ao verificar"); //Aqui verificamos se o link já consta na base de dados, caso sim, pula fora como no contador abaixo. $cont = mysql_num_rows($procuralink); if ($cont <= 0) { $isertewatch = mysql_query("INSERT INTO link (links,keyword) values ('$link0','$palavra')") or die("Erro ao atualizar"); //Aqui cadastramos no banco de dados. echo $link0; echo "<br>"; $confere = "$link0"; //Aqui, confere recebe os valores anteriores para a comparação de duplicados. } } } else { } } } ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.