Скрипт для сбора адресов mail.ru (php)

Статус
В этой теме нельзя размещать новые ответы.

Kai

Профессор
Регистрация
29 Июн 2007
Сообщения
322
Реакции
49
Вот собсна и описалово:

В поле "Сайт, с которого собирать" вбейте "otvet.mail.ru", включите опцию "Собирать только с одного сайта". Дело в том, что на сайте otvet.mail.ru, мэйл адреса задавших вопрос, либо ответивших на вопрос, записаны в таком виде, в котором их видит данный скрипт.

[RESPECT=5]
Код:
<?

// Mail Grabber [bot] v0.3 by Гвоздь
// Незабудте поставить chmod 777 на все файлы скрипта!
//
// Если скрипт нарушит работу хостинга, ко мне не обращаться ;)!
// Copyright © 2006-2008, Гвоздь

@ini_set("memory_limit", "1024M");
set_time_limit(0);
ignore_user_abort(true);

/* Не трогать! */
$config["FM"] = "emails.txt"; 		// Файл с найденными ящиками
$config["FU"] = "urls.txt"; 		// Файл с найденными УРЛами
$config["FUOK"] = "urls-ok.txt"; 	// Файл с пройденными УРЛами
/* Не трогать! */

if(isset($_GET["go"]))
{
	$_POST["url"] = str_replace("http://", "", $_POST["url"]);
	
	if($_POST["url"] == "")		{$config["URL"] = "otvet.mail.ru";}
	else						{$config["URL"] = $_POST["url"];}
	
	if($_POST["size"] == "")	{$config["MAXSIZE"] = "5000000";}
	else						{$config["MAXSIZE"] = $_POST["size"];}
	
	if(isset($_POST["onesite"])){$config["onesite"] = $_POST["onesite"];}
	
	$config["domens"] = $_POST["domens"];
	$config["unseturl"] = "0";
	
	mailgrab($config);
}
elseif(isset($_GET["clear"]))
{
	if($_GET["clear"] == "e")	{clearfile($config["FM"]);}
	if($_GET["clear"] == "u")	{clearfile($config["FU"]);}
	if($_GET["clear"] == "o")	{clearfile($config["FUOK"]);}
}
else
{
	$mails_array = file($config["FM"]);
	
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
	header("Cache-Control: no-cache, must-revalidate");
	header("Cache-Control: post-check=0,pre-check=0", false);
	header("Cache-Control: max-age=0", false);
	header("Pragma: no-cache");
	
	print
	"<style type=text/css>".
	"body	{font-family:georgia; font-size:11px}".
	"input.text	{width:100px; height:20px; font-family:georgia; font-size:11px}".
	"</style>".
	count($mails_array)." мылок<br><br>".
	"<form action='?go' method=post>".
	"<input class=text type=text name=url value=''> - Сайт, с которого собирать (или оставь пустым, чтобы начать с otvet.mail.ru ;))<br>".
	"<input class=text type=text name=size value='100000'> - Максимальный размер файла с мейлами (в байтах)<br>".
	"<input class=text type=text name=domens> - Мейл-домен который собирать (или оставь пустым, чтобы собирать все мейлы)<br>".
	"<input type=checkbox name=onesite checked> Собирать только с одного сайта (который указан выше)<br>".
	"<br><input class=text type=submit value='Go'>".
	"</form>".
	"<hr><br>".
	$config["FM"]." (".filesize($config["FM"])." байт)<br>".
	"<a href='".$config["FM"]."'>Open</a><br>".
	"<a href='index.php?clear=e'>Clear</a><br>".
	"<br>".
	$config["FU"]." (".filesize($config["FU"])." байт)<br>".
	"<a href='".$config["FU"]."'>Open</a><br>".
	"<a href='index.php?clear=u'>Clear</a><br>".
	"<br>".
	$config["FUOK"]." (".filesize($config["FUOK"])." байт)<br>".
	"<a href='".$config["FUOK"]."'>Open</a><br>".
	"<a href='index.php?clear=o'>Clear</a><br>".
	"";
}

# Functions...
Function mailgrab($config)
{	
	if(filesize($config["FM"]) > $config["MAXSIZE"])	{die("Файл с мейлами достиг максимального размера!");}
	if($config["URL"] == "")							{die("Ошибка! Неправильный формат УРЛ'а!");}
	
	# Вырезаем из urls.txt всякую ***ню
	$funstrs = file($config["FU"]);
	for($i=0; $i<sizeof($funstrs); $i++)
	{
		if(strstr($funstrs[$i], ".zip") OR strstr($funstrs[$i], ".rar") OR strstr($funstrs[$i], ".exe") OR strstr($funstrs[$i], ".jpg") OR strstr($funstrs[$i], ".gif") OR strstr($funstrs[$i], ".jpeg") OR strstr($funstrs[$i], ".bmp") OR strstr($funstrs[$i], ".png") OR strstr($funstrs[$i], ".7z") OR strstr($funstrs[$i], ".avi") OR strstr($funstrs[$i], ".wmv") OR strstr($funstrs[$i], ".wma") OR strstr($funstrs[$i], ".mp3") OR strstr($funstrs[$i], ".bin"))
		{
			unset($funstrs[$i]);
		}
	}
	$fuset = fopen($config["FU"], "w");
	fputs($fuset, implode("", $funstrs));
	fclose($fuset);
	
	# Парсим полученный УРЛ
	$parse_url = parse_url("http://".$config["URL"]);
	$config["PATH"] = (isset($parse_url["path"]) ? $parse_url["path"] : "").(isset($parse_url["query"]) ? "?".$parse_url["query"] : "");
	$config["URL"] = $parse_url["host"];
	//print $config["URL"].$config["PATH"]."<br>";
	$config["PATH"] = ($config["PATH"] == "") ? "/" : $config["PATH"];
    
    # Коннектимся к сокету на 80 порт
	$sock = @fsockopen($config["URL"], 80, $errno, $errstr, 30);
	
	# В случае дизконнекта
	if(!$sock)
	{
		//print "".$errstr." (".$errno.")<br>\n";
		$urlff = file($config["FU"]);
		if(!isset($urlff[0]))	{die("В файле ".$config["FU"]." нету данных для дальнейшей работы скрипта!");}
		$config["URL"] = $urlff[0];
		$config["URL"] = str_replace("
", "", $config["URL"]);
		if($config["unseturl"] == "1")
		{
			unset($urlff[0]);
			$fuset = fopen($config["FU"], "w");
			fputs($fuset, implode("", $urlff));
			fclose($fuset);
		}
		
		# Делаем запись в файл urls-ok.txt
		$urlsok = "";
		$fuok = file($config["FUOK"]);
		for($aok=0; $aok<sizeof($fuok); $aok++){$urlsok .= $fuok[$aok];}
		if(!strstr($urlsok, "
".$config["URL"]."".$config["PATH"]."
"))
		{
			fwrite(fopen($config["FUOK"], "a+"), "".$config["URL"]."".$config["PATH"]."
");
		}
		
		$config["unseturl"] = "1";
		mailgrab($config);
	}
	
	# При удачном коннекте
	else
	{
		$s = "";
		$out =	"GET ".$config["PATH"]." HTTP/1.1\r\n".
				"Host: ".$config["URL"]."\r\n".
				"Connection: Close\r\n\r\n";
		fwrite($sock, $out);
		while(!feof($sock)) $s .= fgets($sock, 128);
		fclose($sock);
		
		# Делаем запись в файл urls-ok.txt
		$urlsok = "";
		$fuok = file($config["FUOK"]);
		for($aok=0; $aok<sizeof($fuok); $aok++){$urlsok .= $fuok[$aok];}
		if(!strstr($urlsok, "
".$config["URL"]."".$config["PATH"]."
"))
		{
			fwrite(fopen($config["FUOK"], "a+"), "".$config["URL"]."".$config["PATH"]."
");
		}
		
		# Избавляемся от лишнего мусора, для более корректной работы
		/*$s = preg_replace("!<style.*?type=\"?'?([^ \"'>]+)\"?'?.*?>(.*)</style>!is","",$s);*/
		$s = strip_tags($s, "<a><META>");
		$s = str_replace("	", "", $s);
		$s = str_replace("   ", "", $s);
		$s = str_replace("  ", " ", $s);
		$s = str_replace("&nbsp;", " ", $s);
		$s = str_replace("&amp;", "&", $s);
		/*$s = preg_replace("!<a.*?href=\"?'?([^ \"'>]+)\"?'?.*?>(.*)</a>!is","",$s);*/
		
		# Парсим полученный код страницы для большего процента обнаружения мейлов
		$s = str_replace(" собака ", "@", $s);
		$s = str_replace(" точка ", ".", $s);
		$s = str_replace(" Собака ", "@", $s);
		$s = str_replace(" Точка ", ".", $s);
		$s = str_replace("[at]", "@", $s);
		$s = str_replace("[dog]", "@", $s);
		$s = str_replace("[dot]", ".", $s);
		$s = str_replace("(a)", "@", $s);
		$s = str_replace("(@)", "@", $s);
		
		
		# Ищем майл боксы
		preg_match_all("!(([a-z0-9-_]+)|(([a-z0-9-_]+\.)+([a-z0-9-_]+)))(@)(([a-z0-9-_]+\.)+(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})!is", $s, $marray);
		
		# Пишем найденные мейлы в emails.txt
		for($i=0; $i<sizeof($marray[0]); $i++)
		{
			$mails = "";
			$fm = file($config["FM"]);
			for($a=0; $a<sizeof($fm); $a++)	{$mails .= $fm[$a];}
			if(!strstr($mails, "
".$marray[0][$i]))
			{
				if($config["domens"] !== "")
				{
					if(strstr($marray[0][$i], "@".$config["domens"]))
					{
						fwrite(fopen($config["FM"], "a+"), $marray[0][$i]."
");
					}
				}
				else
				{
					fwrite(fopen($config["FM"], "a+"), $marray[0][$i]."
");
				}
			}
		}
		
		# Ищем УРЛ'ы
		preg_match_all("!<a[^>]+href=\"?'?([^ 
\"'>]+)\"?'?[^>]*>(.*?)</a>!is", $s, $uarray);
		
		# Пишем найденные УРЛ'ы в urls.txt
		for($u=0; $u<sizeof($uarray[1]); $u++)
		{
			if(!strstr($uarray[1][$u], "http://"))
			{
				$uarray[1][$u] = "http://".$config["URL"]."/".$uarray[1][$u];
			}
			
			$urls = "";
			$urlsok = "";
			$fu = file($config["FU"]);
			$fuok = file($config["FUOK"]);
			$uarray[1][$u] = str_replace(array("http://", "ftp://", "https://"), array("", "", ""), $uarray[1][$u]);
			for($a=0; $a<sizeof($fu); $a++)	{$urls .= $fu[$a];}
			for($aok=0; $aok<sizeof($fuok); $aok++)	{$urlsok .= $fuok[$aok];}
			if(!strstr($urls, "
".$uarray[1][$u]) && !strstr($urlsok, "
".$uarray[1][$u]))
			{
				if(filesize($config["FU"]) < "10000")
				{
					if(isset($config["onesite"]))
					{
						if(strstr("http://".$uarray[1][$u], "http://".$config["URL"]))
						{
							fwrite(fopen($config["FU"], "a+"), $uarray[1][$u]."
");
						}
					}
					else
					{
						fwrite(fopen($config["FU"], "a+"), $uarray[1][$u]."
");
					}
				}
			}
		}
		
		$urlff = file($config["FU"]);
		if(!isset($urlff[0]))	{die("В файле ".$config["FU"]." нету данных для дальнейшей работы скрипта!");}
		$config["URL"] = $urlff[0];
		$config["URL"] = str_replace("
", "", $config["URL"]);
		if($config["unseturl"] == "1")
		{
			unset($urlff[0]);
			$fuset = fopen($config["FU"], "w");
			fputs($fuset, implode("", $urlff));
			fclose($fuset);
		}
		$config["unseturl"] = "1";
		mailgrab($config);
	}
}

Function clearfile($name)
{
	$f = fopen($name, "w");
	fclose($f);
	
	print "<a href='index.php'>Done!</a>";
}

// Mail Grabber [bot] v0.3 by Гвоздь
// Copyright © 2006-2008, Гвоздь

?>
[/RESPECT]
 
  • Заблокирован
  • #2
Хм, я вижу мой скрипт тут опубликовали... Да, я конечно думал, что он есть только на plati.ru)) Ну Вы хоть оставили бы в комментариях в скрипте мой сайт, чтоли...
 
// Mail Grabber [bot] v0.3 by Гвоздь
// Незабудте поставить chmod 777 на все файлы скрипта!
//
// Если скрипт нарушит работу хостинга, ко мне не обращаться ;)!
// Copyright © 2006-2008, Гвоздь

Гвоздь, как видишь копирайт никто не убирал, я выложил скрипт таким, какой он ко мне попал, как говорится "as is"
 
За час работы скрипт собрал 42 мыла (подозрение, что вопрос в скорости загрузки страниц указанного мною форума), медленно... НО ! работает пока корректно, запускал на своем ПК ... есть сильные пики загрузки CPU ... у хостера я бы не стал запускать... сильно грузить будет... а дома самое ТО!
 
У меня почему-то пишет, что В файле urls.txt нету данных для дальнейшей работы скрипта! Этот файл должен быть пустым?
 
У меня почему-то пишет, что В файле urls.txt нету данных для дальнейшей работы скрипта! Этот файл должен быть пустым?
необходимо создать такой текстовый файл, изначально должен быть пустым...
 
Я уже его создал, запустил и вот такая ошибка
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху