Manual:Pywikibot/interwiki.py/ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Список аргументов
Ниже приведён полный список всех возможных аргументов с пояснениями для тех, которые не освещены в тексте выше:
 * -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: работать со страницами годов

interwiki.py program will write not only to the screen, but also to a file called logs/interwiki.log. You may have seen that once a subject is completed, a list of other Wikipedias interwiki links is printed preceded by 'WARNING:'. To use these lines, the interwiki.log file is more convenient than the screen.



First an explanation why this is important. Assume you have a page My Subject that links to Mon Sujet and Mijn Onderwerp. Assume also that neither the nl: nor the fr: page list your en: page: they only know each other. A run of interwiki.py on either fr: or nl: will not find your en: page. This can be referred to as the backlink problem: there can be an unknown language that link to the others, but as long as none of the others link back, there is no way of discovering the existance. Do we really need to add these backlinks manually? No, that is where the warnings come in. In the interwiki.log: If the person running interwiki.py either on fr: or on nl: would have this information, that would be sufficient to get the network of links completed.

For this reason there is another option for the interwiki.py program: In this mode the program will read the warnfile, and start to process all of the pages that are mentioned for its home language using the "does not link to" lines as hints. Some of those are uncontroversial and can still be made automatically with the -autonomous option to reduce manual work.

This process can still take a long time. If you trust the operator that sent you the log, and the log is recent, you can also do: This will not verify any of the suggestions in the warnfile, but blindly implement them at full speed, saving the Wikipedia server a lot of efforts.

Now, instead of sending the whole interwiki.log</tt> file to everyone, there is a special program to split it up: This will read your interwiki.log and create files called warning_XX.log</tt> (one for each language) that are more convenient to use. If you zip these files up and make them available somewhere on the internet, you can announce this at Interwiki bot/Warnfiles.