Kullanıcı:10K Şabloncusu/Kaynak Kodu

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using DotNetWikiBot;
namespace OnKSabloncusu
{
    class Program
    {
        static void Main(string[] args)
        {
            Site trViki = new Site("http://tr.wikipedia.org", "10K Şabloncusu", "PASSWORD");
            Page p = new Page(trViki, "Vikipedi:Her Vikipedi'de olması gereken maddeler/Genişletilmiş/Tarih");
            p.Load();
            List<TempArticlePaar> ListTempArticle = new List<TempArticlePaar>();
            try
            {
                using (StringReader reader = new StringReader(p.text))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (line.StartsWith("#") || line.StartsWith("##") || line.StartsWith("###") || line.StartsWith("####"))
                        {
                            TempArticlePaar oneTempArticlePaar = new TempArticlePaar();
                            oneTempArticlePaar.Template = GetTemplateName(line, "{{", "}}");
                            if (oneTempArticlePaar.Template == "Taslak" ||
                                oneTempArticlePaar.Template == "Başlangıç" ||
                                oneTempArticlePaar.Template == "C" ||
                                oneTempArticlePaar.Template == "B" ||
                                oneTempArticlePaar.Template == "KM" ||
                                oneTempArticlePaar.Template == "SM" ||
                                oneTempArticlePaar.Template == "Liste" ||
                                oneTempArticlePaar.Template == "SL")
                                // oneTempArticlePaar.Template == "" Dahil edilince değerlendirilmemiş maddelere de şablon eklenecek.
                            {
                                oneTempArticlePaar.ArticleName = GetArticleName(line, "[[", "]]");
                                // Bu Maddenin olup olmadığına bak
                                Page pLink = new Page(trViki, oneTempArticlePaar.ArticleName);
                                pLink.Load();
                                // Yönlendirme varsa ana sayfanın tartışma sayfası kullanılır.
                                if (pLink.Exists())
                                {
                                    if (IsRedirected(pLink))
                                    {
                                        oneTempArticlePaar.ArticleName = FindRedirectPage(pLink);
                                    }
                                    ListTempArticle.Add(oneTempArticlePaar);
                                }
                            }

                            // Test için sadece ilk 10 maddeyi oku
                            if (ListTempArticle.Count >= 25)
                                break;
                        }
                    }
                }

                // Oluşturduğumuz listedeki maddelerin tartışma sayfalarını okuyoruz. Eğer 10K Template'i varsa onu değiştiriyoruz, yoksa ekliyoruz.               
                foreach (TempArticlePaar tempArticle in ListTempArticle)
                {
                    Page pTartisma = new Page(trViki, "Tartışma:" + tempArticle.ArticleName);
                    bool redir = pTartisma.IsRedirect();
                    pTartisma.Load();
                    string[] setOfTemplates = pTartisma.GetTemplates(false);
                    // Tartışma sayfasında 10K Şablonu var mı? 
                    bool exist10K = false;
                    foreach (string template in setOfTemplates)
                    {
                        if (template == "VikiProje 10K")
                        {
                            // Tartışma sayfasında 10K Şablonu buldu, değiştiriyor
                            pTartisma.SetTemplateParameter("VikiProje 10K", "sınıf", tempArticle.Template, true);
                            string commentVar = tempArticle.Template;
                            if (commentVar == null || commentVar == "") { commentVar = "belirsiz"; }
                            pTartisma.Save("10K Şablonu " + commentVar + " olarak değiştirildi", true);
                            exist10K = true;
                        }
                    }
                    // Tartışma sayfasında 10K Şablonu bulamadı, Şablonu ekliyor
                    if (!exist10K)
                    {
                        pTartisma.text = AddTemplateToText(pTartisma.text, tempArticle.Template);
                        //pTartisma.AddTemplate("{{VikiProje 10K|sınıf=" + tempArticle.Template + "|önem=}}");
                        string commentVar = tempArticle.Template;
                        if (commentVar == null || commentVar == "") { commentVar = "belirsiz"; }
                        pTartisma.Save("10K Şablonu " + commentVar + " olarak eklendi", true);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
        static string GetTemplateName(string input, string start, string end)
        {
            try
            {
                int first = input.IndexOf(start);
                string returnStr = input.Substring(first + 6); // Şablon örneği: {{tl|10K Taslak}}. Baştaki ""{{10K " kısmı 6 karakter olduğu için baştan 6 karakter siliyoruz.
                int last = returnStr.IndexOf(end);
                returnStr = returnStr.Substring(0, last);
                return returnStr;
            }
            catch (Exception ex)
            {
                // Template adı girilmemiş ise exceptiona düşecek ve null değil "" döndürülecek.
                return "";
            }
        }
        static string GetArticleName(string input, string start, string end)
        {
            int first = input.IndexOf(start);
            string returnStr = input.Substring(first + 2); // Madde örneği(linkli şekilde): [[Tarih]]. Baştaki "[[" kısmı 2 karakter olduğu için baştan 2 karakter siliyoruz.
            int last = returnStr.IndexOf(end);
            returnStr = returnStr.Substring(0, last);
            if (returnStr.Contains("|"))
            {
                last = returnStr.IndexOf("|");
                returnStr = returnStr.Substring(0, last);
            }
            return returnStr;
        }
        static bool IsRedirected(Page pLink)
        {
            bool IsRedirected = false;
            if (pLink.IsRedirect())
            {
                IsRedirected = true;
            }
            else if (pLink.text.Contains("#YÖNLENDİR"))
            {
                IsRedirected = true;
            }
            return IsRedirected;
        }
        // "#YONLENDIR ya da #REDIRECT komutunun olduğu inputPage'i alıp yönlenilen sayfayı gönderir."
        static string FindRedirectPage(Page PLink)
        {
            string RedirectsTo = "";
            if (PLink.IsRedirect())
            {
                RedirectsTo = PLink.RedirectsTo();
            }
            else if (PLink.text.Contains("#YÖNLENDİR"))
            {
                int first = PLink.text.IndexOf("[[");
                string returnStr = PLink.text.Substring(first + 2);
                int last = returnStr.IndexOf("]]");
                returnStr = returnStr.Substring(0, last);
                RedirectsTo = returnStr;
            }
            return RedirectsTo;
        }
        static string AddTemplateToText(string text, string Class)
        {
            int first, last = 0;
            string returnStr = text;
            if (text.Contains("{{VikiProje GM"))
            {
                first = text.IndexOf("{{VikiProje GM");
                returnStr = text.Substring(first);
                last = returnStr.IndexOf("}}");
                returnStr = text.Substring(0, first + last + 2) + "\n{{VikiProje 10K|sınıf=" + Class + "|önem=}}\n";
                if (text.Length > (first + last + 2))
                {
                    returnStr += text.Substring(first + last + 3);
                }
            }
            else if (text.Contains("{{MaddeGeçmişi"))
            {
                first = text.IndexOf("{{MaddeGeçmişi");
                returnStr = text.Substring(first);
                last = returnStr.IndexOf("}}");
                returnStr = text.Substring(0, first + last + 2) + "\n{{VikiProje 10K|sınıf=" + Class + "|önem=}}\n";
                if (text.Length > (first + last + 2))
                {
                    returnStr += text.Substring(first + last + 3);
                }
            }
            else if (text.Contains("{{tartışma"))
            {
                first = text.IndexOf("{{tartışma");
                returnStr = text.Substring(first);
                last = returnStr.IndexOf("}}");
                returnStr = text.Substring(0, first + last + 2) + "\n{{VikiProje 10K|sınıf=" + Class + "|önem=}}\n";
                if (text.Length > (first + last + 2))
                {
                    returnStr += text.Substring(first + last + 3);
                }
            }
            else
            {
                returnStr = "{{VikiProje 10K|sınıf=" + Class + "|önem=}}\n" + text;
            }

            return returnStr;
        }
    }
    class TempArticlePaar
    {
        public string Template;
        public string ArticleName;
    }
}