コード例 #1
0
ファイル: Program.cs プロジェクト: Claymore/WikiBots
        private static bool UpdateUkWiki()
        {
            if (string.IsNullOrEmpty(Settings.Default.Login) ||
                string.IsNullOrEmpty(Settings.Default.Password))
            {
                Console.Out.WriteLine("Please add login and password to the configuration file.");
                return false;
            }

            Wiki wiki = new Wiki("http://uk.wikipedia.org/w/");
            wiki.SleepBetweenQueries = 2;
            Console.Out.WriteLine("Logging in as " + Settings.Default.Login + " to " + wiki.Uri + "...");
            try
            {
                Directory.CreateDirectory(@"Cache\uk");
                string cookieFile = @"Cache\uk\cookie.jar";
                WikiCache.Login(wiki, Settings.Default.Login, Settings.Default.Password, cookieFile);

                if (!WikiCache.LoadNamespaces(wiki, @"Cache\uk\namespaces.dat"))
                {
                    wiki.GetNamespaces();
                    WikiCache.CacheNamespaces(wiki, @"Cache\uk\namespaces.dat");
                }
            }
            catch (WikiException e)
            {
                Console.Out.WriteLine(e.Message);
                return false;
            }
            Console.Out.WriteLine("Logged in as " + Settings.Default.Login + ".");

            ArticlesForDeletionLocalization l10i = new ArticlesForDeletionLocalization();
            l10i.Category = "Категорія:Незавершені обговорення вилучення сторінок";
            l10i.Culture = "uk-UA";
            l10i.MainPage = "Вікіпедія:Статті-кандидати на вилучення";
            l10i.Template = "Вилучення статей";
            l10i.TopTemplate = "/шапка";
            l10i.BottomTemplate = "/низ";
            l10i.Results = new string[] { "Підсумок" };
            l10i.Language = "uk";
            l10i.MainPageUpdateComment = "оновлення даних";
            l10i.ArchiveTemplate = "Статті, винесені на вилучення";
            l10i.ArchivePage = "Вікіпедія:Архів запитів на вилучення/";
            l10i.EmptyArchive = "обговорення не розпочато";
            l10i.Processor = RemoveVotes;
            l10i.StrikeOutComment = "закреслення заголовків";
            l10i.AutoResultMessage = "Сторінка була вилучена {1} адміністратором [[User:{0}|]]. Була вказана наступна причина: «{2}». Це повідомлення було автоматично згенеровано ботом ~~~~.\n";
            l10i.DateFormat = "d MMMM yyyy";
            l10i.AutoResultComment = ", підбиття підсумків";
            l10i.AutoResultSection = "Підсумок";
            l10i.NotificationTemplate = "Залишено";
            l10i.EmptyResult = "Підсумок";
            l10i.ChallengedResult = "Оспоренный итог";
            l10i.ArchiveHeader = "{| class=standard\n|-\n!| Дата\n!|" + l10i.ArchiveTemplate + "\n|-\n";
            l10i.ArchiveFooter = "|}";

            Cleanup.Localization cleanupL10i = new Cleanup.Localization();
            cleanupL10i.Language = "uk";
            cleanupL10i.Category = "Категорія:Вікіпедія:Незакриті обговорення поліпшення статей";
            cleanupL10i.MainPage = "Вікіпедія:Статті, що необхідно поліпшити";
            cleanupL10i.Culture = CultureInfo.CreateSpecificCulture("uk-UA");
            cleanupL10i.Template = "Поліпшення статей";
            cleanupL10i.TopTemplate = "/шапка";
            cleanupL10i.BottomTemplate = "/низ";
            cleanupL10i.Processor = RemoveOK;
            cleanupL10i.MainPageUpdateComment = "оновлення даних";
            cleanupL10i.closedRE = new Regex(@"({{ВППОЛ-навігація}}\s*({{Закрито|Closed|закрито|closed)}})|({{(Закрито|Closed|закрито|closed)}}\s*{{ВППОЛ-навігація}})");
            cleanupL10i.CloseComment = "закрито";
            cleanupL10i.ClosePage = ClosePageUk;
            cleanupL10i.MainPageSection = "0";
            cleanupL10i.ArchiveTemplate = "Статті, що необхідно поліпшити";
            cleanupL10i.ArchivePage = "Вікіпедія:Статті, що необхідно поліпшити/Архів/";
            cleanupL10i.EmptyArchive = "обговорення не розпочато";
            cleanupL10i.NavigationTemplate = "ВППОЛ-навігація";
            cleanupL10i.ArchiveHeader = "{| class=standard\n|-\n!| Дата\n!|" + cleanupL10i.ArchiveTemplate + "\n|-\n";
            cleanupL10i.ArchiveFooter = "|}";

            List<IModule> modules = new List<IModule>()
            {
                new Cleanup(cleanupL10i),
                new ArticlesForDeletion(l10i),
            };

            for (int i = 0; i < modules.Count; ++i)
            {
                try
                {
                    modules[i].Run(wiki);
                }
                catch (WikiException)
                {
                    return false;
                }
                catch (WebException)
                {
                    return false;
                }
            }

            Console.Out.WriteLine("Done.");
            return true;
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: Claymore/WikiBots
        private static bool UpdateRuWiki()
        {
            if (string.IsNullOrEmpty(Settings.Default.Login) ||
                string.IsNullOrEmpty(Settings.Default.Password))
            {
                Console.Out.WriteLine("Please add login and password to the configuration file.");
                return false;
            }

            Wiki wiki = new Wiki("http://ru.wikipedia.org/w/");
            wiki.SleepBetweenQueries = 2;
            Console.Out.WriteLine("Logging in as " + Settings.Default.Login + " to " + wiki.Uri + "...");
            try
            {
                Directory.CreateDirectory(@"Cache\ru");
                string cookieFile = @"Cache\ru\cookie.jar";
                WikiCache.Login(wiki, Settings.Default.Login, Settings.Default.Password, cookieFile);

                if (!WikiCache.LoadNamespaces(wiki, @"Cache\ru\namespaces.dat"))
                {
                    wiki.GetNamespaces();
                    WikiCache.CacheNamespaces(wiki, @"Cache\ru\namespaces.dat");
                }
            }
            catch (WikiException e)
            {
                Console.Out.WriteLine(e.Message);
                return false;
            }
            Console.Out.WriteLine("Logged in as " + Settings.Default.Login + ".");

            string errorFileName = @"Cache\ru\Errors.txt";

            Cleanup.Localization cleanupL10i = new Cleanup.Localization();
            cleanupL10i.Language = "ru";
            cleanupL10i.Category = "Категория:Википедия:Незакрытые обсуждения статей для улучшения";
            cleanupL10i.MainPage = "Википедия:К улучшению";
            cleanupL10i.Culture = CultureInfo.CreateSpecificCulture("ru-RU");
            cleanupL10i.SectionTitle = "К улучшению";
            cleanupL10i.Template = "Улучшение статей/День";
            cleanupL10i.TopTemplate = "Улучшение статей/Статьи, вынесенные на улучшение";
            cleanupL10i.BottomTemplate = "Википедия:К улучшению/Подвал";
            cleanupL10i.Processor = RemoveOK;
            cleanupL10i.MainPageUpdateComment = "обновление";
            cleanupL10i.closedRE = new Regex(@"({{ВПКУЛ-(Н|н)авигация}}\s*{{(Закрыто|Closed|закрыто|closed)}})|({{(Закрыто|Closed|закрыто|closed)}}\s*{{ВПКУЛ-(Н|н)авигация}})");
            cleanupL10i.CloseComment = "обсуждение закрыто";
            cleanupL10i.ClosePage = ClosePageRu;
            cleanupL10i.MainPageSection = "1";
            cleanupL10i.ArchiveTemplate = "Статьи, вынесенные на улучшение";
            cleanupL10i.ArchivePage = "Википедия:К улучшению/Архив/";
            cleanupL10i.EmptyArchive = "нет обсуждений";
            cleanupL10i.NavigationTemplate = "ВПКУЛ-Навигация";
            cleanupL10i.ArchiveFooter = "{{Улучшение статей/Конец}}";
            cleanupL10i.ArchiveHeader = "{{Навигация по архиву КУЛ}}\n{{Улучшение статей/Начало}}";

            ArticlesForDeletionLocalization l10i = new ArticlesForDeletionLocalization();
            l10i.Category = "Категория:Википедия:Незакрытые обсуждения удаления страниц";
            l10i.Culture = "ru-RU";
            l10i.MainPage = "Википедия:К удалению";
            l10i.Template = "Удаление статей";
            l10i.TopTemplate = "/Заголовок";
            l10i.BottomTemplate = "/Подвал";
            l10i.Results = new string[] { "Итог", "Общий итог", "Автоматический итог", "Автоитог" };
            l10i.Language = "ru";
            l10i.MainPageUpdateComment = "обновление";
            l10i.ArchiveTemplate = "Статьи, вынесенные на удаление";
            l10i.ArchivePage = "Википедия:Архив запросов на удаление/";
            l10i.EmptyArchive = "нет обсуждений";
            l10i.Processor = null;
            l10i.StrikeOutComment = "зачёркивание заголовков";
            l10i.AutoResultMessage = "Страница была удалена {1} участником [[User:{0}|]]. Была указана следующая причина: «{2}». Данное сообщение было автоматически сгенерировано ботом ~~~~.\n";
            l10i.DateFormat = "d MMMM yyyy в HH:mm (UTC)";
            l10i.AutoResultComment = " и подведение итогов";
            l10i.AutoResultSection = "Автоитог";
            l10i.NotificationTemplate = "Оставлено";
            l10i.EmptyResult = "Пустой итог";
            l10i.ChallengedResult = "Оспоренный итог";
            l10i.ArchiveHeader = "{{Навигация по архиву КУ}}\n{{Удаление статей/Начало}}\n";
            l10i.ArchiveFooter = "{{Удаление статей/Конец}}";

            List<IModule> modules = new List<IModule>()
            {
                new CategoriesForDiscussion(),
                new DeletionReview(),
                new ProposedSplits(),
                new Cleanup(cleanupL10i),
                new ProposedMerges(),
                new ArticlesForDeletion(l10i),
                new IncubatorReview("Википедия:Проект:Инкубатор/Мини-рецензирование"),
                new IncubatorReview("Википедия:Проект:Инкубатор/Мини-рецензирование/Наука"),
                new IncubatorReview("Википедия:Проект:Инкубатор/Стабы"),
                new RequestedMoves()
            };

            if (!File.Exists(errorFileName))
            {
                using (FileStream stream = File.Create(errorFileName)) { }
            }

            int lastIndex = 0;
            using (TextReader streamReader = new StreamReader(errorFileName))
            {
                string line = streamReader.ReadToEnd();
                if (!string.IsNullOrEmpty(line))
                {
                    lastIndex = int.Parse(line);
                }
            }

            for (int i = lastIndex; i < modules.Count; ++i)
            {
                try
                {
                    modules[i].Run(wiki);
                }
                catch (WikiException)
                {
                    using (TextWriter streamWriter = new StreamWriter(errorFileName))
                    {
                        streamWriter.Write(i);
                    }
                    return false;
                }
                catch (WebException)
                {
                    using (TextWriter streamWriter = new StreamWriter(errorFileName))
                    {
                        streamWriter.Write(i);
                    }
                    return false;
                }
            }

            if (File.Exists(errorFileName))
            {
                File.Delete(errorFileName);
            }

            Console.Out.WriteLine("Done.");
            return true;
        }