Manual:Pywikibot/interwiki.py/ru

From mediawiki.org

Скрипт interwiki.py предназначен для управления интервики-ссылками: их создания, удаления и т. п.

Начало работы[edit]

Для начал работы в первую очередь надо настроить библиотеку pywikipediabot. Как это сделать, можно прочитать на странице Manual:Pywikibot/Basic use/ru. Далее предполагается, что все действия, изложенные на этой странице, выполнены. Чтобы начать работу скрипта, необходимо ввести в командную строку

interwiki.py

или, если это не сработает

python interwiki.py

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

  • если не найдено ни одной ссылки, или если ссылка ведёт на саму просматриваемую страницу, то бот просто закончит работу;
  • если бот найдёт интервики-сслыки на новые языковые разделы или если обнаружит, что название статьи изменилось, то он автоматически добавит новые ссылки и изменит название;
  • если бот обнаружит, что страница по найденной ссылке не существует, он запросит разрешение на её удаление;
  • если бот обнаружит, что на один языковой раздел ведёт две и более ссылок, оно перейдёт в интерактивный режим для разрешения интервики-конфликта. Он предложит список найденных статей в данном языковом разделе с указанием тех страниц из других языковых разделов, которые на них ссылаются. И запросит, какой из вариантов следует выбрать (или можно вообще удалить ссылки на этот язык).

Следует отметить, что используя определённые аргументы при запуске скрипта, можно изменить его поведение по умолчанию (см. #Список аргументов).

Можно также сразу при запуске указать имя страницы, с которой необходимо работать (обратите внимание, что в названии страницы пробелы не допускаются, их следует заменить на подчёркивания):

interwiki.py имя_страницы

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

Работа с большим количеством статей[edit]

Используя XML Export, pywikipediabot может скачать для работы сразу большое количество статей (до 60) за раз. Эту возможность можно использовать при работе с interwiki.py. Проще всего при этом использовать импорт статей по алфавиту со страницы Special:Allpages. Для этого предназначен аргумент -start

-start[edit]

Если при запуске скрипта добавить ему в качестве аргумента -start, бот будет идти по страницам в алфавитном порядке, начиная с того слова, которое будет указано. Например, чтобы запустить бота с буквы «Б», следует написать:

interwiki.py -start:Б

В частности, чтобы пройтись по всем статья вики, можно указать:

interwiki.py -start:!

Возобновление прерванной работы: -continue, -restore[edit]

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

interwiki.py -continue

При аварийном прекращении работы (в том числе при помощи Ctrl-C), бот создаёт специальный файл, куда записывает названия страниц, над которыми осуществлял работу в момент прерывания. При использовании -continue он просто начинает работу с этих страниц и продолжает далее в алфавитном порядке. Для того, чтобы возобновить работу бота, запущенного не в алфавитном порядке, следует использовать аргумент -restore.

Следует иметь в виду, что бот способен продолжить работу только с той точки, на которой он был прерван в последний раз. Запись производится в файл interwiki.dump и если бот будет прерван ещё раз, этот файл будет перезаписан.

Автономная работа: -autonomous[edit]

Работая над большим количеством страниц, часто удобно не контролировать работу бота в очевидных случаях, а неочевидные автоматически пропускать. Это реализовано при помощи аргумента -autonomous. При его использовании бот будет пропускать все возникающие проблемные места, сохраняя их в логе (хранящемся в файле autonomous_problems.dat). Если при выполнении автономной работы требуется не только добавлять или переименовывать интервики-ссылки, но и удалять их, необходимо использовать ещё и аргумент -force. В этом случае желательно проверять лог удалений после работы бота (иногда ссылки удаляются из-за легко устранимой опечатки и т. п.)

Файл sax_parse_bug.dat[edit]

Иногда во время работы скрипта возникает сообщение об ошибке с упоминанием файла sax_parse_bug.dat, после чего бот начинает загружать страницы по одной вместо того, чтобы загружать их пачками по 60. Это возникает из-за того, что в одном из названии загружаемых страниц присутствует некорректный символ.

Для того, чтобы отслеживать эту ошибку, можно использовать скрипт xmltest.py. Следует запустить его, указав в качестве аргумента файл sax_parse_bug.dat:

python xmltest.py sax_parse_bug.dat

В результате будет сгененрирован stack trace, в последней строке которого будет указан номер строки и позиция расположения некорректного символа в файле. Следует проверить этот символ и, по возможности, скорректировать название соответствующей вики-страницы.

Запуск на простом списке страниц: -file[edit]

Если имеется подготовленный список страниц, с которыми необходимо поработать, бота можно запустить по нему. Для этого используется аргумент -file. Список должен представлять собой файл, каждая строка которого отвечает одной странице и имеет вид [[xx:yyy]] comments. Примером такого файла может быть autonomous_problem.dat, который содержит список необработанных автоматически статей, требующих ручного вмешательства. Запуск бота в этом случае производится следующей командой:

python interwiki.py -file:autonomous_problem.dat

Использование подсказок: -hint[edit]

До сих пор рассматривалась работа бота только с теми интервики-ссылками, которые уже содержатся на просматриваемой странице. Но бот может также добавлять на страницы ссылки, которых там не было. Это реализовано при помощи так называемых подсказок. Например, вы хотите добавить на страницу [[ru:Дом]] интервики-ссылку [[en:House]], которая, как вам кажется, должна существовать в английском проекте. Для этого следует использовать следующую команду:

interwiki.py Дом -hint:en:House

При этом, если название у двух страниц совпадает, то название интервики-ссылки в вышеприведённом примере можно опустить. Если требуется просмотреть название сразу в нескольких языковых разделах, их следует перечислить через запятую:

interwiki.py Альберт_Эйнштейн -hint:de,fr,id:Albert_Einstein

Специальные подсказки[edit]

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

  • 10: просматривается десять самых больших языковых разделов данного проекта;
  • 20, 30, 50: просматривается соответствующее число самых больших разделов;
  • all: просматриваются все разделы, имеющие хотя бы 100 статей;
  • cyril: просматриваются только кириллические разделы.

Запрос подсказок: -askhints, -untranslated, -untranslatedonly[edit]

При работе с большим количеством страниц использование подобных подсказок неэффективно. В этом случае, однако, можно использовать аргументы -askhints, -untranslated и -untranslatedonly. При использовании -askhints подсказка будет запрашиваться для каждой просматриваемой страницы. В этом случае корректными подсказками будут en:John Smith, de:nds:af:, 50: и т. п. При указании аргумента -untranslated подсказка будет запрашиваться только для страниц, не имеющих интервики-ссылок; -untranslatedonly работает аналогично, но в этом случае все остальные страницы совсем не обрабатываются.

Если при запросе подсказки ввести пустую строку, бот воспримет это как отсутствие подсказок. Если же ввести подсказку, бот запросит ещё одну и т. д. до тех пор, пока не будет введена пустая строка. Есть также возможность запросить первые строки просматриваемой статьи, введя знак вопроса «?». При повторном введении знака вопроса будет выведено больше текста и т. д.

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

Избегание нежелательных ссылок[edit]

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

  • -noredirect заставляет бота игнорировать интервики-ссылки на страницы-перенаправления, вместо того, чтобы идти по этому редиректу;
  • -neverlink:xx заставляет бота игнорировать ссылки на языковой раздел xx:;
  • -select позволяет сделать выбор, добавлять или не добавлять каждую конкретную ссылку, до того, как сделаны какие-либо изменения;
  • -ignore:xx:pagetitle исключает из добавляемых в статью ссылку на страницу xx:pagetitle и её интервики.

Список аргументов[edit]

Ниже приведён полный список всех возможных аргументов с пояснениями для тех, которые не освещены в тексте выше:

  • -array: (usage: "-array:nn" with nn a number) When working on several pages, make sure to have at least this number of pages the bot is working on, if possible. The default value is 100; when using -untranslatedonly or a similar option, you might want to set it lower.
  • -always: Всегда сохранять страницы, даже если изменился только один байт (по умолчанию страница сохраняется только если изменилась хотя бы одна ссылка)
  • -askhints: запрашивать подсказки (см. выше)
  • -async: Puts the page on a queue to be saved to wiki asynchronously. This enables loading pages during saving throtteling and gives a better performance.
  • -autonomous работать в автономном режиме (см. выше)
  • -cleanup: When an interwiki link is to be removed, just do it, don't ask for permission. This works like -force except keeping disambiguation mismatch and namespace mismatch unchanged.
  • -confirm всегда запрашивать подтверждение при совершении действий
  • -select Ask for each link whether it should be include before changing any page.
  • -days: работать со статьями о днях
  • -file: (использование: "-file:filename") работать по списку статей, расположенному в файле (названия страниц в нём должны быть в одной из следующих форм: [[проект:язык:название_страницы]], [[язык:название_страницы]] или [[название_страницы]]).
  • -force: Удалять ссылки на не существующие страницы не спрашивая разрешения
  • -hint: дать подсказку (см. выше)
  • -name: устаревшая опция, эквивалентна -hint:all
  • -namespace: номер или название пространства имён, в котором должна происходить работа, может быть указан несколько раз, не следует использовать совместно с аргументом -start (следует использовать вместо этого что-то вроде -start:Категория:!)
  • -neverlink: не ставить ссылки на указанный язык (см. выше)
  • -noauto: Do not use automatic translation (see above)
  • -nobacklink: Do not give a list of missing links on pages linked to
  • -nobell: Give no audio sign when asking for input.
  • -noredirect: пропускать страницы-перенаправления (см. выше)
  • -noshownew: Do not show new links found
  • -number: (использование: -number:nn, где nn — некое число) в комбинации с -start проверяет только первые nn статей
  • -same: устаревшая опция, эквивалентна -hint:all
  • -showpage: When using -askhints or some such option, always show the page text, even if not prompted.
  • -skipfile: (usage "-skipfile:filename") On a run using -start, do not do the pages in the file start
  • -untranslated: запрос подсказок для страниц без интервики (см. выше)
  • -untranslatedonly: запрос подсказок для страниц без интервики, остальные страницы игнорируются (см. выше)
  • -warnfile: Использовать файл логов для страниц и подсказок (см. выше)
  • -wiktionary: Special wiktionary options (see above)
  • -years: работать со страницами годов


Доступные глобальные аргументы

Эти параметры переопределяют настройки параметров в user-config.py .

Глобальные параметры
Параметр Описание Конфигурационная переменная
-dir:PATH Прочитать настройки бота из каталога, заданному переменной PATH, а не из каталога по умолчанию.  
-config:file The user config filename. Default is user-config.py. user-config.py
-lang:xx Установить язык Вики с которой вы хотите работать, перезаписывая конфигурацию из user-config.py. Вместо xx должен быть указан код языка (ru). mylang
-family:xyz Установите семейство Вики с которой вы хотите работать, например, Википедия, викисловарь, викисклад, викитрэвел, ... Переопределяет конфигурацию в user-config.py. family
-user:xyz Войдите в систему как пользователь 'xyz' вместо пользователя по умолчанию. usernames
-daemonize:xyz Немедленно возвращает управление терминалу и перенаправляет stdout и stderr в файл xyz (использовать только для ботов, которые не требуют ввода из stdin).  
-help Показать справку.  
-log Включить лог-файл, используя имя файла по умолчанию script_name-bot.log. Журналы будут храниться в подкаталоге logs. log
-log:xyz Включить лог-файл, используя 'xyz' в качестве имени файла. logfilename
-nolog Отключить лог (если он включен по умолчанию).  
-maxlag Устанавливает новый параметр - maxlag (число секунд). Отложить правки ботов в периоды лагов сервера базы данных. Значение по умолчанию устанавливается в config.py maxlag
-putthrottle:n
-pt:n
-put_throttle:n
Указать минимальное время (в секундах) которое бот будет ждать после сохранения страниц. put_throttle
-debug:item
-debug
Включить лог-файл и включить расширенные отладочные данные для компонента "item(элемент)" (для всех компонентов, если используется последующая форма). debug_log
-verbose
-v
Выводить больше отладочной информации в консоль. verbose_output
-cosmeticchanges
-cc
Переключает настройки cosmetic_changes в config.py или user-config.py в противоположные или отменяет их. Все остальные параметры и ограничения остаются без изменений. cosmetic_changes
-simulate Запрещается запись на сервер. Полезно для тестирования и отладки нового кода (если эта опция указана, не делается каких-либо реальных изменений, а только показывается, что изменилось бы). simulate
-<config var>:n Вы можете использовать все заданные числовые настройки переменных как параметр и изменить его из командной строки.