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

Тема в разделе "SEO Скрипты", создана пользователем Kai, 4 фев 2008.

Статус темы:
Закрыта.
  1. Kai

    Kai

    Регистр.:
    29 июн 2007
    Сообщения:
    329
    Симпатии:
    46
    Вот собсна и описалово:

    В поле "Сайт, с которого собирать" вбейте "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]
     
    ASD и newsib нравится это.
  2. Гвоздь

    Гвоздь Создатель

    Заблокирован
    Регистр.:
    6 сен 2006
    Сообщения:
    47
    Симпатии:
    34
    Хм, я вижу мой скрипт тут опубликовали... Да, я конечно думал, что он есть только на plati.ru)) Ну Вы хоть оставили бы в комментариях в скрипте мой сайт, чтоли...
     
  3. Kai

    Kai

    Регистр.:
    29 июн 2007
    Сообщения:
    329
    Симпатии:
    46
    Гвоздь, как видишь копирайт никто не убирал, я выложил скрипт таким, какой он ко мне попал, как говорится "as is"
     
  4. Tarasishe

    Tarasishe

    Регистр.:
    26 апр 2008
    Сообщения:
    190
    Симпатии:
    142
    За час работы скрипт собрал 42 мыла (подозрение, что вопрос в скорости загрузки страниц указанного мною форума), медленно... НО ! работает пока корректно, запускал на своем ПК ... есть сильные пики загрузки CPU ... у хостера я бы не стал запускать... сильно грузить будет... а дома самое ТО!
     
  5. eRcoden

    eRcoden Постоялец

    Регистр.:
    19 апр 2006
    Сообщения:
    69
    Симпатии:
    3
    да ну, не заметил какой то уж сверхестественной нагрузки:)
     
  6. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    У меня почему-то пишет, что В файле urls.txt нету данных для дальнейшей работы скрипта! Этот файл должен быть пустым?
     
  7. Tarasishe

    Tarasishe

    Регистр.:
    26 апр 2008
    Сообщения:
    190
    Симпатии:
    142
    необходимо создать такой текстовый файл, изначально должен быть пустым...
     
  8. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    Я уже его создал, запустил и вот такая ошибка
     
Статус темы:
Закрыта.