Wikipedia:Projekt DotNetWikiBot Framework/Innocent bot/Infoboxar från enwp
Utseende
using System; using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Collections; using System.Xml; using System.Threading; using DotNetWikiBot; class MyBot : Bot { public static string oversatt(string ord, Site siteut) { if(ord.IndexOf("[[") != -1) { int cursor = 0; while(ord.IndexOf("[[", cursor) != -1) { string s2 = ord.Substring(ord.IndexOf("[[", cursor)+2); s2 = s2.Substring(0,s2.IndexOf("]]")); if(s2.IndexOf("|") != -1) s2 = s2.Substring(0,s2.IndexOf("|")); Page pen2 = new Page(siteut, s2); pen2.Load(); if(pen2.text.ToLower().IndexOf("#redirect") != -1) { string s3 = pen2.text.Substring(pen2.text.IndexOf("[[")+2); s3 = s3.Substring(0,s3.IndexOf("]]")); pen2.title = s3; pen2.Load(); } if(pen2.Exists()) { if(pen2.text.IndexOf("[[sv:") != -1) { string s3 = pen2.text.Substring(pen2.text.IndexOf("[[sv:")+5); s3 = s3.Substring(0,s3.IndexOf("]]")); string s4 = ""; if(s3.IndexOf(",") != -1) { if(ord.IndexOf(",", cursor)<ord.IndexOf("]]", cursor)) s4 = "|"; } if(s3.IndexOf("(") != -1) { if(ord.IndexOf("(", cursor)<ord.IndexOf("]]", cursor)) s4 = "|"; } string s5 = ord.Substring(0,ord.IndexOf("[[", cursor)+2)+s3+s4; ord = ord.Substring(0,ord.IndexOf("[[", cursor)+2)+s3+s4+ord.Substring(ord.IndexOf("]]", cursor+s2.Length)); cursor = s5.Length; } else { if(s2.IndexOf(",")!=-1) s2 = s2.Substring(0,s2.IndexOf(",")).Trim(); if(s2.IndexOf("(")!=-1) s2 = s2.Substring(0,s2.IndexOf("(")).Trim(); string s5 = ord.Substring(0,ord.IndexOf("[[", cursor))+s2; ord = ord.Substring(0,ord.IndexOf("[[", cursor))+s2+ord.Substring(ord.IndexOf("]]", cursor)+2); cursor = s5.Length; } } else { if(s2.IndexOf(",")!=-1) s2 = s2.Substring(0,s2.IndexOf(",")).Trim(); if(s2.IndexOf("(")!=-1) s2 = s2.Substring(0,s2.IndexOf("(")).Trim(); string s5 = ord.Substring(0,ord.IndexOf("[[", cursor))+s2; ord = ord.Substring(0,ord.IndexOf("[[", cursor))+s2+ord.Substring(ord.IndexOf("]]", cursor)+2); cursor = s5.Length; } } } return ord; } public static string relationer(string a) { a = a.Replace("children", "barn"); a = a.Replace("child", "barn"); a = a.Replace("his death", "hans död"); a = a.Replace("her death", "hennes död"); a = a.Replace("death", "död"); a = a.Replace("present", "nutid"); a = a.Replace("divorced", "skild"); return a; } public static string refrens(string a) { if(a.IndexOf("<ref name") != -1) { int s = a.IndexOf("<ref name"); int t = a.IndexOf("/>", s); if(t != -1) a = a.Substring(0,s)+a.Substring(t+2); } return a; } public static void Main() { Site site = new Site("http://sv.wikipedia.org", "Innocent bot", "********"); Site site2 = new Site("http://en.wikipedia.org", "Innocent bot", "********"); Site site3 = new Site("http://commons.wikimedia.org", "Innocent bot", "********"); PageList pl = new PageList(site); pl.FillFromPageLinks("Användare:Jopparn/Biografier utan infobox"); pl.RemoveNamespaces(new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,100,101}); pl.Sort(); foreach (Page myPage in pl) { myPage.Load(); string orginal = myPage.text; string en = myPage.text.Substring(myPage.text.IndexOf("[[en:")+5); en = en.Substring(0,en.IndexOf("]]")); Page pen = new Page(site2, en); if(myPage.text.IndexOf("[[en:") != -1) { pen.Load(); } if(Mallhantering.finnsmallen(pen.text, "Template:Infobox person") && !Mallhantering.finnsmallen(myPage.text, "Mall:Infobox Skådespelare") && myPage.text.IndexOf("[[en:") != -1) { string fil = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "image"); if(fil != "") { Page pcom = new Page(site3, "File:"+fil); pcom.Load(); if(!pcom.Exists()) fil = ""; } string död = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "death_date"); if(död != "") { if(Mallhantering.finnsmallen(död, "Template:Death date and age")) { string s = "{{Död datum och ålder|"; s = s + Mallhantering.Värdeavparameter(död, "Death date and age", 0, "1")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Death date and age", 0, "2")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Death date and age", 0, "3")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Death date and age", 0, "4")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Death date and age", 0, "5")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Death date and age", 0, "6")+"}}"; död = s; } if(Mallhantering.finnsmallen(död, "Template:Dda")) { string s = "{{Död datum och ålder|"; s = s + Mallhantering.Värdeavparameter(död, "Dda", 0, "1")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Dda", 0, "2")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Dda", 0, "3")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Dda", 0, "4")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Dda", 0, "5")+"|"; s = s + Mallhantering.Värdeavparameter(död, "Dda", 0, "6")+"}}"; död = s; } } död = refrens(död); string född = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "birth_date"); if(född != "") { if(Mallhantering.finnsmallen(född, "Template:Birth date and age")) { född = född.Replace("Birthdate and age", "Birth date and age"); född = född.Replace("birthdate and age", "Birth date and age"); if(död == "") { string s = "{{Ålder|"; s = s + Mallhantering.Värdeavparameter(född, "Birth date and age", 0, "1")+"|"; s = s + Mallhantering.Värdeavparameter(född, "Birth date and age", 0, "2")+"|"; s = s + Mallhantering.Värdeavparameter(född, "Birth date and age", 0, "3")+"}}"; född = s; } else { string s = ""; s = s + Mallhantering.Värdeavparameter(född, "Birth date and age", 0, "3")+" "; s = s + "{{byt:Användare:Lavallen/Month|"+Mallhantering.Värdeavparameter(född, "Birth date and age", 0, "2")+"}} "; s = s + Mallhantering.Värdeavparameter(född, "Birth date and age", 0, "1"); född = s; } } if(Mallhantering.finnsmallen(född, "Template:Birth date")) { if(död == "") { string s = "{{Ålder|"; s = s + Mallhantering.Värdeavparameter(född, "Birth date", 0, "1")+"|"; s = s + Mallhantering.Värdeavparameter(född, "Birth date", 0, "2")+"|"; s = s + Mallhantering.Värdeavparameter(född, "Birth date", 0, "3")+"}}"; född = s; } else { string s = ""; s = s + Mallhantering.Värdeavparameter(född, "Birth date", 0, "3")+" "; s = s + "{{byt:Användare:Lavallen/Month|"+Mallhantering.Värdeavparameter(född, "Birth date", 0, "2")+"}} "; s = s + Mallhantering.Värdeavparameter(född, "Birth date", 0, "1"); född = s; } } } född = refrens(född); string namn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "name"); if(namn == "") { namn = myPage.title; if(namn.IndexOf(",") != -1) namn = namn.Substring(namn.IndexOf(",")).Trim(); if(namn.IndexOf("(") != -1) namn = namn.Substring(namn.IndexOf("(")).Trim(); } string födelsenamn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "birth_name"); if(födelsenamn == "") födelsenamn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "birthname"); födelsenamn = refrens(födelsenamn); string andranamn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "othername"); if(andranamn == "") andranamn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "other names"); if(andranamn == "") andranamn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "other_names"); if(andranamn == "") andranamn = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "alias"); andranamn = refrens(andranamn); string hemsida = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "website"); if(hemsida == "") hemsida = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "homepage"); if(hemsida == "") hemsida = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "URL"); string yearsactive = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "years_active"); if(yearsactive == "") yearsactive = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "yearsactive"); if(yearsactive == "") yearsactive = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "years active"); yearsactive = yearsactive.Replace("present", "nutid"); yearsactive = yearsactive.Replace("Present", "nutid"); yearsactive = refrens(yearsactive); string IMDB = ""; if(Mallhantering.finnsmallen(myPage.text, "Mall:IMDb-namn")) { IMDB = Mallhantering.Värdeavparameter(myPage.text, "IMDb-namn", 0, "id"); } if(IMDB == "" && Mallhantering.finnsmallen(pen.text, "IMDb name")) { IMDB = Mallhantering.Värdeavparameter(pen.text, "IMDb name", 0, "id"); if(IMDB == "") IMDB = Mallhantering.Värdeavparameter(pen.text, "IMDb name", 0, "1"); if(IMDB == "") IMDB = Mallhantering.Värdeavparameter(pen.text, "Imdb name", 0, "1"); } if(Mallhantering.finnsmallen(myPage.text, "Mall:Imdb namn")) { IMDB = Mallhantering.Värdeavparameter(myPage.text, "imdb namn", 0, "id"); IMDB = Mallhantering.Värdeavparameter(myPage.text, "Imdb namn", 0, "id"); } if(IMDB == "" && myPage.text.IndexOf("http://www.imdb.com/name/nm") != -1) { IMDB = myPage.text.Substring(myPage.text.IndexOf("www.imdb.com/name/nm")+20); IMDB = IMDB.Substring(0,IMDB.IndexOf(" ")); if(IMDB.IndexOf("/") != -1) IMDB = IMDB.Substring(0,IMDB.IndexOf("/")); } if(IMDB == "" && pen.text.IndexOf("http://www.imdb.com/name/nm") != -1) { IMDB = pen.text.Substring(pen.text.IndexOf("www.imdb.com/name/nm")+20); IMDB = IMDB.Substring(0,IMDB.IndexOf(" ")); if(IMDB.IndexOf("/") != -1) IMDB = IMDB.Substring(0,IMDB.IndexOf("/")); } if(IMDB != "") { myPage.RemoveTemplate("IMDb-namn"); myPage.RemoveTemplate("Imdb namn"); myPage.text = myPage.text.Replace("\n* \n", "\n"); myPage.text = myPage.text.Replace("\n*\n", "\n"); } string SFDB = ""; if(Mallhantering.finnsmallen(myPage.text, "Mall:SFDb")) { IMDB = Mallhantering.Värdeavparameter(myPage.text, "SFDb", 0, "person"); } if(SFDB != "") { myPage.RemoveTemplate("SFDb"); myPage.text = myPage.text.Replace("\n* \n", "\n"); myPage.text = myPage.text.Replace("\n*\n", "\n"); } string make = ""; if(myPage.text.IndexOf("[[Kategori:Kvinnor]]") != -1) { make = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "spouse"); if(make != "") { make = make.Replace("{{marriage|", "{{byt:Användare:Lavallen/Marriage|"); make = make.Replace("{{Marriage|", "{{byt:Användare:Lavallen/Marriage|"); make = oversatt(make, site2); } } string maka = ""; if(myPage.text.IndexOf("[[Kategori:Män]]") != -1) { maka = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "spouse"); if(maka != "") { maka = maka.Replace("{{marriage|", "{{byt:Användare:Lavallen/Marriage|"); maka = maka.Replace("{{Marriage|", "{{byt:Användare:Lavallen/Marriage|"); maka = oversatt(maka, site2); } } string partner = ""; partner = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "partner"); if(partner == "") partner = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "domesticpartner"); if(partner != "") { partner = partner.Replace("{{marriage|", "{{byt:Användare:Lavallen/Marriage|"); partner = partner.Replace("{{Marriage|", "{{byt:Användare:Lavallen/Marriage|"); partner = oversatt(partner, site2); } make = relationer(make); make = refrens(make); maka = relationer(maka); maka = refrens(maka); partner = relationer(partner); partner = refrens(partner); string födelseplats = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "birth_place"); födelseplats = oversatt(födelseplats, site2); födelseplats = födelseplats.Replace("U.S.", "USA"); födelseplats = refrens(födelseplats); string dödsplats = Mallhantering.Värdeavparameter(pen.text, "Infobox person", 0, "death_place"); dödsplats = oversatt(dödsplats, site2); dödsplats = dödsplats.Replace("U.S.", "USA"); dödsplats = refrens(dödsplats); myPage.text = "{{Infobox Skådespelare\n| namn = \n| bild = \n| bildstorlek = \n| bildtext = \n| födelsenamn = \n| födelsedatum = \n| plats = \n| dödsdatum = \n| dödsplats = \n| andra namn = \n| år aktiv = \n| make = \n| maka = \n| partner = \n| hemsida = \n| noterbara roller = \n| guldbaggen = \n| kristallen = \n| oscars = \n| emmyawards = \n| tonyawards = \n| goldenglobeawards = \n| baftaawards = \n| imdb = \n| sfdb = \n}}\n\n"+myPage.text; myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "plats", födelseplats); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "dödsplats", dödsplats); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "namn", namn); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "make", make); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "maka", maka); if(make != "" && maka == "") myPage.text = myPage.text.Replace("\n| maka = ", ""); if(maka != "" && make == "") myPage.text = myPage.text.Replace("\n| make = ", ""); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "partner", partner); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "bild", fil); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "födelsedatum", född); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "dödsdatum", död); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "födelsenamn", födelsenamn); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "andra namn", andranamn); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "hemsida", hemsida); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "år aktiv", yearsactive); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "imdb", IMDB); myPage.text = Mallhantering.sättvärde(myPage.text, "Infobox Skådespelare", 0, "sfdb", SFDB); string slask = myPage.text; slask = Regex.Replace(slask, "\n==(?![ =])", "\n== "); slask = Regex.Replace(slask, "(?<![ =])==\n", " ==\n"); slask = Regex.Replace(slask, "\n===(?![ =])", "\n=== "); slask = Regex.Replace(slask, "(?<![ =])===\n", " ===\n"); slask = Regex.Replace(slask, "\n====(?![ =])", "\n==== "); slask = Regex.Replace(slask, "(?<![ =])====\n", " ====\n"); slask = slask.Replace("{{DEFAULTSORT:", "{{STANDARDSORTERING:"); slask = slask.Replace("File:", "Fil:"); slask = slask.Replace("file:", "Fil:"); slask = slask.Replace("Bild:", "Fil:"); slask = slask.Replace("bild:", "Fil:"); slask = slask.Replace("Image:", "Fil:"); slask = slask.Replace("image:", "Fil:"); slask = slask.Replace("\n* ", "\n*"); //Ta bort alla befintliga mellanslag efter * slask = slask.Replace("\n*", "\n* "); //Lägg till ett mellanslag efter alla * myPage.text = slask; myPage.RemoveTemplate("Faktamall saknas"); Bot.editComment = "Lägger in {{[[Mall:Infobox Skådespelare|Infobox Skådespelare]]}} med basinfo från [[:en:"+pen.title+"]]"; Bot.isMinorEdit = false; myPage.Save(); Console.WriteLine(myPage.text); myPage.Load(); if(myPage.text != orginal) { Bot.Wait(5); Page myPage2 = new Page(site, "Användare:Jopparn/Biografier utan infobox"); myPage2.Load(); myPage2.text = myPage2.text.Replace("]] ", "]]"); myPage2.text = myPage2.text.Replace("# [[:"+myPage.title+"]]\n", ""); Bot.editComment = "Artikel [["+myPage.title+"]] har redan en mall."; Bot.isMinorEdit = true; myPage2.Save(); Page myPage3 = new Page(site, "Användare:Jopparn/Biografier med infobox"); myPage3.Load(); myPage3.text = myPage3.text + "\n# [[:"+myPage.title+"]]"; Bot.editComment = "Artikel [["+myPage.title+"]] har redan en mall."; Bot.isMinorEdit = true; myPage3.Save(); Bot.Wait(25); } } else { if(Mallhantering.finnsmallen(myPage.text, "Mall:Infobox Skådespelare")) { Page myPage2 = new Page(site, "Användare:Jopparn/Biografier utan infobox"); myPage2.Load(); myPage2.text = myPage2.text.Replace("]] ", "]]"); myPage2.text = myPage2.text.Replace("# [[:"+myPage.title+"]]\n", ""); Bot.editComment = "Artikel [["+myPage.title+"]] har redan en mall."; Bot.isMinorEdit = true; myPage2.Save(); Page myPage3 = new Page(site, "Användare:Jopparn/Biografier med infobox"); myPage3.Load(); myPage3.text = myPage3.text + "\n# [[:"+myPage.title+"]]"; Bot.editComment = "Artikel [["+myPage.title+"]] har redan en mall."; Bot.isMinorEdit = true; myPage3.Save(); Bot.Wait(5); } } } } }