Обсуждение проекта:Патрулирование/UnreviewedPages
Перейти к навигации
Перейти к поиску
Исходный код бота:
private final Map<Long, String> allNamespacesNoRedirects = new HashMap<Long, String>(); private final Map<Long, String> allNamespacesRedirects = new HashMap<Long, String>(); private void start() throws Exception { MediaWikiBot bot = login(); startImpl1(bot, 0, "Articles", "статьи", false); startImpl1(bot, 6, "Files", "файлы", true); startImpl1(bot, 10, "Templates", "шаблоны", true); startImpl1(bot, 14, "Categories", "категории", true); updateStatistics( bot, "Непроверенные (неотпатрулированные) страницы (без перенаправлений), отсортированные по времени создания", "Участник:Vlsergey/UnreviewedNonRedirects", allNamespacesNoRedirects); updateStatistics( bot, "Непроверенные (неотпатрулированные) перенаправления, отсортированные по времени создания", "Участник:Vlsergey/UnreviewedRedirects", allNamespacesRedirects); Map<Long, String> total = new HashMap<Long, String>(); total.putAll(allNamespacesNoRedirects); total.putAll(allNamespacesRedirects); updateStatistics( bot, "Непроверенные (неотпатрулированные) страницы (включая перенаправления), отсортированные по времени создания", "Участник:Vlsergey/UnreviewedPages", total); } private void startImpl1(MediaWikiBot bot, int namespace, String namespaceTitle, String namespaceDesc, boolean ignoreRedirects) throws Exception { if (ignoreRedirects) { Map<Long, String> all = startImpl2(bot, namespace, FilterRedirects.ALL, "Непроверенные (неотпатрулированные) " + namespaceDesc + ", отсортированные по времени создания", "Участник:Vlsergey/UnreviewedPages/" + namespaceTitle); allNamespacesNoRedirects.putAll(all); return; } Map<Long, String> noRedirects = startImpl2( bot, namespace, FilterRedirects.NONREDIRECTS, "Непроверенные (неотпатрулированные) " + namespaceDesc + " (без перенаправлений), отсортированные по времени создания", "Участник:Vlsergey/UnreviewedNonRedirects/" + namespaceTitle); Map<Long, String> redirects = startImpl2(bot, namespace, FilterRedirects.REDIRECTS, "Непроверенные (неотпатрулированные) перенаправления на " + namespaceDesc + ", отсортированные по времени создания", "Участник:Vlsergey/UnreviewedRedirects/" + namespaceTitle); Map<Long, String> total = new HashMap<Long, String>(); total.putAll(noRedirects); total.putAll(redirects); updateStatistics( bot, "Непроверенные (неотпатрулированные) " + namespaceDesc + " (включая перенаправления), отсортированные по времени создания", "Участник:Vlsergey/UnreviewedPages/" + namespaceTitle, total); allNamespacesNoRedirects.putAll(noRedirects); allNamespacesRedirects.putAll(redirects); } private Map<Long, String> startImpl2(MediaWikiBot bot, int namespace, FilterRedirects filterRedirects, String description, String statisticsPage) throws Exception { Map<Long, String> pages = new HashMap<Long, String>(); for (Page page : bot.getUnriviewedPages(new int[]{namespace}, filterRedirects)) { pages.put(page.getPageID(), page.getTitle()); } updateStatistics(bot, description, statisticsPage, pages); return pages; } private void updateStatistics(MediaWikiBot bot, String description, String statisticsPage, Map<Long, String> pages) throws Exception { List<Long> ids = new ArrayList<Long>(pages.keySet()); Collections.sort(ids); String article = description + "\n\n"; int counter = 0; for (Long id : ids) { article += "# <small>(" + id + ")</small> [[:" + pages.get(id) + "]]\n"; counter++; if (counter >= 1000) break; } PageImpl page = new PageImpl(); page.setTitle(statisticsPage); bot.writeContentIgnoreConflicts(page, article, "Update unreviewed pages list", false); }