Ejemplo n.º 1
0
	/// The entry point function. Start coding here.
	public static void Main()
	{
		// Compiled documentation is available in Documentation.chm file.

		// A very compehensive DotNetWikiBot usage examples can be found
		// in unit testing file called DebugBot.cs:
		// http://sourceforge.net/p/dotnetwikibot/svn/HEAD/tree/DebugBot.cs

		// Bot scripts repository is being created at
		// https://sourceforge.net/apps/mediawiki/dotnetwikibot/index.php?title=BSR
		// You are welcome to share your scripts.

		// And here you can find some basic usage examples:

		Site site = new Site("https://en.wikipedia.org", "YourBotLogin", "YourBotPassword");
		//Site site = new Site("http://mywikisite.com", "YourBotLogin", "YourBotPassword");
		//Site site = new Site("https://sourceforge.net/apps/mediawiki/YourProjectName/",
								//"YourSourceForgeLogin", "YourSourceForgePassword");

		site.ShowNamespaces();
		Page p = new Page(site, "Wikipedia:Sandbox");
		p.LoadWithMetadata();
		if (p.Exists())
			Console.WriteLine(p.text);
		p.SaveToFile("MyArticles\\file.txt");
		p.LoadFromFile("MyArticles\\file.txt");
		p.ResolveRedirect();
		Console.WriteLine(p.GetNamespace());
		p.text = "new text";
		site.defaultEditComment = "saving test";
		site.minorEditByDefault = true;
		p.Save();

		/**
		string[] arr = {"Art", "Poetry", "Cinematography", "Camera", "Image"};
		PageList pl = new PageList(site, arr);
		pl.LoadWithMetadata();
		pl.FillFromAllPages("Sw", 0, true, 100);
		pl.SaveTitlesToFile("MyArticles\\list.txt");
		pl.FillFromFile("MyArticles\\list.txt");
		pl.FillFromCategory("Category:Cinematography");
		pl.FillFromLinksToPage("Cinematography");
		pl.RemoveEmpty();
		pl.RemoveDisambigs();
		pl.ResolveRedirects();
		Console.WriteLine(pl[2].text);
		pl[1].text = "#REDIRECT [[Some Page]]";
		pl.FilterNamespaces(new int[] {0,3});
		pl.RemoveNamespaces(new int[] {2,4});
		pl.Clear();
		site.defaultEditComment = "my edit comment";
		site.minorEditByDefault = true;
		pl.Save();
		/**/
	}
Ejemplo n.º 2
0
 /// <summary>Gets page titles for this PageList from Google search results.
 /// The function gets pages of all namespaces and it does not clear
 /// the existing PageList, so new pages will be added.</summary>
 /// <param name="searchStr">Words to search for. Use quotes to find exact phrases.</param>
 /// <param name="limit">Maximum number of page titles to get.</param>
 public void FillFromGoogleSearchResults(string searchStr, int limit)
 {
     if (string.IsNullOrEmpty(searchStr))
         throw new ArgumentNullException("searchStr");
     if (limit <= 0)
         throw new ArgumentOutOfRangeException("limit", Bot.Msg("Limit must be positive."));
     // TO DO: paging
     Uri res = new Uri("http://www.google.com/search?q=" + HttpUtility.UrlEncode(searchStr) +
         "+site:" + site.address.Substring(site.address.IndexOf("://") + 3) +
         "&num=" + limit.ToString());
     string src = Bot.GetWebResource(res, "");
     string relativeIndexPath = site.indexPath.Substring(site.indexPath.IndexOf('/', 10));
     string googleLinkToPagePattern = "<h3[^>]*><a href=\"(?<double_escape>/url\\?q=)?" +
         Regex.Escape(site.address).Replace("https:", "https?:") + "(?:" +
         (!string.IsNullOrEmpty(site.shortPath) ?
             Regex.Escape(site.shortPath) + "|" : "") +
         Regex.Escape(relativeIndexPath) + "\\?title=)?" + "(?<title>[^&\"]+)";
     Regex GoogleLinkToPageRegex = new Regex(googleLinkToPagePattern);
     MatchCollection matches = GoogleLinkToPageRegex.Matches(src);
     foreach (Match match in matches) {
         string title = HttpUtility.UrlDecode(match.Groups["title"].Value);
         if (title == "/") {
             if (site.messages == null)
                 site.LoadMediawikiMessages(true);
             string mainPageTitle = site.messages["mainpage"];
             Page p = new Page(site, mainPageTitle);
             p.ResolveRedirect();
             pages.Add(p);
         }
         else {
             if (!string.IsNullOrEmpty(match.Groups["double_escape"].Value))
                 title = HttpUtility.UrlDecode(title);
             pages.Add(new Page(site, title));
         }
     }
     Console.WriteLine(Bot.Msg("PageList filled with www.google.com search results."));
 }