Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Форумный бот: делимся идеями и опытом

Автор Python, августа 6, 2011, 02:27

0 Пользователи и 1 гость просматривают эту тему.

Python

Итак, часовой механизм. В WinXP для этого можно использовать планировщик, доступ к которому осуществляется командой schtasks.
Если наш скрипт лежит в файле d:\somedir\karmabot.bat, то для запуска его каждые три часа делаем следующее:

schtasks /create /tn karmabot /tr d:\somedir\karmabot.bat  /sc minute /mo 181 /st 12:34:56

Вместо 180 минут или 3 часов я поставил 181 минуту — на случай, если время между запусками бота окажется на секунду меньше, чем ожидалось, и к нужному времени запрет на изменение кармы не закончится (лучше потерять минуту, чем 3 часа). Стартовое время (параметр /st) может быть любое — от 00:00:00 до 23:59:59, в режиме периодических повторов это не имеет значения. Параметр /tn — идентификатор задания. Может быть любым, при условии, что в других заданиях планировщика этот идентификатор не используется.

Чтобы выключить бота, вызываем команду:

schtasks /delete /tn karmabot
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Поскольку карму прикрыли и кармабот остался без работы, приступим к созданию флудобота. В простейшем случае, флудобот вообще не читает сообщений на форуме, а просто периодически отправляет сообщения (например, «+1», «аффтар жжот», «:)», «таки да рувэ нэ» и пр.) в определенную тему фурума.

Попробую использовать тот же инструментарий, но задача выглядит более сложной, чем предыдущая. Прежде всего, форма отправки сообщений использует метод post, который передается несколько иначе. Нам нужно получить откуда-то сообщение (думаю использовать механизм входящего потока — так будет универсальнее) и направить его на форум, вместе с дополнительными параметрами, взятыми со страницы отправки сообщения. В общем, ничего сложного.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Собственно, в отправке данных методом POST ничего сложного нет — для этого у wget есть следующие опции:
--post-data=string
--post-file=file
Т.е., мы можем либо включить передаваемые данные непосредственно в строку команды, либо передать данные, хранимые в файле. Структура в обоих случаях будет одна и та же:
параметр₁=значение₁&параметр₂=значение₂&...&параметрn=значениеn
Значение представляет собой текст в url-кодировке (т.е., в котором спецсимволы и символы национальных кодировок должны быть побайтно закодированы в формате %ХХ, где ХХ — код из двух шестнадцатеричных цифр). Фактически же, большинство символов могут быть переданы в своем обычном виде (если речь идет о передаче через файл — в командной строке возможны сбои кодировки) — кодировать необходимо лишь % (%25) и & (%26), что упрощает нам задачу.

Данные, получаемые после отправки формы, нам, скорее всего, не понадобятся, и сохранять их нет необходимости. Однако, с опцией --spider метод post почему не работает. Вместо нее можно указать опцию -O nul — в таком варианте wget работает корректно, не замусоривая диск (в системе DOS/Windows имя nul используется для записи данных «в никуда» вместо файла).
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2


Drundia

Цитата: Python от августа 12, 2011, 05:11кодировать необходимо лишь % (%25) и & (%26), что упрощает нам задачу.
PHP хороший, там просто через urlencode() надо пропустить.

Python

Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Triton

Молиться, поститься и слушать радио Ватника


Python

Цитата: Drundia от августа 12, 2011, 09:31
Цитата: Python от августа 12, 2011, 05:11кодировать необходимо лишь % (%25) и & (%26), что упрощает нам задачу.
PHP хороший, там просто через urlencode() надо пропустить.
В нашем случае, можно и sedом обойтись (просто не хочу сильно раздувать набор инструментов):
sed -e s/%/%25/ -e s/&/%26/
Как-то так. В винде желательно ^ воткнуть перед % и &, чтобы она не приняла их за спецсимволы.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2


Python

Угу. Зате можна не морочитися з його установкою. Ну і синтаксис простіший, хоч і менш функціональний.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2


Python

Если мы загрузим страницу интересной для нас темы Лингвофорума (см. первые строки кармабота) и уберем все лишнее (т.е., возьмем лишь данные формы post2, с помощью которой ЛФ принимает ответы, вырежем весь скрипт и все строки, не содержащие аттрибута name):

sed -n /^<form.*post2/,/^<\/form/p <lf.html|sed /^<script/,/^<\/script/d|grep name

то останется у нас примерно следующее:

      <form action="http://lingvoforum.net/index.php?action=post2" method="post" accept-charset="UTF-8" name="postmodify" id="postmodify" onsubmit="submitonce(this);" style="margin: 0;">
<input type="hidden" name="topic" value="36979" />
<input type="hidden" name="subject" value="95%" />
<input type="hidden" name="icon" value="xx" />
<input type="hidden" name="from_qr" value="1" />
<input type="hidden" name="notify" value="0" />
<input type="hidden" name="not_approved" value="" />
<input type="hidden" name="goback" value="1" />
<input type="hidden" name="num_replies" value="254" />
                    <textarea cols="75" rows="7" style="width: 95%; height: 200px;" name="message" tabindex="1" id="message" onchange="textchange(this)"></textarea><br />
                <input type="submit" name="post" value="Post" onclick="deletecookie(); return submitThisOnce(this);" accesskey="s" tabindex="2" id="d_postsend" />
    <input type="submit" name="preview" value="Preview" onclick="deletecookie(); return submitThisOnce(this);" accesskey="p" tabindex="4" id="d_postprev"/>
<input type="hidden" name="b929604f168" value="4a1bc1f643deb31286996cd26e456e83" />
<input type="hidden" name="seqnum" value="3242694" />

Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2


Python

Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Drundia

Уэркинг эз интендед.

Мда, сообщения для уоннаби-бота закончились :(

Python

Якщо бот буде в цій ситуації роздруковувати власний сорс-код, то зможе функціонувати як «албанський вірус».
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

arseniiv

Предлагаю ещё сообщения для бота:

вы бот!
:-\
забыли запятую
я согласна!
[img]http://www.kolobok.us/smiles/standart/swoon2.gif[/img]

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


Drundia

Цитата: Python от августа 13, 2011, 03:11
Якщо бот буде в цій ситуації роздруковувати власний сорс-код, то зможе функціонувати як «албанський вірус».
Який такий албанський вірус?

arseniiv

Мне тоже непонятно, но я почему-то тогда смолчал. :+1:

Кстати, боту надо уметь ставить не только +1, но и :+1:!

Python, на вас надежда ЛФ!

Triton

Молиться, поститься и слушать радио Ватника

RawonaM


Python

Цитата: Drundia от августа 13, 2011, 10:18
Цитата: Python от августа 13, 2011, 03:11
Якщо бот буде в цій ситуації роздруковувати власний сорс-код, то зможе функціонувати як «албанський вірус».
Який такий албанський вірус?
Вірус (наприклад, у вигляді інструкції для користувача), для роботи якого потрібна активна участь людини. Приблизно ось такий:
Цитировать
Я - албанський вірус, але у зв'язку із поганим розвитком технології у моїй країні, на жаль, не можу завдати шкоди вашому комп'ютеру. Будь ласка, знищіть один із важливих файлів на вашому комп'ютері самостійно та перешліть мене іншим.
Заздалегідь вдячний за розуміння та співпрацю.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2


Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр