3.24.2008

Инструмент автоматизации iMacros

Итак начнемс. Сначала немного расскажу что же это такое этот iMacros и для чего он нужен. Покажу пару примеров скриптов.

Не то что б я мега-программер, но иногда меня прорывает...

Что есть iMacros

Подробно это описано тут. А по русски это неплохой инструмент для автоматизации всей вашей рутинной работы в вэбе. Возможно кто-нить слышал о таких инструментах как TestComplete, WinRunner, QuickTest и тому подобное. Они применяются при автоматизировании тестирования разнообразных приложений, и позволяют имитировать, сейчас, фактически все действия которые может совершать пользователь. iMacros можно сказать их младший брат в плане автоматизации работы интернет браузера (Firefox и IE), к тому же по сравнению с продуктами "гигантами" не требует полностью всей машины(предыдущие забирают себе весь экран, что необходимо для некоторых задач, но в частности для вэба не нужно и даже мешает, если у вас конечно не завалялся свободный комп). Ну и стоимость лицензии вышеперечисленного конечно пугает))

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

Что может iMacros

Вот что пишут разработчики продукта (в моем довольно вольном переводе, только то что важно для нас): Все что бы вы ни делали с помощью браузера, может быть автоматизировано с помощью iMacros.

  • Автоматизация навигации по вэб-страницам

iMacros позволяет записывать и проигрывать повторяющиеся действия. iMacros может работать с любыми сайтами. Возможности: заполнение форм, скачивание\закачивание текста, изображений, файлов и вэб-страниц, импорт\экспорт данных из\в CSV и XML файлы(ов), баз данных и в принципе работа с любым источником. Поддержка работы с PDF документами, снятие скриншотов экрана, симуляция различных юзер-агентов, поддержка работы через прокси.

  • Скриптовый интерфейс

Интерфейс к iMacros дает вам полный контроль над вэб браузером. Таким образом iMacros может использоватся совместно с любым языком сценариев, либо полноценным языком программирования.

  • Поддержка Юникода

Что дает возможность работать со страницами и данными на любых языках.

  • DirectScreen технология

Позволяет автомтаизировать работу со страницами содержащими JavaScript, Java, AJAX, Flash и т.п. Релизовано за счет записи координат кликов и перемещиения мыши.

  • Менеджер паролей

Ну тут думаю все ястно - аля Robotask.

  • Плагин распознавания изображений

Гуглокапчи он не разберет конечно, но что-нить совсем тривиальное разбирать можно. По сути там просто сохраняешь эскизы того что должно быть и сравниваешь.

В основном все, дальше тонкости. Замечу только что конечно же за самые замечательные и нужные возможности нужно платить и причем желательно за Scripting Edition...

Приступим

Идем сюда и качаем то больше хочется.  Я думаю лучше подойдет версия для Firefox или 30 дневный триал полного iMacros.

Ставим себе, тут можно немного полистать че там как обстоит (сильно увлекатся не стоит))). После перезапуска FireFox жмем F8 и о чудо! Вылазит панель (аля как на рисунке). imageНекоторое время созерцаем ее, тыкаем всюду, запускаем присутствующие скрипты и вообще осваиваемся. Продукт все же немного глючноватый и в плане юзабилити мне сначала был непривычен. Советую так же сразу после установки в опциях на закладке Paths определить какие-нить человеческие удобные директории а не пресловыутый Program Files/заебешься/сюда/заходить. Так же рекомендую сразу создавать папки по каждый новый пакет скриптов.

Про все пристутствующие кнопки и тому подобный бред я рассказвывать не буду - у них названия понятные вполне.

Для примера приведу 3 скрипта для propeller.com: подписка статей, голосование за 1 статью множеством пользователей, голосование одним пользователем за множество статей.

Первый нах. Для особливо непонятливых распишу. Идем на пропеллер, логинимся, жмем добавить историю (стой! не бросай читать) и записываем процедуру сабмита статьи с помощбю кнопки (какой бы вы думали?) "Запись" до момента нажатия на кнопку "Check my story" в пропеллере. Тут жмем остановить запись и открываем файл "#Current.iim" на редактирование, в нем примерно следующее:

 VERSION BUILD=6030318 RECORDER=FX
TAB T=1
URL GOTO=
http://www.propeller.com/submit
'Это урл
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyUrl CONTENT=
http://sdfsdf
'Это название статьи
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyTitle CONTENT=dsfsadfadsf
'Это текст статьи
TAG POS=1 TYPE=TEXTAREA FORM=NAME:submitstory ATTR=ID:storyText CONTENT=sdsafdsfasdf
'Это канал (из списка, выбирается по номерам)
TAG POS=1 TYPE=SELECT FORM=NAME:submitstory ATTR=ID:storyChannel CONTENT=$31
'Это тэги
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyTags CONTENT=dasfadsfadsf
'Это нажимание на кнопку сабмита
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:submitstory ATTR=ID:storySubmitButtonTop&&VALUE:Check<SP>My<SP>Story

Создаем папку(в имакросе) propeller например. Сохраняем это чудо под каким-нить названием, например propeller_post_article.iim.

Далее нужно создать какой-нить файл с данными для статей и поместить его в директорию "datasources" iMacros'а (она в опциях у вас прписана).

Например назовем его propeller_articles.csv, а в него кладем такой текст:

"http://a-xyle.com","A xyle: iMacros","Seo blog for you","26","seo, blog, xyle, ti, palish"

Тут по порядку идут все нужные данные для полей, которые есть выше в коде. Открываем сохраненный ранее скрипт и вписываем туда после "TAB T=1" что то типа

'Подключаем файл с данными о статье
CMDLINE !DATASOURCE propeller_articles.csv
'Количество полей в файле - в нашем случае 5
SET !DATASOURCE_COLUMNS 5
'строка с которой будет начинатся перебор, ну с первой и надо начинать
SET !LOOP 1
'Команда счетчика вообщем, при увеличении LOOP будет переходит на следующую строку
SET !DATASOURCE_LINE {{!LOOP}}

Все тэги с аттрибутом INPUT в скрипте приводим к вот такому виду (COL'ы вместо явного указания данных для ввода, что означает соответствующий элемент из строки из файла данных):

'Это урл
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyUrl CONTENT={{!COL1}}
'Это название статьи
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyTitle CONTENT={{!COL2}}
'Это текст статьи
TAG POS=1 TYPE=TEXTAREA FORM=NAME:submitstory ATTR=ID:storyText CONTENT={{!COL3}}
'Это канал (из списка, выбирается по номерам)
TAG POS=1 TYPE=SELECT FORM=NAME:submitstory ATTR=ID:storyChannel CONTENT=${{!COL4}}
'Это тэги
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyTags CONTENT={{!COL5}}

Так как подписка в пропеллере осуществляется в 2 этапа то в конце надо добавить еще нажатие на кнопку "Submit this story", это так же можно записать и добавить в конец скрипта:

TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:submitstory ATTR=ID:storySubmitButtonTop&&VALUE:Submit<SP>this<SP>Story 

Вот что мы получим в итоге:

VERSION BUILD=6030318 RECORDER=FX
TAB T=1
'Подключаем файл с данными о статье
CMDLINE !DATASOURCE propeller_articles.csv
'Количество полей в файле - в нашем случае 5
SET !DATASOURCE_COLUMNS 5
'строка с которой будет начинатся перебор, ну с первой и надо начинать
SET !LOOP 1
'Команда счетчика вообщем, при увеличении LOOP будет переходит на следующую строку
SET !DATASOURCE_LINE {{!LOOP}}
URL GOTO=
http://www.propeller.com/submit
'Это урл
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyUrl CONTENT={{!COL1}}
'Это название статьи
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyTitle CONTENT={{!COL2}}
'Это текст статьи
TAG POS=1 TYPE=TEXTAREA FORM=NAME:submitstory ATTR=ID:storyText CONTENT={{!COL3}}
'Это канал (из списка, выбирается по номерам)
TAG POS=1 TYPE=SELECT FORM=NAME:submitstory ATTR=ID:storyChannel CONTENT=${{!COL4}}
'Это тэги
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:submitstory ATTR=ID:storyTags CONTENT={{!COL5}}
'Это нажимание на кнопку сабмита
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:submitstory ATTR=ID:storySubmitButtonTop&&VALUE:Check<SP>My<SP>Story
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:submitstory ATTR=ID:storySubmitButtonTop&&VALUE:Submit<SP>this<SP>Story

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

Вот еще пара скриптов в нагрузку, уже без всяких комментариев и т.п.

Голосование одним акком за несколько статей:

VERSION BUILD=6001001 RECORDER=FX
TAB T=1
'!!!SET ACCOUNTS DETAILS HERE!!!
SET !VAR1 username
SET !VAR2 password
'!!!SET URLS FILE HERE!!!
CMDLINE !DATASOURCE urls.csv
'Number of columns in the CSV file. This must be accurate!
SET !DATASOURCE_COLUMNS 1
SET !LOOP 1
'Increase the current position in the file with each loop
SET !DATASOURCE_LINE {{!LOOP}}
URL GOTO=
https://www.propeller.com/signin/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:nsform ATTR=NAME:alias CONTENT={{!VAR1}}
SET !ENCRYPTION NO
TAG POS=1 TYPE=INPUTASSWORD FORM=NAME:nsform ATTR=NAMEwd CONTENT={{!VAR2}}
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:nsform ATTR=NAME:formsubmit&&VALUE:Sign<SP>In
URL GOTO={{!COL1}}
TAG POS=1 TYPE=A ATTR=TXT:Vote!
URL GOTO=http://www.propeller.com/signout

VAR1 - имя пользователя, VAR2 - пароль. В файле urls.csv лежат урлы статей по урлу на строку.

Голосование несколькими акками за одну статью:

VERSION BUILD=6001001 RECORDER=FX
TAB T=1
'!!!SET STORY URL HERE!!!
SET !VAR1 
http://news.propeller.com/story/2008/03/18/evanescence-lyrics/
'!!!SET ACCOUNTS FILE HERE!!!
CMDLINE !DATASOURCE accs_prop.csv
'Number of columns in the CSV file. This must be accurate!
SET !DATASOURCE_COLUMNS 2
SET !LOOP 1
'Increase the current position in the file with each loop
SET !DATASOURCE_LINE {{!LOOP}}
FILTER TYPE=IMAGES STATUS=ON
URL GOTO=
https://www.propeller.com/signin/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:nsform ATTR=NAME:alias CONTENT={{!COL1}}
SET !ENCRYPTION NO
TAG POS=1 TYPE=INPUT:PASSWORD FORM=NAME:nsform ATTR=NAME:pwd CONTENT={{!COL2}}
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:nsform ATTR=NAME:formsubmit&&VALUE:Sign<SP>In
URL GOTO={{!VAR1}}
TAG POS=1 TYPE=A ATTR=TXT:Vote!
WAIT SECONDS=3
URL GOTO=http://www.propeller.com/signout

VAR1 - урл статьи за которую голосовать. В файле accs_prop.csv должны лежать акки в формате username,password по одному на строку.

Закончим

Это пока все что пришло на ум выложить. Возможно в дальнейшем буду выкладывать такие вот скрипты для распространенных сервисов, щас же пока неохото свое "палить")). Заметьте что для того что бы использовать имакрос вместе с пхп, бэйсиком, сями и всем что взбредет в голову нужно все же раскошеливаться на scripting edition, что меня лично очень огорчает((, но! ройте интернет и будет вам счастье - кряку я точно встречал.

P.S.: Если что то работает не так, то поробуйте нажать кнопку "Обновить список" на закладке редактирование))

P.P.S.: Если есть интерестная идея что неплохо было бы автоматизировать напишите мне, может напишу и выложу. Так же готов писать скрипты на iMacros, iMacros + php, просто php за ссылки, еду, посылки, спасибо и деньги в конце концов)).

Technorati Теги: ,,

Ярлыки: , , ,

1.28.2008

Массовое редактирование файлов через FTP

Давно собирался выложит скрипт, но все руки не доходили ридми написать. А всвязи с тем что на кликфоруме подняли тему данную, то разразился таки описанием.
Вкратце про скрипт.
У Вас есть много файлов и доступ к ним по фтп, есть желание менять на них какой-либо контент когда захочется (ну приветствие там, ссылки, еще что в голову взбредет). Руками все это делать конечно нудно! Так вот скрипту скармливаете все данные фтп, директории, файлы, задаете шаблон который надо заменить, задаете на что надо заменить, запускаете скрипт, делаете свои дела - все. В идеале все должно работать так)) у меня так и работало))
Но плиз при первом использовании осторожно, запросто можно похерить что не надо. Т.е. проверьте на чем-нить левом.
Вот скрипт: change_ftp_files.zip
Внутри есть ридми. Приятного пользования.
С багами и предложениями всех масштабов в комменты.

Ярлыки: , , ,

12.12.2007

SimpleTDS (my version)

Сам юзаю сей продукт, но так как апдейтов давно не видно, то приходится иногда подшаманивать самому. Выкладываю немного подредактированную и дополненную мною версию. В частности вроде как исправил багу с обнулением статсов (смотри эти темы на форуме продукта: Обнуление статистики, Всем кого беспокоит обнуление статсов!). Так же добавил читалку статсов.

Вообщем то ставится все так же как и стандартная версия, за исключениями:
- по поводу баги с обнулением статсов - " Добавлена дира lock\data\stats - всему этому нужно выставить права 777. Там создается запирающий файл.
Вообщем то все сделано на основе вот этого алгоритма http://www.web-faq.ru/articles/showarticles_282.html.external link
Тема такая, у меня ТДС падала стабильно при наличии траффа от 6-7к в сутки. После исправлений вроде не падала больше. Для тестов пробовал еще натравливать на нее спамелку в 50-70 потоков (примерно равно 100 посетителей в минуту) - статсы тоже не обнулялись."
- по поводу читалки статсов - сама читалка это файл statsreader.php, и во всех файлах занимающихся интерфейсом добавлена ссылка на этот файл - вверху STATS READER.
Вот она:
ВНИМАНИЕ: не советую ждать пока прогрузятся все статсы, т.к. ограничение на показ 100 результатов тут отсутствует. Т.е. если статсов очень много то они очень долго будудт грузится - лучше нажать стоп)).
Вид этого хозяйства:

По поводу работы с читалкой:
Filter: IP COUNTRY REFERRER - при клике по каждому покажет соответственно уникальных посетителей по ипуб странеб реффереру.
Select: позволяет делать выборки из статсов (возможно так же из уже отфильтрованных по уникальности статсов). Тут думаю все ястно отмечаем по какому полю выбирать(by referrer, bycountry, by user agent), вбиваем что должно содержаться в поле (устроит вхождение строки), Not - не должно содержаться, жмем select.
Встроке TDS Traffic Stats For... отображаются данные в циферках: всего записей, тип фильтрации, уникальных по фильтру, тип выборки, уникальных после всех операций.

Пример работы.
Задача: узнать количество уникальных посетителей из самой нужной страны - United States of America.
Решение: идем в stats reader, не дожидаясь пока прогрузятся все статсы останавливаем загрузку страницы, жмем фильтр по ip, опять же можно оне ждать полной прогрузки статсов, отмечаем select by country, в текстовое поле вбиваем United States, жмем select, смотрим.

Скрипт: simpleTDS_1.1beta_sam%28statsreader%29.zip
P.S.: все же не стоит сразу убивать свою текущюю версию ТДС, поставьте сначала потестите эту, мож баги найдутся. Просьба отписывать в комменты.

Ярлыки: , ,

10.02.2007

Скрипт парсинга овертюры в глубину и определения конкуренции в Google для каждого кея

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



set_time_limit(0);
$pattern = "|#results\">(.*?).*?(\d{1,3},*\d{0,3},*)|i";


/**
Проверяет вхождение выражения подходящего под паттерн в текс и возвращает
массив ассоциативный таких вхождений, содержащий кей - количество запросов в месяц по овертюре
$source - текст старницы
$pattern - регулярное выражение определяющее фразы
/*
function Parse($source, $pattern) {
if(preg_match_all($pattern, $source, $matches))
{
$i = 0;
foreach ($matches[1] as $link)
{
$res[$link] = $matches[2][$i];
++$i;
}
return $res;
} else {
echo "
". "No pattern matches were found!\r\n" . "
";
}
}

/**
Получает количество страниц в гугле для массива кеев $keys
Возвращает ассоциативный массив кей - количество страниц
*/
function GETGOOGLECOUNT($keys){
for ($i=0; $i
([0-9,]*)", $file, $regs);
$count=str_replace(",", "", $regs[1]);
$res[$i] = $count;
}
return $res;
}

/**
Получает кей ($keyword), делает запрос к заданному сервису, получает до 100 слов(сервис до стольки выдает) с их конкуренцией (сервис иногда выдает ошибку, поэтому сделал пока просто 10 попыток парсинга, вроде хватает), потом по каждому слову узнает количество документов в гугле и все это возвращает массивом [кей] - [количество запросов;конкуренция в гугле] и ждет 20 секунд, чтоб бана гугли не получить.
*/
function PARSEONEWORD($keyword){
global $pattern;
$mkt = "US";
$service = "http://tools.seobook.com/general/keyword/?c=1&keyword=" . $keyword . "&mkt=" . $mkt . "#result";
echo "Reply from server " . $service . " for keyword " . $keyword . "

";
$source = @file_get_contents($service);
$keys_arr = Parse($source, $pattern);
if (sizeof($keys_arr) > 0) {
foreach($keys_arr as $kw=>$kwcount) {
$keys[]=$kw;
}
$g_count=GETGOOGLECOUNT($keys);
sleep(20);
$i = 0;
foreach ($keys_arr as $kw=>$kwcount) {
$result[$kw] = $kwcount.";".$g_count[$i];
$i++;
}
}else{
$result = false;
}
return $result;
}

//Записывает результаты в файл
function WRITERESULTS($fname, $keys) {
$i=0;
$h = fopen($fname, "ab");
foreach($keys as $kw=>$pair){
fwrite($h, $kw.";".$pair."\n");
}
fclose($h);
}

/**
Парсит список кеев из файла $fname, результаты пишет в файл result.txt
*/
function PARSEMANYKEYS($fname) {
$keys = file($fname);
$h = fopen("./result.txt", "w");
fwrite($h, "Keyword;Popularity;Google_Count\r\n");
fclose($h);
foreach ($keys as $k){
for ($i=0;$i<10;$i++){ keys1 ="">
{
print_r($keys1);
WRITERESULTS("./result.txt", $keys1);
break;
} else {
echo "\r\nNo results for " .$k.". Now attempt number " .$i ."\r\n";
}
}
}
}

PARSEMANYKEYS("keys.txt");
?>


Еще иногда перделываю из его себе подо что нужно, что бы разные распарсенныей кеи сохранял в разные файлы, можно убирать парсинг гугли ил уменьшать\увеличивать задержку (sleep(20)). Про задержку может кто в курсе сколько ее ставиь лучше?

Ярлыки: , , , , ,