Kullanıcı:10K Şabloncusu/Kaynak Kodu
Görünüm
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; } }