Управление Internet Explorer из AutoHotKey

Перед самым новым годом вышла библиотека для скриптового языка AutoHotKey, при помощи которой можно управлять IE. Фактически, это бесплатная версия Xedant Human Emulator, правда, с урезанным функционалом.

Вообще, AutoHotKey – это тема. Полтора года назад оно у меня знатно зажигало на отдельном серваке под столом. Сейчас я перевел все на Xedant, в принципе, он уже дорос до нормальной работы, спасибо разработчикам.

Скачать и посмотреть примеры использования можно здесь: http://forum.script-coding.info/viewtopic.php?id=2635

Скрипт многопоточного скачивания страниц при помощи 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 урлов и время обработки каждой пачки равняется времени скачивания самого тормозного урла. Правильнее сделать на сокетах, но с ними слишком много мороки. В повседневной жизни вполне хватает мультикурла.

Установка нужных прав рекурсивно на php

На форуме Фиесты увидел интересный код.
Вот он, слегка модернизированный:

function recurse_chmod($mypath,$rights,$uid="",$gid="")
{
    $d = opendir ($mypath) ;
    while(($file = readdir($d)) !== false)
    {
        if ($file != "." && $file != ".." && $file != $_SERVER['PHP_SELF'])
        {
            $typepath = $mypath . "/" . $file ;
            if (filetype ($typepath) == 'dir') {
                recurse_chmod ($typepath,$uid,$gid);
            }
            @chmod($typepath,$rights);
            if ($uid!="") @chown($typepath, $uid);
            if ($gid!="") @chgrp($typepath, $gid);
        }
    }
}

Функция по зананному пути меняет права, владельца и принадлежность к группе для всех файлов и подпапок и файлов в них.
Формат использования:

recurse_chmod("myfolder","0777");
recurse_chmod("myfolder","0755","admin","admin");
recurse_chmod("myfolder","0666","apache","nobody");

Улучшаем процент отказов на сайте

Один из косвенных факторов влияния на ранжирование сайтов в гугле – т.н. процент отказов, т.е. процент серферов, которые закрыли сайт, увидев его первую страницу. Один из способов уменьшить процент отказов – не дать серферу нажать кнопку Назад. Вот js-скрипт, который реализует данный функционал:


// Author: Jungle
// Homepage: http://seodiver.ru/2008/11/no-goback-javascript.html

function createCookie(name,value,days) {
 if (days) {
 	var date = new Date();
 	date.setTime(date.getTime()+(days*24*60*60*1000));
 	var expires = "; expires="+date.toGMTString();
 }
 else var expires = "";
 document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
 var nameEQ = name + "=";
 var ca = document.cookie.split(';');
 for(var i=0;i < ca.length;i++) {
 	var c = ca[i];
 	while (c.charAt(0)==' ') c = c.substring(1,c.length);
 	if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
 }
 return null;
}

function eraseCookie(name) {
 createCookie(name,"",-1);
}

var no_goback = readCookie('no_goback');

if (location.search == '?no_goback') {
    var form = document.createElement('form');
    form.setAttribute('action', document.referrer);
    document.body.appendChild(form)
    form.submit() // редиректим назад
} else if (!no_goback) {
    createCookie('no_goback', location.href);
var url = location.protocol + '//' + location.hostname +
        (location.port != 80 ? ':' + location.port : '') +
        location.pathname + '?no_goback';
    location.href = url; // редиректим включаем no goback
}

Написан Jungle по просьбе/наводке alexf , за что им огромное спасибо!

Поиск с русской морфологией средствами PHP

Случайно в форуме по code-igniter наткнулся на упоминание скрипта phpmorph, погуглил, нашел развернутую инструкцию:
http://notes.rudomilov.ru/2007/08/16/poisk-s-russkoy-morfologiey-sredstvami-php

Синхронизация двух MySQL таблиц

Интересный класс обнаружился на phpclasses.org: Synchronize DB.
Не знаю пока как он мне пригодится, но почему-то чувствую, что пригодится точно.

Исходники MDS 1.92

Сорри за мегапаузу в блоге – но весна, столько событий, что постинг в блог по приоритетам уехал глубоко вниз.
По работе сейчас, пожалуй, самый прикольный момент в жизни программера – скрипты написаны и функционируют исправно, практически не требуя вмешательства, траф добывается, монетизируется как никогда отменно. Остается только ходить до банкомата и снимать очередной лимит Епасса.

Хочу сделать то, что надо бы было сделать пару месяцев назад. Выкладываю исходники MDS 1.92 с удаленным модулем проверки лицензии. Правьте, изменяйте как хотите, интегрируйте себе в систему.
Отныне 1.xx ветка приобретает статус free.

http://sfa-tm.ru/mds.1.92.sources.zip

Функции проверки поисковиков находятся в файле functions.php после коммента “SE PARSERS” (строка 1613).
Написано все в целом тяжеловесно – на этом скрипте я фактически изучил php. :) Сейчас многие вещи я бы сделал проще.

У кого есть акк на nulled – отметьтесь в соответствующем топике. Пусть народ свеженькое скачает. :)

Новая версия SimpleTDS

Некто sam_lopata выложил апдейт для бесплатной системы распределения трафа SimpleTDS. Апдейт исправляет самый злостный баг в скрипте – периодический сброс всех настроек аутов. Респект и уважуха человеку!

MSN воскресил оператор link:

Благую весть принес Hodinar – на live.com опять начали работать операторы link: и linkdomain: путем прибавления к ним спереди плюса (или символа %2B). Пока неофициально, но все же, работает.

Пользователи MDS могут стукнуться ко мне и скачать апдейт с новыми запросами и регулярками. Заодно в этом апдейте исправлены глюки Yahoo, теперь индексация и бэки должны показываться на всех хостах. Но, как говорил Рома Воронежский, “старые ошибки исправлены, старые добавлены” – пару дней назад перестал правильно работать скрипт определения PR, разбираться прямо сейчас нет времени, через пару дней починю. Заодно, по-видимому, MDS ждет реинкарнация в версии 2.0, полностью переписанной – в 1.х есть куски кода, который написан полтора года назад, когда я только начал изучать php. Оно, в принципе, хорошо работает, только ужасно избыточно и с трудом поддается апгрейду.

Массовый чекер Google Trends

Что-то давно я скриптов никаких интересных не выкладывал.. Надо наверстывать.

Массовый чекер кейвордов на частотность по данным Google Trends

Чисел на выходе не дает, позволяет визуально быстро сориентироваться по списку кейвордов – что чаще ищут в гугле, а что реже, на что стоит потратить время и крепко проспамить, а на что забить или отдать в низкочастотную помойку.

PS Нашел интересный сервис для поиска/прослушивания музыки – http://www.seeqpod.com . Ищет выложенную в свободный доступ музыку, позволяет делать плейлисты, обмениваться шарами. На флеше, минималистично, удобно. Прогресс!
Слушаю сейчас подборочку Саши Аппарата, одного из самых интересных новых электронщиков последних пяти лет:
Quantcast
А вот, кстати, отличный кавер на эту вещь от Telefon Tel Aviv
Quantcast

Из RSS в форум phpbb3

Арахно опубликовал интересный скрипт – постинг RSS в форумы на базе phpbb3. Интересное решение, еще один путь для создания автонаполняемых сайтов, наряду с автовордпрессами и блогорамой.

Еще из последних новостей – на умаксе увидел топик с интервью Гринвуда. Давно не было слышно дядьку :) Самая интересное место, конечно, это:

Как давно ты делал доры? Неужто уже и забыл?:) Все переложил на плечи своих помощников под названием автоматизация?

Если честно, то я их уже больше года вообще не делаю.
Да собственно зачем?

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

Автосабмит в сервисы онлайн-закладок

Максимус325 сделал подробный обзор имеющихся на сегодняшний день публичных автосабмитеров в сервисы закладок. Краткий вывод – всё говно, надо писать свой серверный, с блэкджеком и шлюхами.

Чем и займемся.

DMII 2.2 и отдача одностраничного контента по запросу

Народ, нужно писать этот скрипт для версии 2.2 ? Он там, в принципе, элементарно переделывается – другое название файла заданий, файла запуска доргена и другие путь к доргену (смотря куда поставите), больше ничего не изменилось по сути.

Апдейт MDS – новый датацентр гугля

Видимо, моя рассылка клиентам у многих падает в спам, поэтому продублирую здесь.

Почему-то умер датацентр гугля, через который MDS получал данные – по этому IP сейчас 404. Необходимо в файле config/config.php поменять переменную $google_datacenter . Новое значение можно поставить 64.233.161.100 или 64.233.161.115 . Это USA.

Скрипт рерайтинга контента

Небольшой скрипт, переводящий при помощи Google Translate текст с английского языка на французский и обратно – для получения уникального контента. Требует cURL.

rewrite.php

Ковыряйте, дописывайте, прикручивайте к своим скриптам.

via http://ru-traff.blogspot.com

Next Page »