using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using wikiNU_MainPage.Properties;
using Claymore.SharpMediaWiki;
using System.Threading;
namespace wikiNU_MainPage
{
class Program
{
static Wiki wiki;
static string getResponse(string uri)
{
StringBuilder sb = new StringBuilder();
byte[] buf = new byte[8192];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
sb.Append(Encoding.Default.GetString(buf, 0, count));
}
}
while (count > 0);
return sb.ToString();
}
static void Login()
{
Directory.CreateDirectory(@"Cache\");
wiki = new Wiki("http://wiki.nayanova.edu/meta/");
wiki.SleepBetweenQueries = 5;
Console.WriteLine("Logging in as " + Settings.Default.wLogin + " to " + wiki.Uri + "...");
Thread.Sleep(2000);
try
{
string cookieFile = @"Cache\cookie.jar";
WikiCache.Login(wiki, Settings.Default.wLogin, Settings.Default.wPass, cookieFile);
string namespacesFile = @"Cache\namespaces.dat";
if (!WikiCache.LoadNamespaces(wiki, namespacesFile))
{
wiki.GetNamespaces();
WikiCache.CacheNamespaces(wiki, namespacesFile);
}
}
catch (WikiException e)
{
Console.WriteLine(e.Message);
return;
}
Console.WriteLine("Logged in as " + wiki.User + ".");
}
static void Main(string[] args)
{
bool index = false;
bool metapage = false;
if (args.Contains("--index")) index = true;
if (args.Contains("--meta")) metapage = true;
if (args.Contains("--all")) { index = true; metapage = true;}
Console.Write("Получение данных: meta ... ");
string meta = getResponse("http://wiki.nayanova.edu/meta/index.php?title=Special:Statistics&action=raw").Split('=', ';')[3];
Console.WriteLine("{0,5}", meta);
Console.Write("Получение данных: pool ... ");
string pool = getResponse("http://wiki.nayanova.edu/pool/index.php?title=Special:Statistics&action=raw").Split('=', ';')[15];
Console.WriteLine("{0,5}", pool);
Console.Write("Получение данных: ru ... ");
string ru = getResponse("http://wiki.nayanova.edu/ru/index.php?title=Special:Statistics&action=raw").Split('=', ';')[3];
Console.WriteLine("{0,5}", ru);
Console.Write("Получение данных: en ... ");
string en = getResponse("http://wiki.nayanova.edu/en/index.php?title=Special:Statistics&action=raw").Split('=', ';')[3];
Console.WriteLine("{0,5}", en);
Console.Write("Получение данных: de ... ");
string de = getResponse("http://wiki.nayanova.edu/de/index.php?title=Special:Statistics&action=raw").Split('=', ';')[3];
Console.WriteLine("{0,5}", de);
Console.Write("Получение данных: fr ... ");
string fr = getResponse("http://wiki.nayanova.edu/fr/index.php?title=Special:Statistics&action=raw").Split('=', ';')[3];
Console.WriteLine("{0,5}", fr);
Console.Write("Получение данных: ja ... ");
string ja = getResponse("http://wiki.nayanova.edu/ja/index.php?title=Special:Statistics&action=raw").Split('=', ';')[3];
Console.WriteLine("{0,5}", ja);
Console.WriteLine("Запись в локальный файл.");
using (StreamWriter sw = new StreamWriter("statistics.txt"))
{
sw.WriteLine("meta = {0,5}", meta);
sw.WriteLine("pool = {0,5}", pool);
sw.WriteLine("ru = {0,5}", ru);
sw.WriteLine("en = {0,5}", en);
sw.WriteLine("de = {0,5}", de);
sw.WriteLine("fr = {0,5}", fr);
sw.WriteLine("ja = {0,5}", ja);
sw.Close();
}
if (index)
{
List<string> MainPage = new List<string>();
Console.WriteLine("Чтение шаблона ...");
StreamReader sr = new StreamReader("index-template.html");
string line;
while ((line = sr.ReadLine()) != null)
MainPage.Add(line);
sr.Close();
Console.WriteLine("Добавление цифр ...");
// ru
MainPage[33] = "<div style=\"font-size: 10pt;\">Информационный проект<br />академии Наяновой<br />Статей: " + ru.ToString() + "</div>";
// meta
MainPage[38] = "<div style=\"font-size: 10pt;\">Координационный центр<br />информационного проекта<br />Статей: " + meta.ToString() + "</div>";
// pool
MainPage[43] = "<div style=\"font-size: 10pt;\">Медиа хранилище<br />информационного проекта<br />Файлов: " + pool.ToString() + "</div>";
// en
MainPage[48] = "<div style=\"font-size: 10pt;\">Nayanova academy<br />information project<br />Article count: " + en.ToString() + "</div>";
// de
MainPage[53] = "<div style=\"font-size: 10pt;\">Informationen projekt<br />akademie Nayanova<br />Anzahl Artikel: " + de.ToString() + "</div>";
// fr
MainPage[58] = "<div style=\"font-size: 10pt;\">Le projet informatique<br />de Academie de Nayanova<br />Nombre d'articles: " + fr.ToString() + "</div>";
// ja
MainPage[63] = "<div style=\"font-size: 10pt;\">情報プロジェクトアカデミーNayanova<br />記事数:" + ja.ToString() + "</div>";
Console.WriteLine("Запись итогового файла ...");
StreamWriter swr = new StreamWriter("index.html", false, Encoding.UTF8);
foreach (string st in MainPage)
swr.WriteLine(st);
swr.Close();
Console.WriteLine("Загрузка файла ...");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://wiki.nayanova.edu/httpdocs/index.html");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(Settings.Default.Login, Settings.Default.Password);
Stream ftpStream = request.GetRequestStream();
FileStream file;
file = File.OpenRead("index.html");
int length = 10240;
byte[] buffer = new byte[length];
int bytesRead = 0;
do
{
bytesRead = file.Read(buffer, 0, length);
ftpStream.Write(buffer, 0, bytesRead);
} while (bytesRead != 0);
file.Close();
ftpStream.Close();
Console.WriteLine("Готово.");
}
if (metapage)
{
Console.WriteLine("Обновление страницы на мете ...");
Login();
Console.WriteLine("Загрузка страницы \"Размер разделов\" ...");
string pageText = wiki.LoadText("Размер разделов");
Console.WriteLine("Добавление цифр ...");
string DateStr = DateTime.Now.ToString();
string stats = "|-\n|" + DateStr;
stats += "||" + meta.ToString();
stats += "||" + pool.ToString();
stats += "||" + ru.ToString();
stats += "||" + en.ToString();
stats += "||" + de.ToString();
stats += "||" + fr.ToString();
stats += "||" + ja.ToString();
stats += "\n|}";
pageText = pageText.Replace("|}", stats);
Console.WriteLine("Запись страницы ...");
wiki.Save("Размер разделов", pageText, "Обновление на " + DateStr);
Console.WriteLine("Logout ...");
wiki.Logout();
Console.WriteLine("Готово.");
}
Console.ReadKey();
}
}
}