Hoppa till innehållet

Wikipediadiskussion:Projekt DotNetWikiBot Framework

Sidans innehåll stöds inte på andra språk.
Från Wikipedia

wikin på SourceForge.Net

[redigera wikitext]

För att kunna redigera under ett användarnamn räcker det att skapa sig ett på sourceforge.net och logga in på detta. GameOn 9 december 2010 kl. 09.00 (CET)[svara]

Inte den mest aktiva wiki [1]. -- Lavallen 9 december 2010 kl. 09.14 (CET)[svara]
Väl medveten om det, men vi kan väl se till att få upp några exempel där också så kanske fler använder sig av detta API. Jag har för övrigt lagt upp en patch med i princip de skillnader som fanns i koden som jag mailade dig. Och när jag ändå fick tummen ur och skapade mig ett konto så passade jag på att fixa det du bett LA2 och MagnusA om också. GameOn 9 december 2010 kl. 09.18 (CET)[svara]
Ligger pywikipedia också på sourceforge.net?
Ja, det är iofs klart att det gör... -- Lavallen 9 december 2010 kl. 19.51 (CET)[svara]
Det finns ju andra ställen än sourceforge. Patchen till dotnetwiki har för övrigt accepterats så den kommer väl med i någon kommande version. GameOn 10 december 2010 kl. 10.02 (CET)[svara]

Sortering av iw

[redigera wikitext]
		string a = "'ace', 'af', 'ak', 'als', 'am', 'ang', 'ab', 'ar', 'an', 'arc', 'roa-rup', 'frp', 'as', 'ast', 'gn', 'av', 'ay', 'az', 'bm', 'bn', 'bjn', 'zh-min-nan', 'nan', 'map-bms', 'ba', 'be', 'be-x-old', 'bh', 'bcl', 'bi', 'bar', 'bo', 'bs', 'br', 'bg', 'bxr', 'ca', 'cv', 'ceb', 'cs', 'ch', 'cbk-zam', 'ny', 'sn', 'tum', 'cho', 'co', 'cy', 'da', 'dk', 'pdc', 'de', 'dv', 'nv', 'dsb', 'dz', 'mh', 'et', 'el', 'eml', 'en', 'myv', 'es', 'eo', 'ext', 'eu', 'ee', 'fa', 'hif', 'fo', 'fr', 'fy', 'ff', 'fur', 'ga', 'gv', 'gag', 'gd', 'gl', 'gan', 'ki', 'glk', 'gu', 'got', 'hak', 'xal', 'ko', 'ha', 'haw', 'hy', 'hi', 'ho', 'hsb', 'hr', 'io', 'ig', 'ilo', 'bpy', 'id', 'ia', 'ie', 'iu', 'ik', 'os', 'xh', 'zu', 'is', 'it', 'he', 'jv', 'kl', 'kn', 'kr', 'pam', 'kbd', 'krc', 'ka', 'ks', 'csb', 'kk', 'kw', 'rw', 'ky', 'rn', 'sw', 'kv', 'kg', 'ht', 'ku', 'kj', 'mrj', 'lad', 'lbe', 'lo', 'la', 'ltg', 'lv', 'lb', 'lt', 'lij', 'li', 'ln', 'jbo', 'lg', 'lmo', 'hu', 'mk', 'mg', 'ml', 'mt', 'mi', 'mr', 'arz', 'mzn', 'ms', 'cdo', 'mwl', 'mdf', 'mo', 'mn', 'mus', 'my', 'nah', 'na', 'fj', 'nl', 'nds-nl', 'cr', 'ne', 'new', 'ja', 'nap', 'ce', 'frr', 'pih', 'no', 'nb', 'nn', 'nrm', 'nov', 'ii', 'oc', 'mhr', 'or', 'om', 'ng', 'hz', 'uz', 'pa', 'pi', 'pfl', 'pag', 'pnb', 'pap', 'ps', 'koi', 'km', 'pcd', 'pms', 'tpi', 'nds', 'pl', 'tokipona', 'tp', 'pnt', 'pt', 'aa', 'kaa', 'crh', 'ty', 'ksh', 'ro', 'rmy', 'rm', 'qu', 'rue', 'ru', 'sah', 'se', 'sm', 'sa', 'sg', 'sc', 'sco', 'stq', 'st', 'tn', 'sq', 'scn', 'si', 'simple', 'sd', 'ss', 'sk', 'cu', 'sl', 'szl', 'so', 'ckb', 'srn', 'sr', 'sh', 'su', 'fi', 'sv', 'tl', 'ta', 'kab', 'roa-tara', 'tt', 'te', 'tet', 'th', 'ti', 'tg', 'to', 'chr', 'chy', 've', 'tr', 'tk', 'tw', 'udm', 'bug', 'uk', 'ur', 'ug', 'za', 'vec', 'vi', 'vo', 'fiu-vro', 'wa', 'zh-classical', 'vls', 'war', 'wo', 'wuu', 'ts', 'yi', 'yo', 'zh-yue', 'diq', 'zea', 'bat-smg', 'zh', 'zh-tw', 'zh-cn'"; 
		p.Load();
		string[] iw = p.GetInterWikiLinks();
		if(iw.Length>1)
		{
			int i = 0;
			int j = 0;
			for(i=0; i<=iw.Length-2; i++)
			{
				for(j=i+1; j<=iw.Length-1; j++)
				{
					string prei = "'"+iw[i].Substring(0,iw[i].IndexOf(":"))+"'";
					string prej = "'"+iw[j].Substring(0,iw[j].IndexOf(":"))+"'";
					if(a.IndexOf(prei)>a.IndexOf(prej))
					{
						string slask = iw[i];
						iw[i] = iw[j];
						iw[j] = slask;
						p.text = p.text.Replace("[["+iw[i]+"]]", "XYZPLACEHOLDERXYZ");
						p.text = p.text.Replace("[["+iw[j]+"]]", "ZYXPLACEHOLDERZYX");
						p.text = p.text.Replace("XYZPLACEHOLDERXYZ", "[["+iw[j]+"]]");
						p.text = p.text.Replace("ZYXPLACEHOLDERZYX", "[["+iw[i]+"]]");
					}
				}
			}
		}
		Bot.editComment = "testar";
		Bot.isMinorEdit = true;
		p.Save();

Struntade i Sortinterwiki (blev inte klok på den) och byggde ovanstående. Här syns resultatet. -- Lavallen 9 december 2010 kl. 19.49 (CET)[svara]

Nu tycker väl jag att vi bör lägga in sorteringen i API-t istället för att behöva anropa en egen funktion. Får ta en titt på det vid tillfälle, Fernbom2 påminde mig precis om OS-deltagarna som jag glömt bort att göra klart. GameOn 9 december 2010 kl. 22.22 (CET)[svara]

Jag har för Wikisource skapat denna kod.

Det finns ett par saker som retar mig. Jag skannar nu alla undermappar efter filer med .txt-extension. Det borde räcka med en, men jag har inte lyckats lista fram hur man gör, trots en hyfsad manual.

När en fil har använts, ska den flyttas ner till en undermapp, för att minimera risken att en fil dubbelkörs. - Det har jag inte heller lyckats med... -- Lavallen 12 december 2010 kl. 20.12 (CET)[svara]

Jag har ändrat lite i koden. Jag hänger inte med på vad du menar med "Det borde räcka med en..." meningen så det är troligen inte fixat. Jag tog också hand om sökningen av filer på ett lite smidigare sätt. GameOn 13 december 2010 kl. 07.13 (CET)[svara]
Nu söks ju alla undermappar till Current Directory igenom efter filer. Det borde räcka att genomsöka en enda undermapp med namnet "OCR" tex.... -- Lavallen 13 december 2010 kl. 08.25 (CET)[svara]
Troligen åtgärdat, noteras kan att jag inte provkört någon bit av koden så fel kan ha smugit sig in. Jag måste dock ge mig av så förhoppningsvis kan du hitta och reda ut dem själv, annars får vi ta det framöver. GameOn 13 december 2010 kl. 08.35 (CET)[svara]
Det funkar nu, utom en sak, att flytta filerna efteråt. -- Lavallen 13 december 2010 kl. 09.15 (CET)[svara]
Ett bevis på att det funkar! -- Lavallen 13 december 2010 kl. 09.21 (CET)[svara]
Försökte mig på en ny variant, borde som sagt kanske kompilera koden själv för att se vad som är fel. GameOn 13 december 2010 kl. 15.12 (CET)[svara]
Nu klagar han över att filen inte finns (vid själva flytten alltså), och av felmeddelandet så letar han i samma mapp som .cs-filen finns, dvs det som är Current.Directory från början... -- Lavallen 13 december 2010 kl. 15.35 (CET)[svara]

Invånarantalet i geografiartiklar

[redigera wikitext]

Jag tänkte mig att man tar informationen ur XLS filen och sedan skapar tabellerna med detta som grund. Problemet som jag ser är att det borde kunna finnas två tätorter med samma namn, så man får kontrollera med ex. kategorierna eller dylikt att det blir rätt. GameOn 13 december 2010 kl. 17.34 (CET)[svara]

Det är inte ovanligt alls att det finns orter där namngivningen mellan SCB och Wikipedia inte alls stämmer, varför jag gärna ser att alla tätortsartiklar får en tätortskod. Det finns tom ortsnamn där samma kommun har mer än en ort med samma namn.
Tätortskoden finns ju i den tabell du hänvisade till, så det är inte omöjligt att få fram ur den och jämföra.
Det finns vissa specialfall, där en artikel handlar om flera tätorter/småorter. Bispgården är ett klassist exempel som inte ligger så långt ifrån där jag bor. -- Lavallen 13 december 2010 kl. 17.47 (CET)[svara]
Med Wikipedia:Projekt DotNetWikiBot Framework/Innocent bot/Invånarhistorik så är det hittills ganska lovande. Vad är det för ngt som används som tusenavgränsare i filen? -- Lavallen 13 december 2010 kl. 18.22 (CET)[svara]
Glöm det förresten, jag hittade ett sätt att trolla bort tusenavgränsarna redan i OpenOffice. -- Lavallen 13 december 2010 kl. 18.54 (CET)[svara]
Senaste versionen av koden ovan plockar nu fram dessa siffror för varje tätort där tätortskoden finns i Mall:Ortsfakta Sverige, men gör än så länge inget med dessa siffror. -- Lavallen 13 december 2010 kl. 21.23 (CET)[svara]
Det går framåt, men jag har en siffra i "int" som jag inte lyckats konvertera till "string"?! -- Lavallen 14 december 2010 kl. 18.21 (CET)[svara]
Jag vet inte om jag löst ovanstående än, dessutom verkar det som att koden inte är "snäll" vid de mellanslag som finns i vissa mall-parametrar... Se Ib's bidragshitorik. -- Lavallen 14 december 2010 kl. 21.08 (CET)[svara]
Konvertering först så ska jag ta en titt på historiken sedan. Enkelt exempel:
int i = 102;
Console.WriteLine(i.ToString());
GameOn 15 december 2010 kl. 07.22 (CET)[svara]
Är det det du rättar här du tänker på när du pratar om mellanslagen eller är det ett annat mellanslagsfel? GameOn 15 december 2010 kl. 07.27 (CET)[svara]
Efter att ha titta på Bybrunnen så uppfattar jag det som det. Men hur ser din csv-fil ut? Har den mellanslag, så inte felet kommer redan där (ser inget uppenbart i koden)? Och borde inte fotnoten vara i formen av en webbref? Jag hinner tyvärr inte hjälpa till alls så mycket som jag skulle vilja (det finns ju ett liv utanför wikipedia) så här inför jul tyvärr. GameOn 15 december 2010 kl. 07.35 (CET)[svara]
Ja, det är de mellanslagsfelen som blir, csv-filen har mellanslagsfel, men jag vet ju inte vilken typ av mellanslag den har. Jag har någon mer ide jag ska testa. Och ja, en webbref för referensen vore en bra idé, har inte hunnit så långt ännu. Fotnoten (till skillnad från referensen) kommer mer eller mindre rå från csv-filen.
Och ja, IRL är ett problem, synd att kloningstekniken inte utvecklats längre än den har... -- Lavallen 15 december 2010 kl. 09.17 (CET)[svara]
Efter att jag numer istället hämtar data ut en UTF-8-kodad .txt-fil, så försvinner många av problemen. -- Lavallen 15 december 2010 kl. 15.24 (CET)[svara]
Bra. Jag känner dock att det är så mycket att stå i runt julfirande och resande till släktingar etc. så jag tar nog en paus fram till mellandagarna, ev. kommer jag inte in förrän efter nyår. Akuta frågor (hur de nu blir det vet jag inte riktigt) kan du maila mig om. Jag önskar dig och fru Lavallen en God Jul och ett Gott Nytt År! GameOn 16 december 2010 kl. 07.49 (CET)[svara]

Formuleringen:

foreach(string kod in p.GetTemplateParameter("Ortsfakta Sverige" , "tätortskod"))

verkar inte alls fungera för Örebro och jag fattar inte varför... -- Lavallen 23 december 2010 kl. 18.30 (CET)[svara]

Just Örebro har jag ingen lösning för, men jag tror det ska vara löst för många andra fall, där det fanns <!-- --> inspräng i mallkoden, vilket krånglade till det. -- Lavallen 9 januari 2011 kl. 13.12 (CET)[svara]
Hoppsan, miss från min sida att kolla här. Är det fortfarande ett problem? GameOn 10 januari 2011 kl. 09.10 (CET)[svara]
I Örebro, ja, men nu börjar antalet artiklar bli så få att det är av mindre vikt. -- Lavallen 13 januari 2011 kl. 19.13 (CET)[svara]

Kosmetiska ändringar

[redigera wikitext]

Kan man inte lägga in att ta bort alla "\n\n" och ersätta dem med \n i de kosmetiska ändringarna? På så sätt fixar vi ev. de som märkts upp med föräldralösa mallen med AWB när vi ändå redigerar? Jag kan inte just nu se nackdelarna, men tänker inte lägga in saker i kosmetiska ändringar funktionen utan att vi funderat igenom det hela. GameOn 13 januari 2011 kl. 18.24 (CET)[svara]

Har just nu inget konkret exempel men "[[ " -> " [[" (och samma för slutet på länken) borde väl vara ok att lägga med? GameOn 13 januari 2011 kl. 18.30 (CET)[svara]
Att ersätta "\n\n" med "\n" är nog inte så lyckat. "\n\n" betyder "nytt stycke".
Sedan vet jag att Sertions bot kört "3*\n" -> "2*\n" och fick en del mothugg, då det finns fall där det är önskvärt, främst sidor med mycket grafik, såsom tabeller.
Att ersätta "[[ " -> "[[" borde inte vara några problem, vad jag kan komma på. Men är inte AWB öppen kod? så (den kodläskunnige) kan se direkt i koden vad som egentligen görs inom ramen för "kosmetiska ändringar" där? Samma sak med "pywikipedia". Båda har "kosmentiska ändringar" även om jag tror det kallas "general fixes" i AWB. -- Lavallen 13 januari 2011 kl. 19.12 (CET)[svara]
Ja just det, Sertion körde ju den typen och fick kritik. Då skippar vi det. Koden för både AWB och pywikipedia finns tillgänglig så visst kan jag försöka få ut det därifrån, men python har jag aldrig jobbat i. AWB är i... attans! skulle ha tittat på det tidigare, C# så det är ju inga problem att få med. Ska grotta ner mig i AWB koden. GameOn 13 januari 2011 kl. 19.44 (CET)[svara]

Mallen {{Nobots}} fanns i koden till Hovsta och programmet gjorde helt halt och jag fick starta om.

Att jag stoppas från artikeln, ser jag inget problem med, men varför avbröts körningen helt? - Och vad kan man göra åt det? -- Lavallen 18 januari 2011 kl. 16.42 (CET)[svara]

GetTemplateParameter Method

[redigera wikitext]

Upptäckte just att funktionen "GetTemplateParameter Method" normalt förväntar att man inte skriver "Mall:" när man anger namnet på mallen. Det gör att om man ska söka i en mall som inte ligger i mallnamnrymden, så måste man skriva ett kolon framför mallnamnet. Samma observation gäller när man skriver med "SetTemplateParameter".

myPage2.SetTemplateParameter(":MediaWiki:Proofreadpage_index_template","Sidor", mallparameter1, true);

-- Lavallen 14 april 2011 kl. 19.34 (CEST)[svara]

Har övergivit den koden ovan när det kommer till att redigera i Index-sidor. Det är ngt javascript som läser mallen, och den klarar inte läsa det mallformat som DNWB lämnar efter sig. Det betyder dock inte att det inte går att redigera i Index-sidor, men det måste ske med försiktighet. - Lavallen 16 april 2011 kl. 15.50 (CEST)[svara]

Två frågor: historik och undersidor

[redigera wikitext]

Två frågor kring hur man med DotNetWikiBot kommer åt mer info om en sida än vad LoadEx() spontant levererar:

  1. Finns det något sätt att få fram en lista med hela historiken, eller åtminstone hur många redigeringar som gjorts? Eller måste man stega sig fram revision för revision via <parentid>?
  2. Finns det något sätt att se om en given sida har undersidor?

Lsj (disk) 24 oktober 2012 kl. 12.46 (CEST)[svara]

1. Det finns en funktion som hämtar historiken i DNWB, men den går inte längre än 25 eller 50 versioner bakåt eller ngt sådant. (FillFromPageHistory och FillFromPageHistoryEx)
Istället brukar jag använda api't direkt:
http://sv.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Wikipedia:Bybrunnen&rvlimit=500&rvprop=timestamp%7Cuser%7Ccomment
Här tror jag du kan få ut upp till 5000 versioner inloggad som admin eller robot. Vill man gå ännu djupare får man skriva en följdfråga:
http://sv.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Wikipedia:Bybrunnen&rvlimit=500&rvprop=timestamp%7Cuser%7Ccomment&rvcontinue=17721205
2. För att få undersidor, tror jag du får använda "list=allpages"
http://sv.wikipedia.org/w/api.php?action=query&list=allpages&apnamespace=2&apfrom=Lavallen&aplimit=500
Men här ska det finnas en fullt fungerande funktion i DNWB: (FillFromAllPages)
-- Lavallen 24 oktober 2012 kl. 13.09 (CEST)[svara]
Tack! Nu kommer jag vidare i ett litet forskningsprojekt. Lsj (disk) 24 oktober 2012 kl. 15.25 (CEST)[svara]

När skapades en sida?

[redigera wikitext]

Finns det ett enklare sätt att läsa ut när en sida skapades, än att köra historiken ner i botten? Lsj (disk) 30 oktober 2012 kl. 22.30 (CET)[svara]

Never mind. Jag hittade det själv. Bara att ändra en parameter så att historiken läses bakifrån: http://sv.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer. Lsj (disk) 30 oktober 2012 kl. 22.41 (CET)[svara]
En manual finns här och mer finns under mw:API. Ingen av dessa är komplett eller alltid helt korrekt. Det finns också en sida bland Specialsidorna. (Som tyvärr tidigare var mer hjälpsam än den är idag.) -- Lavallen 31 oktober 2012 kl. 07.57 (CET)[svara]
Tack! Tror jag behöver lära mig mer om api. Lsj (disk) 31 oktober 2012 kl. 08.15 (CET)[svara]
Lite pilligt att få allting rätt i koden, men det gick till sist:
   public static TimeSpan pageage(Page p, Site iwsite)
   {
       
       string xmlSrc = iwsite.PostDataAndGetResultHTM(iwsite.site+"/w/api.php", "action=query&format=xml&prop=revisions&titles="+HttpUtility.UrlEncode(p.title)+"&rvlimit=1&rvprop=timestamp&rvdir=newer");
       
       XmlDocument doc = new XmlDocument();
       doc.LoadXml(xmlSrc);
       DateTime timestamp = new DateTime();
       string ts = doc.GetElementsByTagName("rev")[0].Attributes.GetNamedItem("timestamp").Value;
       
       timestamp = DateTime.Parse(ts);
       timestamp = timestamp.ToUniversalTime();
       return DateTime.Now.Subtract(timestamp);
   }

Lsj (disk) 1 november 2012 kl. 10.13 (CET)[svara]

Ahh, du ser ut att använda annan teknik för att läsa xml-dokumenten än jag gör! - Intressant, ser mycket lättarbetat ut! Får dissikera din teknik någon dag. -- Lavallen 1 november 2012 kl. 10.20 (CET)[svara]

Antal artiklar på svwp?

[redigera wikitext]

Finns det ett någorlunda enkelt sätt att via bot få fram uppgifterna i Special:Statistik, särskilt det totala antalet artiklar? Frågan ställdes på [wp:BB]] idag vilken artikel som egentligen var #600 000, och jag tänkte att Lsjbot kunde plocka fram sådana uppgifter "i flykten" framöver. Lsj (disk) 16 januari 2013 kl. 19.20 (CET)[svara]

Detta ger ju sidan Special:Statistik i xml-format, om det är det du frågar efter.
Det jag gör på svwikisource är att jag räknar antalet sidor med allpages, men det funkar dåligt här, då inte alla sidor räknas, sidor utan länkar och grensidor tex. -- Lavallen (blockera) 16 januari 2013 kl. 19.42 (CET)[svara]
Tack! Det förstnämnda låter som precis vad jag behöver. Är anropet mycket resurskrävande, eller kan man låta boten ligga och anropa sidan många gånger under en körning? Lsj (disk) 16 januari 2013 kl. 20.00 (CET)[svara]
Nej, det ser inte ut att ta någon tid/kraft alls i anspråk. Enligt mw:API:Etiquette är det ingen fara så länge man kör seriellt, dvs ställer en fråga i taget, och väntar på svaret innan man ställer nästa. Även om man inte gör det, så finns marginaler, åtminstone upplever jag sällan problem på förmiddagarna. -- Lavallen (blockera) 16 januari 2013 kl. 20.07 (CET)[svara]
Fungerar :
        public int ArticleCount(Site countsite)
        {


            string xmlSrc = countsite.PostDataAndGetResultHTM(countsite.site + "/w/api.php", "action=query&format=xml&meta=siteinfo&siprop=statistics");

            //Console.WriteLine(xmlSrc);
       
           
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlSrc);
            string ts = doc.GetElementsByTagName("statistics")[0].Attributes.GetNamedItem("articles").Value;

            Console.WriteLine("ts = " + ts);

            return Convert.ToInt32(ts);
   
        }
Lsj (disk) 16 januari 2013 kl. 21.35 (CET)[svara]

Hjälp av exjobbare?

[redigera wikitext]

Hej. En fundering. Det råkar inte finnas något större och väldigt avgränsat programmeringsjobb som exjobbare kan hjäpa till med? Se diskussion på wikidata:User talk:Lavallen#Exjobbare. Hälsn. Mange01 (disk) 27 januari 2013 kl. 14.23 (CET)[svara]

Spontant tänker jag på den ganska omfattande programmering som föregår ett botprojekt. Givet ett avgränsat ämnesområde där det finns en del publika databaser, så är ett tänkbart projekt att skriva kod som läser dessa databaser, jämkar ihop info från de olika databaserna, skapar en datastruktur som lämpar sig som bas för artikelskapande, och genererar wikikod. Lsj (disk) 27 januari 2013 kl. 19.35 (CET)[svara]

Wikidata i DotNetWikiBot 3

[redigera wikitext]

Jag har försökt konvertera min botkod till DotNetWikiBot v3. Ett problem lyckas jag inte lösa, och det är hur jag kommer åt Wikidata. I DNWB 2 gick det bra att deklarerar Wikidata som en site: Site wdsite = new Site("http://wikidata.org", botname, password);, men det funkar inte längre. Hur gör man? Lsj (diskussion) 15 december 2014 kl. 18.11 (CET)[svara]