Яндекс.Блоги теряет девственность

Возможно, я отстал от жизни, и это практикуется постоянно, но я такое вижу в первый раз.
Сейчас в топе висят по крайней мере два продвигаемых поста.

Первый – “как качать музыку вконтакте”. Ну, это банально пиар блога.

А вот второе – интереснее. Это пост в liveinternet-дневничке о “школе Каббалы Владимира Соловьева” (фиктивной, там впаривают разные сувениры за бешеные тыщщи, сам Соловьев в курсе и зол), явно купленный. Плюс на этот пост куплены постовые в других блогах (не девочкой с liveinternet-а явно). Итог – 4е место.
А админы топа, видимо, бухаютъ. Если они там вообще есть (хотя должны быть).

Предчувствую, что в новый год топ яндекс.блогов будет заполнен рекламой чуть более чем полностью.

Скрипт многопоточного скачивания страниц при помощи multi CURL

Начну, наверное, выкладывать куски полезного кода, вдруг кому-нибудь пригодятся.

Вот, например, реализация многопотокового скачивания страниц при помощи мультикурла:

class MCurl
{

var $timeout = 20; // максимальное время загрузки страницы в секундах
var $threads = 10; // количество потоков 

var $all_useragents = array(
"Opera/9.23 (Windows NT 5.1; U; ru)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.4;MEGAUPLOAD 1.0",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; Alexa Toolbar; MEGAUPLOAD 2.0; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7;MEGAUPLOAD 1.0",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Maxthon; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0; InfoPath.1)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon)",
"Opera/9.10 (Windows NT 5.1; U; ru)",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Tailrank; http://tailrank.com/robot) Gecko/20021130",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; Maxthon)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8",
"Opera/9.22 (Windows NT 6.0; U; ru)",
"Opera/9.22 (Windows NT 6.0; U; ru)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRSPUTNIK 1, 8, 0, 17 HW; MRA 4.10 (build 01952); .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9"
);

function multiget($urls, &$result)
{
	$threads = $this->threads;
	$useragent = $this->all_useragents[array_rand($this->all_useragents)];

	$i = 0;
	for($i=0;$i<count($urls);$i=$i+$threads)
	{
		$urls_pack[] = array_slice($urls, $i, $threads);
	}
	foreach($urls_pack as $pack)
	{
		$mh = curl_multi_init(); unset($conn);
		foreach ($pack as $i => $url)
		{
	    	$conn[$i]=curl_init(trim($url));
			curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($conn[$i],CURLOPT_TIMEOUT, $this->timeout);
			curl_setopt($conn[$i],CURLOPT_USERAGENT, $useragent);
			curl_multi_add_handle ($mh,$conn[$i]);
		}
		do { $n=curl_multi_exec($mh,$active); usleep(100); } while ($active);
		foreach ($pack as $i => $url)
		{
      		$result[]=curl_multi_getcontent($conn[$i]);
      		curl_close($conn[$i]);
		}
curl_multi_close($mh);
	}

}
}

Собственно, самое интересное здесь – это функция multiget , которая принимает на вход масссив урлов, которые надо скачать и возвращает массив с контентом страниц (для экономии памяти, массив передается как ссылка в аргументе функции).

Формат использования:


$urls = array("http://site.com/page1.php","http://site.com/page2.php","http://site.com/page3.php");
$mcurl = new MCurl;
$mcurl->threads = 20;
$mcurl->timeout = 5; // нам нужна максимально быстрая скачка, пусть теряются медленные страницы
unset($results); // очищаем массив $results (если он использовался раньше где-то в коде)
$mcurl->multiget($urls, $results);
// в массиве $results - контент страниц

Причем в $results[0] будет контент строго от $urls[0] и т.д.

MultiCURL – это не лучший способ многопоточного скачивания страниц, но зато он самый простой. Почему не лучший ? Потому что скачивание происходит пачками по threads урлов и время обработки каждой пачки равняется времени скачивания самого тормозного урла. Правильнее сделать на сокетах, но с ними слишком много мороки. В повседневной жизни вполне хватает мультикурла.

Taskbar Shuffler

Нашел недавно совершенно чумовую утилитку – Taskbar Shuffler. Расширяет функционал таскбара в винде. Позволяет мышкой таскать плашки с целью реорганизации, закрывать приложения по средней клавише мыши. В общем, как табы в браузере. Мастхэв однозначно.

Фришная, качать здесь – http://www.freewebs.com/nerdcave/taskbarshuffle.htm

Кстати, freewebs.com раньше неплохим фришником был, когда по ftp файлы заливать можно было..