Обсуждение проекта:Патрулирование/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);
    }