PDA

Просмотр полной версии : Google e-mail grabber


Solide Snake
12.06.2007, 18:36
Скрипт сбора мыл по результатам гугла, по вашему ключевому слову.
Приемущества:
1) Всегда складывает найденные мыла в файл с каждой страницы кеша гугла.
2) Стало возможным указывать сразу по несколько файлов. Как только файл заполняется, открывается следующий, и т.д. Если файлы кончаются, то скрипт останавливается.
3) Можно задать максимальный размер файла с мылами. Не задавайте более 500 кб.
4) можно задавать побольше слов для поиска, побольше имён файлов и оставлять скрипт работать сколько угодно:)

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

<?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','em ails3.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++;
}


?>

genom--
12.06.2007, 20:43
жесть --- четото мне подсказывает что это не очень продуктивно -- но ведь писал сам =)