• Май 18, 2012, 00:54 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Автор Тема: Форумный бот: делимся идеями и опытом  (Прочитано 3569 раз)

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

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

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

Итак, приступим. Конструктивная критика и фрагменты кода приветствуются. Обсуждение моральных аспектов ботоводства и кармы — в других темах.
### Август 6, 2011, 04:06
Хочу другую тему. Я на аг.ру когда-то давно скриптом кармообмен проводил. Вышел почти на верхушку, а потом сам же сбросил всё спровоцировав один баг (хе-хе). Короче, было весело. Даже интересно, осталось ли у меня что-то с тех времён.

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

RawonaM

  • Administrator
### Август 6, 2011, 11:16
За ботов, раздающих карму, можно и забанить.

RawonaM

  • Administrator
### Август 6, 2011, 11:17
А так в принципе могу поделиться опытом. Даже не опытом, а самим кодом могу поделиться.
### Август 6, 2011, 11:48
Плохая новость: ссылки для изменения кармы работают лишь ограниченное время в пределах сессии. Т.е., нельзя просто тупо насобирать ссылок для изменения кармы и периодически делать переход к ним (что было бы проще, чем описанная выше методика), как и нельзя перебросить их из броузера в броузер или задействовать wget (хотя, если разобраться с форматом хранения кукисов… Впрочем, это все равно нас не освобождает от необходимости парсить страницу).
### Август 6, 2011, 14:06
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 сможет зайти на форум под тем же логином, который используется в ІЕ.
### Август 6, 2011, 15:38
Поскольку мне лень делать поиск пользователя по имени и поиск его сообщений, сделаем проще: бот будет в качестве входного параметра получать ссылку на сообщение на форуме, возле которого отображается информация о пользователе, в т.ч. и его карма. Например, чтобы проплюсовать меня, бот получает ссылку http://lingvoforum.net/index.php/topic,37019.msg961761.html#msg961761(разумеется, из-под моего аккаунта бот плюсовать меня не сможет — пусть это делают другие). В html-коде страницы эта ссылка идет после кармы, а не до нее. Таким образом, нам нужна последняя пара карма-ссылок перед тэгом с заданной ссылкой.
### Август 6, 2011, 17:45
Код: (html) [Выделить]
http​://lingvoforum.net/index.php?action=modifykarma;sa=applaud;uid=1408;topic=37019.0;m=961761;a2f51ad90=c4a60611cbc7329aead319c30ffba1f3
Ага, значит, где-то должно запоминаться, за какие посты усера {плю|мину}совали.
Реквестирую статистику!
### Август 6, 2011, 17:54
За ботов, раздающих карму, можно и забанить.
:+1:
### Август 6, 2011, 18:02
Ага, значит, где-то должно запоминаться, за какие посты усера {плю|мину}совали.
Реквестирую статистику!
Вы уверены, что плюминусы расставляют по постам не от фонаря?
### Август 6, 2011, 18:53
Вы уверены<…>?
topic=37019.0;m=961761;
Это нумер поста.
### Август 6, 2011, 19:55
Это нумер поста.
Я понимаю. Но нет гарантии, что плю(мину)сики нажаты не в первом попавшемся посте по(не)любившегося юзера, т.е. что нумер поста имеет значение для оценки именно этого поста.
### Август 6, 2011, 19:56
Ну, тут равновероятно…
### Август 6, 2011, 21:56
Топик и номер сообщения нужны лишь для возврата к нужной точке форума. Только что проверял: если их выбросить их из ссылки, карма изменяется, но отображается какая-то левая страница.
### Август 6, 2011, 22:02
Итак. Что должен уметь бот?
1) Заходить на форум под вашим аккаунтом.
2) Помнить список плюсуемых и минусуемых.
3) Уметь находить ссылки для изменения кармы нужного пользователя и переходить по ним.
4) Делать все это с заданной периодичностью.
;up:  :D
### Август 6, 2011, 22:07
Хм. Кажется, все даже проще, чем я думал: самый интересный параметр с кучей цифр и букв — один и тот же во всех кармассылках в пределах одной сессии. uid берем из профиля плюсуемого/минусуемого пользователя. Все остальное (action=modifykarma;sa=applaud; или ...;sa=smite;) понятно без перевода.
### Август 6, 2011, 22:12
отображается какая-то левая страница
Эта:<!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>«</body>
</html>
?
### Август 6, 2011, 22:15
Да.
### Август 8, 2011, 02:35
Итак, скрипт для одновременного плюсования и минусования кармы нескольких пользователей. Написан в виде батника с использованием программ из (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 часа. Бот практически готов :)
### Август 8, 2011, 20:50
Для правильной работы необходимо, чтобы в файле applaud.txt была строка с текстом 1408, в файле smite.txt ее быть не должно ни в коем случае.
:what:
Это защита от дурака такая?
### Август 8, 2011, 20:57
Для правильной работы необходимо, чтобы в файле applaud.txt была строка с текстом 1408, в файле smite.txt ее быть не должно ни в коем случае.
А у меня со строкой 23802 работает… Каковую вещь аз творю не суразно?
### Август 8, 2011, 23:03
Таки дочитали до этого места :)
### Август 8, 2011, 23:14
Бот практически готов
дасте знати, коли буде альфа версія?

:) таки отключили карму
### Август 9, 2011, 01:18
Значить, починаємо майструвати флудобота замість кармобота :)

RawonaM

  • Administrator
### Август 9, 2011, 01:24
Бот-плагин для ФФ (интересно, на чем их пишут?).
На JS.
 

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

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


Имя: