Wikipedia:Projekt DotNetWikiBot Framework/Innocent bot/Infoboxar från enwp

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);
				}
			}
			
		}
	}
}