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

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

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

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

Python

Введение кармы на формуме — неплохой повод для создания простенького форумного бота. Карма нужна всем, особенно вам, вашим друзьям и вашим врагам. Но просыпаться каждые три часа и исправлять мировую карму есть возможность не у всех. А значит, если в некоторых темах типа «Считаем до миллиона» боты оставляют сообщения, то автоматизировать процесс кармления сам бог велел.

Итак. Что должен уметь бот?
1) Заходить на форум под вашим аккаунтом.
2) Помнить список плюсуемых и минусуемых.
3) Уметь находить ссылки для изменения кармы нужного пользователя и переходить по ним.
4) Делать все это с заданной периодичностью.

Выбор средств и вариантов реализации:
1) Пользовательский JavaScript, запускаемый непосредственно в браузере. Механизм запуска пользовательских скриптов зависит от браузера. Основное преимущество — отсутствие мороки с логином и кукисами, встроенные средства для работы со структурой html.
2) Бот как самостоятельная программа-клиент. Подойдет любой язык, поддерживающий работу с сокетами и (желательно) имеющий библилтеку для работы с протоколом http с поддержкой печенек. Плюс: при желании, можно сделать очень легковесным. Минус: сложности с залогиниванием (должен либо каким-то образом стащить кукисы из браузера, либо уметь заходить непосредственно по логину-паролю, либо содержать в себе перехватывающий кукисы прокси-сервер, через который пользователь залогинивается).
3) Бот-плагин для ФФ (интересно, на чем их пишут?). Примерно то же, что и (1), но круче (?).

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

Drundia

Хочу другую тему. Я на аг.ру когда-то давно скриптом кармообмен проводил. Вышел почти на верхушку, а потом сам же сбросил всё спровоцировав один баг (хе-хе). Короче, было весело. Даже интересно, осталось ли у меня что-то с тех времён.

Файрфокс, к примеру, куки не прячет. И Юзер-Эйджент тоже.

RawonaM


RawonaM

А так в принципе могу поделиться опытом. Даже не опытом, а самим кодом могу поделиться.

Python

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

Python

IE6 позволяет экспортировать кукисы в формат, совместимый с (wiki/en) Wget . Делать это приходится вручную (возможно, где-то зарыта возможность экспортировать куки программно — не проверял; еще есть папка Cookies в Documents and Settings\%username%, но хранимые там файлы несовместимы с wget). Меню Файл->Импорт/экспорт... и далее через мастер.

У wget есть опции для работы с cookies:
       --load-cookies=FILE     load cookies from FILE before session.
       --save-cookies=FILE     save cookies to FILE after session.

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

Python

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

Bhudh


http​://lingvoforum.net/index.php?action=modifykarma;sa=applaud;uid=1408;topic=37019.0;m=961761;a2f51ad90=c4a60611cbc7329aead319c30ffba1f3
Ага, значит, где-то должно запоминаться, за какие посты усера {плю|мину}совали.
Реквестирую статистику!
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо


ginkgo

Цитата: Bhudh от августа  6, 2011, 16:45
Ага, значит, где-то должно запоминаться, за какие посты усера {плю|мину}совали.
Реквестирую статистику!
Вы уверены, что плюминусы расставляют по постам не от фонаря?
"Θα φτιάξουμε μαρμελάδες."

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

ginkgo

Цитата: Bhudh от августа  6, 2011, 17:53
Это нумер поста.
Я понимаю. Но нет гарантии, что плю(мину)сики нажаты не в первом попавшемся посте по(не)любившегося юзера, т.е. что нумер поста имеет значение для оценки именно этого поста.
"Θα φτιάξουμε μαρμελάδες."

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Python

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

Pinia

Цитата: Python от августа  6, 2011, 02:27
Итак. Что должен уметь бот?
1) Заходить на форум под вашим аккаунтом.
2) Помнить список плюсуемых и минусуемых.
3) Уметь находить ссылки для изменения кармы нужного пользователя и переходить по ним.
4) Делать все это с заданной периодичностью.
;up:  :D
All people smile in the same language!

Python

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

Bhudh

Цитата: Python от отображается какая-то левая страница
Эта:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>...</title>
<script type="text/javascript"><!-- // --><![CDATA[
history.go(-1);
// ]]></script>
</head>
<body>&laquo;</body>
</html>
?
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Python

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

Python

Итак, скрипт для одновременного плюсования и минусования кармы нескольких пользователей. Написан в виде батника с использованием программ из (wiki/en) UnxUtils (кроме wget более поздней версии, который я взял отсюда), с некоторыми изменениями может использоваться на юниксах.

@echo off
set initpage=http:^//lingvoforum.net/index.php/topic,36979.150.html
wget --load-cookies=cookies.txt --save-cookies=cookies.txt -O lf.html %initpage%
grep modifykarma<lf.html|head -n1|sed -e s/.*m=[0-9]*;/"set session="/1 -e s/"[^^a-z0-9= ].*"// >setsession.bat
call setsession.bat
sed -e s/^^/http:\/\/lingvoforum.net\/index.php\?action=modifykarma;sa=applaud;uid=/g -e s/$/;%session%/g <applaud.txt >url.tmp
sed -e s/^^/http:\/\/lingvoforum.net\/index.php\?action=modifykarma;sa=smite;uid=/g -e s/$/;%session%/g <smite.txt >>url.tmp
wget --spider --load-cookies=cookies.txt --save-cookies=cookies.txt -i url.tmp

Строка 2:
initpage — любая страница форума, содержащая ссылки на карму. Это может быть любая тема, содержащая сообщения других пользователей.
Строка 3:
cookies.txt — файл cookies, экспортированный из ІЕ. Перед тем, как экспортировать, нужно залогиниться под себя в ІЕ. В Опере экспорт кукис отсутствует, в ФФ, насколько мне известно, для этой операции существует плагин. cookies.txt нужно положить в ту же папку, где находится файл скрипта.
wget загружает страницу в файл lf.html, используя куки
Строка 4:
В lf.html находим строчки с кармассылками (содержащими текст modifykarma) с помощью grep, оставляем лишь первую из них c помощью head, далее с помощью sed вырезаем начало (от начала строки до параметра m=цифры, включительно с «;» после него) и конец (начиная с кавычки и до конца строки), при этом вместо начала подставляем текст set session= и перенаправляем все в файл setsession.bat, который нам нужен, чтобы установить значение переменной.
Строка 5:
Вызываем сгенерированный файл, который устанавливает переменную session
Строки 6 и 7:
Генерация списка ссылок для изменения кармы. Файлы applaud.txt и smite.txt содержат список идентификаторов пользователей (т.е., цифры, которые идут в ссылке на профиль после u=), один идентификатор на строку. Для правильной работы необходимо, чтобы в файле applaud.txt была строка с текстом 1408, в файле smite.txt ее быть не должно ни в коем случае. В генерируемые ссылки подставляются идентификаторы пользователей, а также параметр сессии.
Строка 8:
Запускаем wget в режиме«паука», когда он открывает страницы на сайте, но не сохраняет их. Список ссылок берется из файла, который был сгенерирован предыдущими двумя строками.

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

Bhudh

Цитата: Python от Для правильной работы необходимо, чтобы в файле applaud.txt была строка с текстом 1408, в файле smite.txt ее быть не должно ни в коем случае.
:what:
Это защита от дурака такая?
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

arseniiv

Цитата: Python от августа  8, 2011, 01:35
Для правильной работы необходимо, чтобы в файле applaud.txt была строка с текстом 1408, в файле smite.txt ее быть не должно ни в коем случае.
А у меня со строкой 23802 работает... Каковую вещь аз творю не суразно?

Python

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

Kern_Nata

Цитата: Python от августа  8, 2011, 01:35
Бот практически готов
дасте знати, коли буде альфа версія?

:) таки отключили карму
VOLĀNTĀ ALTE

Python

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


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

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

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

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

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