using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Xml;
using DotNetWikiBot;
using System.Threading;
using System.Net;
using System.Collections.Generic;
public class TableRow
{
public String cell1;
public int cell2;
public TableRow(String c1, int c2)
{
cell1 = c1;
cell2 = c2;
}
}
class MyBot : Bot
{
static StringBuilder sb = new StringBuilder();
static byte[] buf = new byte[8192];
static int count;
static string tempString;
private static string getNumberOfVisits(string inStr)
{
int pos = inStr.IndexOf(" has been viewed ");
int pos2 = inStr.Substring(pos + 17).IndexOf(" times in ");
if(pos > 0 && pos2 > 0)
return inStr.Substring(pos + 17, pos2);
return "";
}
private static string getPage(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
sb.Length = 0;
tempString = null;
count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.UTF8.GetString(buf, 0, count);
sb.Append(tempString);
}
}
while (count > 0);
return sb.ToString();
}
public static void Main()
{
Site site = new Site("http://sv.wikipedia.org", username, password);
PageList pl = new PageList(site);
//date to check against (normally last month), remember to edit the text in the header as well!
String date = "201106";
//Header for the page
String[] headersStr = new String[4];
String[] footersStr = new String[4];
String[] catscanStr = new String[4];
String[] articlesStr = new String[4];
headersStr[0] = "{{Wikipedia:Projekt datorspel/Stat/Mest lästa stubbar/Tidigare månader}}\nDenna sida innehåller statistik över antalet visningar av respektive artikel i [[:Kategori:Datorspelsstubbar]] under juni 2011.";
headersStr[1] = "{{Wikipedia:Projekt Karlstad/Stat/Mest lästa stubbar/Tidigare månader}}\nDenna sida innehåller statistik över antalet visningar av respektive artikel i [[:Kategori:Karlstad]] som är märkta som stubbar under juni 2011.";
headersStr[2] = "Denna sida innehåller statistik över antalet visningar av respektive artikel i [[:Kategori:Stockholmsstubbar]] under juni 2011.";
headersStr[3] = "Denna sida innehåller statistik över antalet visningar av respektive artikel i [[:Kategori:Internet i Sverige]] under juni 2011.";
footersStr[0] = "[[Kategori:Wikipedia:Projekt datorspel/Stat]]";
footersStr[1] = "";
footersStr[2] = "";
footersStr[3] = "[[Kategori:Wikipedia:Projekt Internet i Sverige]]";
catscanStr[0] = "http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=sv&wikifam=.wikipedia.org&basecat=" + "datorspelsstubbar" + "&basedeep=20&templates=&mode=al&go=Sök&format=wiki&userlang=sv";
//Special case, we don't search for specific category but all articles marked as stubs inside the category
catscanStr[1] = "http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=sv&wikifam=.wikipedia.org&basecat=Karlstad&basedeep=20&mode=cs&tagcat=stubbar&tagdeep=3&go=S%C3%B6k&format=wiki&userlang=sv";
catscanStr[2] = "http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=sv&wikifam=.wikipedia.org&basecat=" + "Stockholmsstubbar" + "&basedeep=20&templates=&mode=al&go=Sök&format=wiki&userlang=sv";
catscanStr[3] = "http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=sv&wikifam=.wikipedia.org&basecat=" + "Internet_i_Sverige" + "&basedeep=20&templates=&mode=al&go=Sök&format=wiki&userlang=sv";
articlesStr[0] = "Wikipedia:Projekt datorspel/Stat/Mest lästa stubbar";
articlesStr[1] = "Wikipedia:Projekt Karlstad/Stat/Mest lästa stubbar";
articlesStr[2] = "Wikipedia:Projekt Stockholm/Mest lästa stubbar";
articlesStr[3] = "Wikipedia:Projekt Internet i Sverige/Mest lästa artiklar";
String tmpStr;
for(int stat = 0; stat < 4; stat++)
{
Page myPage2 = new Page(site);
myPage2.title = articlesStr[stat];
//Add header
myPage2.text += headersStr[stat] + "\n";
myPage2.text += "{| class=\"sortable wikitable\"\n! Artikel !! Antal besök\n|-\n";
//Catscan search
tmpStr = getPage(catscanStr[stat]);
string[] lines = Regex.Split(tmpStr, "\n");
string title;
int pos;
int pos2;
List<TableRow> tableRow = new List<TableRow>();
foreach (string line in lines)
{
pos = line.IndexOf("[[");
pos2 = line.IndexOf("]]");
if(pos > 0 && pos2 > 0)
{
title = line.Substring(pos + 2, pos2 - 4);
if(!title.StartsWith("Kategori:"))
{
tmpStr = getPage("http://stats.grok.se/sv/" + date + "/" + title);
tmpStr = getNumberOfVisits(tmpStr);
if(tmpStr.Length > 0)
tableRow.Add(new TableRow(title.Replace("_", " "), int.Parse(tmpStr)));
}
}
}
tableRow.Sort(delegate(TableRow r1, TableRow r2)
{
return r1.cell2.CompareTo(r2.cell2);
}
);
//descending order
tableRow.Reverse();
tableRow.ForEach(delegate(TableRow r)
{
myPage2.text += "|-\n| [[" + r.cell1 + "]]\n| " + r.cell2.ToString() + "\n";
}
);
myPage2.text += "|}\n";
//Add footer
myPage2.text += footersStr[stat] + "\n";
//Save page
myPage2.Save("Uppdaterar statistiken", true);
}
String[] kategorier = {"Windows-spel", "Macintosh-spel", "Amigaspel", "Atari-spel", "Wii-spel", "Playstation 3-spel", "Xbox 360-spel"};
foreach(string kategori in kategorier)
{
Page myPage = new Page(site);
myPage.title = "Wikipedia:Projekt datorspel/Stat/" + kategori;
myPage.text += "{| class=\"sortable wikitable\"\n! Artikel !! Antal besök\n|-\n";
//Catscan sökning
tmpStr = getPage("http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=sv&wikifam=.wikipedia.org&basecat=" + kategori + "&basedeep=20&mode=cs&tagcat=Stubbar&tagdeep=3&go=S%C3%B6k&format=wiki&userlang=sv");
string[] lines = Regex.Split(tmpStr, "\n");
string title;
int pos;
int pos2;
List<TableRow> tableRow = new List<TableRow>();
foreach (string line in lines)
{
pos = line.IndexOf("[[");
pos2 = line.IndexOf("]]");
if(pos > 0 && pos2 > 0)
{
title = line.Substring(pos + 2, pos2 - 4);
tmpStr = getPage("http://stats.grok.se/sv/" + date + "/" + title);
tmpStr = getNumberOfVisits(tmpStr);
if(tmpStr.Length > 0)
// myPage.text += "|-\n| [[" + title + "]]\n| " + tmpStr + "\n";
tableRow.Add(new TableRow(title.Replace("_", " "), int.Parse(tmpStr)));
}
}
tableRow.Sort(delegate(TableRow r1, TableRow r2)
{
return r1.cell2.CompareTo(r2.cell2);
}
);
//descending order
tableRow.Reverse();
tableRow.ForEach(delegate(TableRow r)
{
myPage.text += "|-\n| [[" + r.cell1 + "]]\n| " + r.cell2.ToString() + "\n";
}
);
myPage.text += "|}\n";
myPage.Save("Uppdaterar statistiken", true);
}
double proc;
int antal;
int antalKat;
Page myPage3 = new Page(site);
myPage3.title = "Wikipedia:Projekt datorspel/Stat/Konsolkampen";
myPage3.text += "{|\n! [[:Kategori:" + kategorier[0] + "|Win]] !! [[:Kategori:" + kategorier[1] + "|Mac]] !! [[:Kategori:" + kategorier[2] + "|Amiga]] !! [[:Kategori:" + kategorier[3] + "|Atari]] !! [[:Kategori:" + kategorier[4] + "|Wii]] !! [[:Kategori:" + kategorier[5] + "|PS3]] !! [[:Kategori:" + kategorier[6] + "|Xbox360]]\n|-\n";
foreach(string kategori in kategorier)
{
pl.FillFromCategoryTree(kategori);
antalKat = pl.Count();
tmpStr = getPage("http://toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wikilang=sv&wikifam=.wikipedia.org&basecat=Datorspelsstubbar&basedeep=20&mode=cs&tagcat=" + kategori + "&tagdeep=3&go=S%C3%B6k&format=wiki&userlang=sv");
pl.Clear();
string[] lines = Regex.Split(tmpStr, "\n");
antal = 0;
foreach (string line in lines)
antal++;
proc = Math.Round(antal * 100 / (double)antalKat, 2);
myPage3.text += "| [[Wikipedia:Projekt datorspel/Stat/" + kategori + "|" + antal.ToString() + "]] (" + proc + "%)\n";
}
myPage3.text += "|}\n";
myPage3.Save("Uppdaterar statistiken", true);
}
}