stringtranslate.com

Помощь:Создание бота

Роботы или боты — это автоматические процессы, которые взаимодействуют с Википедией (и другими проектами Викимедиа) так, как будто они являются редакторами-людьми. На этой странице делается попытка объяснить, как выполнить разработку бота для использования в проектах Викимедиа, и многое из этого можно перенести на другие вики, основанные на MediaWiki. Объяснение ориентировано в основном на тех, у кого есть некоторый опыт программирования, но кто не уверен, как применить эти знания для создания бота Википедии.

Зачем мне нужно создавать бота?

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

Соображения перед созданием бота

Повторное использование существующих ботов

Часто гораздо проще запросить работу бота у существующего бота. Если у вас есть только периодические запросы или вы не знакомы с программированием, это обычно лучшее решение. Эти запросы можно сделать на Wikipedia:Bot requests . Кроме того, существует ряд инструментов, доступных любому человеку. Большинство из них имеют форму расширенных веб-браузеров со специфичной для MediaWiki функциональностью. Самым популярным из них является AutoWikiBrowser (AWB), браузер, специально разработанный для помощи в редактировании в Wikipedia и других проектах Wikimedia. Почти полный список инструментов можно найти на Wikipedia:Tools/Editing tools . Инструментами, такими как AWB, часто можно управлять, имея лишь небольшое или полное понимание программирования.

Повторное использование кодовой базы

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

Важные вопросы

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

Как работает бот Википедии?

Обзор операции

Как и редактор-человек, бот Википедии читает страницы Википедии и вносит изменения там, где считает нужным. Разница в том, что, хотя боты быстрее и менее подвержены усталости, чем люди, они далеко не так умны, как мы. Боты хороши в повторяющихся задачах, которые имеют легко определяемые шаблоны, где нужно принимать мало решений.

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

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

API для ботов

Чтобы внести изменения в страницы Википедии, бот обязательно должен извлечь страницы из Википедии и отправить правки обратно. Для этой цели доступно несколько интерфейсов прикладного программирования (API).

Некоторые веб-серверы Wikipedia настроены на предоставление запросов на сжатый ( GZIP ) контент. Это можно сделать, включив строку "Accept-Encoding: gzip" в заголовок HTTP-запроса; если заголовок HTTP-ответа содержит "Content-Encoding: gzip", документ находится в форме GZIP, в противном случае он находится в обычной несжатой форме. Обратите внимание, что это относится к веб-серверу, а не к программному обеспечению MediaWiki. Другие сайты, использующие MediaWiki, могут не иметь этой функции. Если вы используете существующую структуру бота, она должна обрабатывать низкоуровневые операции, подобные этой.

Вход в систему

Одобренные боты должны войти в систему, чтобы вносить изменения. Хотя бот может делать запросы на чтение без входа в систему, боты, которые завершили тестирование, должны входить в систему для всех действий. Боты, вошедшие в систему с учетной записью с флагом бота, могут получать больше результатов на запрос из API MediaWiki (api.php). Большинство фреймворков ботов должны автоматически обрабатывать вход в систему и файлы cookie, но если вы не используете существующий фреймворк, вам нужно будет выполнить следующие шаги.

Для безопасности данные для входа должны передаваться с использованием метода HTTP POST . Поскольку параметры запросов HTTP GET легко видны в URL, входы через GET отключены.

Для регистрации бота с использованием API MediaWiki необходимы два запроса:

Запрос 1 — это GET-запрос на получение токена входа.

Запрос 2 – это POST для завершения входа

где TOKEN — это токен из предыдущего результата. HTTP-куки из предыдущего запроса также должны быть переданы со вторым запросом.

Успешная попытка входа приведет к тому, что сервер Wikimedia установит несколько HTTP-cookie . Бот должен сохранять эти cookie-файлы и отправлять их обратно каждый раз, когда он делает запрос (это особенно важно для редактирования). В английской Википедии следует использовать следующие cookie-файлы: enwikiUserID , enwikiToken и enwikiUserName . Файл cookie enwiki_session необходим для фактической отправки правки или фиксации какого-либо изменения, в противном случае будет возвращено сообщение об ошибке MediaWiki:Session fail preview .

Вход в основной аккаунт через "action=login" устарел и может перестать работать без предупреждения. Чтобы продолжить вход с "action=login", см. Special:BotPasswords .

Редактирование; редактирование токенов

Wikipedia использует систему токенов редактирования для внесения изменений в страницы Wikipedia, а также для других операций, которые изменяют существующий контент, например, откат. Токен выглядит как длинное шестнадцатеричное число, за которым следует '+\', например:

d41d8cd98f00b204e9800998ecf8427e+\

Роль токенов редактирования заключается в предотвращении «перехвата редактирования», когда пользователей обманным путем заставляют вносить изменения, нажимая на одну ссылку.

Процесс редактирования включает два HTTP-запроса. Сначала необходимо сделать запрос на получение токена редактирования. Затем необходимо сделать второй HTTP-запрос, который отправляет новое содержимое страницы вместе с только что полученным токеном редактирования. Невозможно выполнить редактирование в одном HTTP-запросе. Токен редактирования остается неизменным в течение сеанса входа в систему, поэтому токен редактирования необходимо получить только один раз, и его можно использовать для всех последующих правок.

Чтобы получить токен редактирования, выполните следующие действия:

URL будет выглядеть примерно так:https://en.wikipedia.org/w/api.php?action=query&meta=tokens&format=json

Если токен редактирования, который получает бот, не содержит шестнадцатеричной строки ( т. е . токен редактирования — это просто '+\'), то бот, скорее всего, не вошел в систему. Это может быть вызвано рядом факторов: сбой аутентификации на сервере, разрыв соединения, истечение времени ожидания или ошибка при сохранении или возврате правильных файлов cookie. Если это не из-за ошибки программирования, просто войдите в систему снова, чтобы обновить файлы cookie входа. Боты должны использовать утверждение, чтобы убедиться, что они вошли в систему.

Редактировать конфликты

Конфликты редактирования возникают, когда на одной странице предпринимаются множественные, перекрывающиеся попытки редактирования. Почти каждый бот рано или поздно попадает в конфликт редактирования того или иного рода и должен включать в себя некий механизм для проверки и решения этих проблем.

Боты, использующие API Mediawiki (api.php), должны извлекать токен редактирования вместе с starttimestampи последней «базовой» временной меткой ревизии перед загрузкой текста страницы при подготовке к редактированию; prop=info|revisionsможет использоваться для извлечения как токена, так и содержимого страницы в одном запросе ( пример ). При отправке правки установите starttimestampатрибуты basetimestampи и проверьте ответы сервера на наличие ошибок. Для получения дополнительных сведений см. MediaWiki:API:Edit - Создание и редактирование страниц.

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

Обзор процесса разработки бота

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

Обзор цикла разработки бота Википедии

Идея

Спецификация

Архитектура программного обеспечения

Выполнение

Реализация (или кодирование) подразумевает превращение дизайна и планирования в код. Это может быть наиболее очевидной частью работы по программной инженерии, но не обязательно самой большой. На этапе реализации вам следует:

Тестирование

Хороший способ протестировать вашего бота в процессе разработки — заставить его показывать изменения (если таковые имеются), которые он мог бы внести в страницу, а не редактировать живую вики. Некоторые фреймворки ботов (например, pywikibot) имеют предварительно закодированные методы для показа различий. В процессе одобрения боту, скорее всего, будет предоставлен испытательный срок (обычно с ограничением по количеству правок или дней, в течение которых он должен работать), в течение которого он может фактически редактировать, чтобы обеспечить тонкую настройку и устранить любые ошибки. По окончании испытательного срока, если все прошло по плану, бот должен получить одобрение на полномасштабную работу.

Документация

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

Запросы/Жалобы

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

Обслуживание

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

Существенные изменения функциональности одобренных ботов должны быть одобрены .

Общие рекомендации по запуску бота

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

Лучшие практики ботов

Общие функции бота, которые стоит рассмотреть для внедрения

Ручная помощь

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

Отключение бота

Вы должны иметь возможность легко и быстро отключить своего бота. Если ваш бот сломается, вы несете ответственность за уборку после него! Вы можете заставить бота отказаться запускаться, если на его странице обсуждения было оставлено сообщение, предполагая, что сообщение может быть жалобой на его действия; это можно проверить с помощью meta=userinfoзапроса API ( пример ). Или вы можете создать страницу, которая будет отключать бота при изменении; это можно проверить, загрузив содержимое страницы перед каждым редактированием.

Подпись

Так же, как и человек, если ваш бот вносит изменения в страницу обсуждения в Википедии, он должен подписать свой пост четырьмя тильдами (~~~~). Подписи принадлежат только пространствам имен обсуждения, за исключением страниц проектов, используемых для обсуждения (например, статьи для удаления ).

Флаг бота

Правки бота будут видны в Special:RecentChanges , если только они не настроены на указание бота. После того, как бот был одобрен и получил разрешение на использование флага бота, можно добавить "bot=True" к вызову API - см. mw:API:Edit#Parameters , чтобы скрыть правки бота в Special:RecentChanges . В Python, используя mwclient или wikitools, а затем добавив bot=True к команде edit/save, можно установить редактирование как редактирование бота - например PageObject.edit(text=pagetext, bot=True, summary=pagesummary).

Мониторинг статуса бота

Если бот полностью автоматизирован и выполняет регулярные правки, вам следует периодически проверять, работает ли он так, как указано, и не было ли его поведение изменено изменениями программного обеспечения. Рассмотрите возможность добавления его в Wikipedia:Bot activity monitor, чтобы получать уведомления, если бот перестанет работать.

Боты с открытым исходным кодом

Многие операторы ботов предпочитают сделать свой код открытым, и иногда это может потребоваться перед одобрением для особенно сложных ботов. Открытие исходного кода имеет несколько преимуществ:

Открытый исходный код, хотя и редко требуется, обычно поощряется в соответствии с открытой и прозрачной природой Википедии.

Прежде чем делиться кодом, убедитесь, что конфиденциальная информация, такая как пароли, сохранена в файле, который не будет опубликован.

Для пользователей, желающих сделать свой код открытым, доступно множество вариантов. Размещение кода на подстранице пользовательского пространства бота может быть хлопотным в обслуживании, если не автоматизировано, и приводит к тому, что код становится многолицензируемым в соответствии с условиями лицензирования Википедии в дополнение к любым другим условиям, которые вы можете указать. Лучшим решением является использование системы контроля версий , такой как SVN , Git или Mercurial . В Википедии есть статьи, сравнивающие различные варианты программного обеспечения , и веб-сайты для размещения кода , многие из которых бесплатны.

Языки программирования и библиотеки

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

Авк

GNU Awk — простой язык для ботов любого размера, включая OAuth.

Перл

Если он расположен на веб-сервере, вы можете запустить свою программу и взаимодействовать с ней во время ее работы через Common Gateway Interface из вашего браузера. Если ваш интернет-провайдер предоставляет вам веб-пространство, велики шансы, что у вас есть доступ к сборке Perl на веб-сервере, с которой вы можете запускать свои программы Perl.

Библиотеки:

PHP

PHP также можно использовать для программирования ботов. Разработчики MediaWiki уже знакомы с PHP, так как это язык, на котором написаны MediaWiki и его расширения. PHP особенно хорош, если вы хотите предоставить своему боту интерфейс на основе веб-форм. Например, предположим, что вы хотите создать бота для переименования категорий. Вы можете создать HTML-форму, в которую вы будете вводить текущие и желаемые названия категории. Когда форма будет отправлена, ваш бот сможет прочитать эти входные данные, затем отредактировать все статьи в текущей категории и переместить их в желаемую категорию. (Очевидно, что любой бот с интерфейсом на основе форм должен быть каким-то образом защищен от случайных веб-серферов.)

Таблица функций PHP-ботов может дать некоторое представление о возможностях основных фреймворков ботов.

  1. ^ Не включает тех, кто работал над фреймворками, ответвленными для создания перечисленного фреймворка.
  2. ^ Где это возможно. Исключает загрузку изображений и другие подобные задачи, которые в настоящее время не поддерживаются API.

Питон

Библиотеки:

МАТЛАБ

Microsoft .NET

Microsoft .NET — это набор языков, включающий C# , C++/CLI , Visual Basic .NET , J# , JScript .NET , IronPython и Windows PowerShell . Используя Mono Project , программы .NET могут также работать на Linux , Unix , BSD , Solaris и macOS , а также под Windows .

Библиотеки:

Ява

Библиотеки:

Node.js

Библиотеки:

Рубин

Библиотеки:

Общий Лисп

Хаскелл

VBScript

VBScript — это язык сценариев , основанный на языке программирования Visual Basic . Для VBScript не опубликованы фреймворки ботов, но некоторые примеры ботов, которые его используют, можно увидеть ниже:

Луа