Управление браузером и написание сетевых ботов

Selenium Remote Control

Большинство сетевых ботов легко пишутся на Perl с использованием библиотеки WWW::Mechanize или LWP::UserAgent. Но начинаются проблемы, если целевая страница построена на AJAX, поскольку Mechanize не умеет обрабатывать Javascript.

Победить эту проблему можно, заставив обычный браузер делать то, что нужно программе. Для программистов под Windows есть модули Win32::IE::Mechanize, который худо-бедно, но все же управляет ослом и заставляет его лазить по интернету. С юниксовыми ботами несколько сложнее, поскольку браузеры приходится контролировать или через плагины, или через инъекции управляющего Javascript.

Из бесплатных инструментов мне больше всего понравились Selenium Remote Control и Watir. Первый кроссплатформенный, может стыковаться с любым языком программирования и работает практически с любым браузерами на инъекциях Javascript. Но он довольно сложен в настройке и запросто может глючить на формах, содержащих много скриптов.

Watir же может управлять только лисой, и только через плагин, который доступен для скачивания на официальном сайте. Watir не очень хорошо работает с фреймами, но зато не засоряет код полученной страницы дополнительными скриптами. Правда, у этой системы есть один недостаток, она работает только с Ruby (есть еще порт на Java, проект Watij).

Экспорт баз MySQL

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

mysqldump -u username -p db_name –routines –extended-insert >dump.sql

Как пережать видео из 3gp в AVI

Многие мобильные телефоны позволяют снимать видео на встроенную камеру и сохранять его в формате 3gp. Мой любимый mplayer отказывается показывать видео в формате 3gp, а посмотреть хотелось бы.

Для работы с видео и звуком под Linux есть как минимум 2 классных инструмента, mencoder и ffmpeg. И чтобы посмотреть видео, снятое на телефоне SonyEricsson K750i, я его преобразовал в формат avi:

mencoder 007.3gp -ovc lavc -lavcopts vcodec=msmpeg4v2 -oac mp3lame -lameopts vbr=3 -o 007.avi

Размер файла при этом вырос в 2 раза; и видео, и звук оказались в приемлемом качестве. Но точно такой же финт не сработал с видео, отснятым на телефон Nokia 6223, там используется какой-то нестандартный битрейт

Можно попробовать вылечить так:

mencoder 007.3gp -ovc lavc -lavcopts vcodec=msmpeg4v2 -oac mp3lame -srate 8000 -lameopts vbr=3 -o 007.avi

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

Я попробовал последний вариант:

ffmpeg -i 007.3gp -f avi -acodec libmp3lame 007.avi

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

Опубликовано в рубриках: Linux

Amazon не будет принимать платный трафик в US и CA

Amazon logo
С 1 мая амазон прекращает прием платного трафика для продаж в США и Канаде. Вот такое письмо я получил сегодня:

Dear Amazon Associate

We’re writing to let you know about a change to the Amazon Associates Program. After careful review of how we are investing our advertising resources, we have made the decision to no longer pay referral fees to Associates who send users to www.amazon.com, www.amazon.ca, or www.endless.com through keyword bidding and other paid search on Google, Yahoo, MSN, and other search engines, and their extended search networks. If you’re not sure if this change affects you, please visit this page for FAQs.

As of May 1, 2009, Associates will not be paid referral fees for paid search traffic. Also, in connection with this change, as of May 1, 2009, Amazon will no longer make data feeds available to Associates for the purpose of sending users to the Amazon websites in the US or Canada via paid search.

This change applies only to the Associates programs in North America. If you are conducting paid search activities in connection with one of Amazon’s Associates Programs outside of the US and Canada, please refer to the applicable country’s Associates Program Operating Agreement for relevant terms and conditions.

We appreciate your continued support and participation in this advertising Program. If you have questions or concerns, please write to us by using the Contact Us form available on Associates Central.

Оффтопик: Nirvana, Rape Me. Интересные переделки известного хита

Если вам чуждо творчество группы Nirvana – проходите мимо, этот пост не для вас. Здесь я решил собрать самые интересные переделки легендарной песни Rape Me.

Например, некто Ричард Сыр, смог превратить эту серьезную песню в довольно веселую вещь:
Nirvana video synced with Richard Cheese cover

Никогда раньше не видел, как девушки исполняют эту песню. Этот ролик мне показался интересным:

Ну и на закуску:
The String Quartet Tribute To Nirvana – Rape Me

Piano Instrumental – Nirvana – Rape Me

Как получить список дат в mysql

Однажды мне потребовалось получить список дат на каждый день 2009 года. Как оказалось, в mysql такой список получить очень просто.

Для этого нужна всего лишь любая таблица, в которой есть не меньше 365 строк. У меня такая таблица была, и называется она games. Скрипт выглядит так:


SET @rownum:=0;
select adddate('2008-12-31',interval @rownum:=@rownum+1 DAY) next_date from games limit 0,365;

Как экспортировать данные в формате ZIP из php-скрипта

Все просто, можно использовать класс zipfile, который использует phpMyAdmin.
Выглядит это примерно так:


require_once("zip.lib.php");
$zip = new zipfile();
$zip->addFile($some_text, 'file.txt');
$handle = fopen("file.zip","w");
fwrite($handle,$zip->file());
fclose($handle);
?>

Все, в текущей директории файл file.txt будет упакован в file.zip. Код будет работать и в php4, и в php5. В php должна быть включена поддержка zlib.

OpenSuSe 11.1: Самый глючный дистрибутив всех времен и народов

OpenSuSe Logo

Не так давно я обновлял систему с OpenSuSe 11.0, как обычно, запустив обновление. После него отказались работать X, mplayer не показывал фильмы в fullscreen mode и творилось много неприятного. В связи с чем было принято решение снести все нафиг и поставить OpenSuSe 11.1, ведь в прошлый раз все произошло безболезненно.

Однако, проблемы начались сразу после установки. KDE4 оказался зело глючный, по крайней мере в без напильника многое работать не стало. Например, kget отказывался скачивать поставленные в очередь файлы, akregator рушился при добавлении RSS лент в ридер.

В связи с чем я и переставил систему на SuSe 11.1 с KDE 3.5. Но на этом мои злоключения не закончились. Хроническая болезнь всех видеокарт ATI продолжается вместе с любым дистрибутивом линукса. Каждая инсталляция превращается в головную боль, поскольку система с упорством маньяка ставит глюкавый драйвер radeonhd, вместо родного ATI-шного fglrx.

Эта проблема непобедима, поскольку драйвера видеокарт ATI содержат какой-то мегасекретный код, который они и прячут как могут. Т.е. никогда мы не увидим исходников дров, и они не будут включены в дистрибутивы линуксов из-за различий в лицензионном соглашении.

Но это все лирика. Установка драйверов старым добрым способом, описанным для SuSe 10.3, не дала желаемый результат. Драйвер встал, но 3D ускорение работало из рук вон плохо.
Симптомы были такие:

> glxinfo | grep direct
direct rendering: Yes

glxgears показывал порядка 300 кадров в секунду (что для карты с ускорителем и для маленького окошка слишком мало).

fgl_glxgears не запускался, рушился с вот такой ошибкой:
X Error of failed request: GLXUnsupportedPrivateRequest

Лечится просто, надо в .bashrc дописать вот такую строчку:
export LD_LIBRARY_PATH=/usr/X11R6/lib:$LD_LIBRARY_PATH
и перелогиниться после этого.

Сразу заработал fgl_glxgears и Quake3, и жизнь снова стала прекрасна и замечательна… казалось бы.

Второй серьезный баг был с настройкой параметров клавиатуры. После запуска Sax2 слетели нафиг настройки, оставался или только русский язык, или только латиница. Лечится следующим образом:

В файле /etc/X11/xinit/xinitrc.common надо закомментировать строчки 103 и 104:

xdpyinfo | grep -q “X.Org version: 6.9.0″ || \
setxkbmap -print | xkbcomp – $DISPLAY

Это сильно облегчит жизнь при настройке клавиатуры через Sax2, официально зарегистрированный баг SuSe 11.1: https://bugzilla.novell.com/show_bug.cgi?id=432627

Ну и еще одна серьезная пакость была в этом дистрибутиве, после установки SuSe 11.1 перестал работать звук. Эти товарищи включили кривой набор пакетов ALSA, в результате чего и звук пропал. Лечится обновлением драйверов до последней версии:

zypper ar http://download.opensuse.org/repositories/multimedia:/audio/openSUSE_11.1/ multimedia

zypper install alsa alsa-utils alsa-tools alsa-firmware libasound2

zypper rr multimedia

далее в зависимости от ядра, выполняются следующие команды:

zypper ar http://download.opensuse.org/repositories/multimedia:/audio:/KMP/openSUSE_11.1/ multimedia

zypper install alsa-driver-kmp-default

zypper rr multimedia

(для ядра kernel 2.6.27.7_9.1-1.1-default i386 or x86_64 GNU/Linux (openSUSE-11.1)

или

zypper ar http://download.opensuse.org/repositories/multimedia:/audio:/KMP/openSUSE_11.1/ multimedia

zypper install alsa-driver-kmp-pae

zypper rr multimedia

(для ядра с kernel 2.6.27.7_9.1-1.1-pae i386 GNU/Linux (openSUSE-11.1)

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

И снова о прокси

Я уже писал о том, как превратить VDS в прокси SOCKS5, но этот способ не всегда удобен. С одной стороны, никакого софта ставить не надо; но с другой стороны, перед использованием proxy обязательно соединяться по ssh с VDS. И в случае, если у VDS есть несколько IP адресов на одной сетевой карте, то использовать сможете только один из них.

Для полноценного использования своего VDS в качестве прокси-сервера можно использовать 3proxy, который легко собирается на VDS

Если вы собираетесь использовать этот прокси с каких-то фиксированных IP адресов, мой конфиг вам в помощь:


#!/usr/local/bin/3proxy
nserver 1.2.3.4
nserver 1.2.3.5
timeouts 1 5 30 60 180 1800 15 60
daemon
log /usr/local/etc/3proxy/logs/3proxy.log D
logformat "L%d-%m-%Y %H:%M:%S %z %N.%p %E %U %C:%c %R:%r %O %I %h %T"
archiver gz /bin/gzip %F
rotate 3
chroot /usr/local/jail
setgid 65535
setuid 65535

auth iponly
flush
allow * 11.12.13.14 * *
proxy -i1.2.7.9 -e1.2.7.10 -p8089 -n -a

auth iponly
flush
allow * 11.12.13.14 * *
proxy -i1.2.7.9 -e1.2.7.9 -p8090 -n -a

В этом примере демон 3proxy будет слушать порты 8089 и 8090 на айпишнике 1.2.7.9. Использовать получившийся анонимный http прокси можно только с IP адреса 11.12.13.14. На официальном сайте есть толковый мануал на русском, с примерами. Важно только не забыть поставить запуск прокси при перезагрузке VDS, например, в rc.local прописать вот такую строчку:

nohup /usr/local/bin/3proxy /usr/local/etc/3proxy.cfg >/dev/null 2>/dev/null &


Я рад, что и мои друзья потихоньку заводят свои блоги, организуют новые проекты. Сама идея собрать отзывы о путешествиях в одно место мне очень близка к сердцу, поскольку у меня у самого есть аналогичный проект; но в данном случае, под хороший сайт и места на своем VDS не пожалею.

Опубликовано в рубриках: Linux, proxy