Google e-mail grabber

Discussion in 'PHP' started by Solide Snake, 12 Jun 2007.

  1. Solide Snake

    Solide Snake Banned

    Joined:
    28 Apr 2007
    Messages:
    382
    Likes Received:
    820
    Reputations:
    69
    Скрипт сбора мыл по результатам гугла, по вашему ключевому слову.
    Приемущества:
    1) Всегда складывает найденные мыла в файл с каждой страницы кеша гугла.
    2) Стало возможным указывать сразу по несколько файлов. Как только файл заполняется, открывается следующий, и т.д. Если файлы кончаются, то скрипт останавливается.
    3) Можно задать максимальный размер файла с мылами. Не задавайте более 500 кб.
    4) можно задавать побольше слов для поиска, побольше имён файлов и оставлять скрипт работать сколько угодно:)

    Надеюсь будет вам полезен:)

    Code:
    <?php
    set_time_limit(0);
    
    /************************CONFIG************************/
    $q=     array('emailы','email'); //поисковые слова или фразы(пробел меняйте на %20)
    $start= array(0       ,1      ); //соответствующее значение, с какой страницы в гугле начинать просматривать результаты.
    $shend= array(2       ,3      ); //соответствующее значение, до какой страницы просматривать результаты. Если все хотите просмотреть, установите 0.
    
    $files= array('emails.txt','emails1.txt','emails2.txt','emails3.txt','emails4.txt','emails5.txt'); //файлы, в который следует сбрасывать мыла. Когда первый файл будет заполняться (~600кб), будут использоваться последующие
    
    $browser="Opera/9.02 (Windows NT 5.1; U; en)"; //браузер, которым якобы лазим
    
    $r="\r\n"; //разделитель мыл в файле. \r\n для windows, \n для *nix
    
    $log=1; //уровень вывода инфы о сборе. 0 - почти без вывода, 1 - средне, 2 - подробно. Рекомендуется 1, чтобы знать, на какой странице остановился поиск.
    
    $search_all=true; //если true, то гугл не будет опускать при поиске похожие, по его мнению, результаты
    
    $max_size=500000; //максимальный размер одного файла с мылами.
    /************************END************************/
    
    
    
    $p="/[a-z]{1,1}[a-z._-]+@([a-z._-]+)\.[a-z]{2,6}/is";
    
    function cnct($host,$q,$st,$type=0)
    {
      global $p;
      global $next;
      global $pages;
      global $browser;
      global $search_all;
    
      $ret="";
    
      if($type==0)
      {
        if($search_all)
          $add='&filter=0';
        else
          $add='';
    
        $service_uri = "/search?hl=ru&q=$q&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&start=$st$add";
      }
      else
      {
        $service_uri = "/search?q=cache:$q";
      }
    
      $header="Host: $host\r\n";
      $header.="User-Agent: $browser\r\n";
      $header.="Content-Type: application/x-www-form-urlencoded\r\n";
      $header.="Content-Length: 0\r\n";
      $header.="Connection: close\r\n\r\n";
    
      $fp = fsockopen("tcp://".$host,80,$errno,$errstr);
    
      if(!$fp)
      {
        print "<i>Socket error: $errstr ($errno)</i><br>";
      }
      else
      {
        fputs($fp, "GET $service_uri  HTTP/1.1\r\n");
        fputs($fp, $header.$vars);
        fwrite($fp, $out);
    
        while(!feof($fp))
        {
          $ret.=fgets($fp, 128);
        }
        fclose($fp);
      }
    
      if($type==0)
        preg_match_all("/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/search\?q=cache:([^\"]+)/is",$ret,$links2);
      else
        preg_match_all($p,$ret,$links2);
    
      if($type==0)
      {
        $st=$st/10+2;
    
        if(strpos($ret,"<div class=nr></div>$st</a>")===false || ($st>$pages && $pages>0))
          $next=0;
        else
          $next=1;
      }
    
      return $links2;
    }
    
    
    print 'Starting...<br><br>';
    ob_flush();
    flush();
    
    $total=array();
    $tmp='';
    $file='';
    $totalemails=0;
    $numfiles=0;
    $totalemail=0;
    
    reopen();
    
    for($words=0,$wcnt=count($q);$words<$wcnt;$words++)
    {
      $pos=$start[$words];
      $pages=$shend[$words];
      $next=1;
    
      if($pages==0)
        $topos=100;
      else
        $topos=$pages;
    
      if($log>0)
      {
        print "searching <b>".htmlspecialchars($q[$words])."</b> from position <b>$pos</b> to <b>$topos</b>...<br>";
        ob_flush();
        flush();
      }
    
      $pos*=10;
    
      while($next)
      {
        if($log>0)
        {
          print "viewing page ".($pos/10+1)."... ";
          ob_flush();
          flush();
        }
    
        $x=cnct('www.google.ru',$q[$words],$pos);
    
        for($i=0,$cnt=count($x[0]);$i<$cnt;$i++)
        {
          $x[2][$i]=str_replace("\n",'',$x[2][$i]);
          $x[1][$i]=str_replace("\n",'',$x[1][$i]);
        }
    
        if($log>0)
        {
          print count($x[1])." cache(s)...<br>";
          ob_flush();
          flush();
        }
    
        $pcnt=0;
    
        for($i=0,$cnt=count($x[0]);$i<$cnt;$i++)
        {
          $y=cnct($x[1][$i],$x[2][$i],0,1);
    
          $pemails=count($y[0]);
          $pcnt+=$pemails;
    
          if($log>1)
          {
            print "cache $i: found $pemails email(s)<br>";
            ob_flush();
            flush();
          }
    
          foreach($y[0] as $elem)
          {
            $total[]=strtolower($elem);
          }
    
          $total=array_unique($total);
    
          fseek($fpe,0,SEEK_SET);
          ftruncate($fpe,0);
    
          foreach($total as $eml)
          {
            $tmp.=$eml.$r;
          }
    
          fwrite($fpe,$tmp);
    
          fflush($fpe);
    
          $totalemail=count($total);
    
          if(strlen($tmp)>$max_size)
          {
            $totalemails+=$totalemail;
            $totalemail=0;
            reopen();
          }
    
          $tmp='';
        }
    
        if($log>0)
        {
          print "-&gt;found $pcnt non-unique e-mail(s)...<br>";
          ob_flush();
          flush();
        }
    
        $pos+=10;
      }
    }
    
    
    print "<b>Finished.</b> TOTAL ".($totalemails+$totalemail)." email(s) in $numfiles last file(s)<br>";
    
    
    function reopen()
    {
      global $fpe;
      global $total;
      global $files;
      global $file;
      global $max_size;
      global $numfiles;
    
      if($fpe)
      {
        print "<i>E-mail file size too big, creating/opening next file...</i><br>";
        fclose($fpe);
      }
    
      $total=array();
      $opened=false;
    
      foreach($files as $fl)
      {
        if($fl && (!file_exists($fl) || filesize($fl)<$max_size))
        {
          if(file_exists($fl))
          {
            print "Reading e-mails from file...<br><br>";
            ob_flush();
            flush();
          }
    
          $fpe=fopen($fl,"a+");
          if(!$fpe)
            die("Cannot create/open file!");
    
          if(fseek($fpe,0,SEEK_SET)==-1)
            die("Cannot read from file!");
    
          while(($str=fgets($fpe))!==false)
          {
            $total[]=strtolower(trim($str));
          }
    
          $total=array_unique($total);
          $file=$fl;
          $opened=true;
    
          break;
        }
      }
    
      if(!$opened)
        die("Cannot create/open any file!");
    
      $numfiles++;
    }
    
    
    ?>
     
    #1 Solide Snake, 12 Jun 2007
    Last edited: 12 Jun 2007
    3 people like this.
  2. genom--

    genom-- Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    жесть --- четото мне подсказывает что это не очень продуктивно -- но ведь писал сам =)
     
    1 person likes this.
Loading...
Similar Threads - Google mail grabber
  1. GAiN
    Replies:
    3
    Views:
    7,556