-
-
Notifications
You must be signed in to change notification settings - Fork 17
[MediaWiki] Generators
Chen edited this page Nov 8, 2017
·
32 revisions
References: https://cxuesong.github.io/WikiClientLibrary/html/bb187659-2e6f-47b2-cb94-22c8936fe011.htm
static async Task SearchAsync()
{
Console.Write("Enter your search keyword: ");
var generator = new SearchGenerator(myWikiSite, Console.ReadLine())
{
PaginationSize = 22
};
// We are only interested in the top 20 items.
foreach (var item in await generator.EnumItemsAsync().Take(20).ToList())
{
Console.WriteLine(item);
Console.WriteLine("\t{0}", item.Snippet);
}
}Most of the WikiPageGenerator-derived classes (including AllPagesGenerator) implement IWikiListGenerator<WikiPageStub>, i.e., .EnumItemsAsync() will return a sequence of WikiPageStub. If you are only interested in the titles of the pages, consider using .EnumItemsAsync() instead of .EnumPagesAsync().
static async Task ShowAllTemplatesAsync()
{
var generator = new AllPagesGenerator(myWikiSite)
{
StartTitle = "A",
NamespaceId = BuiltInNamespaces.Template,
PaginationSize = 50
};
// You can specify EnumPagesAsync(PageQueryOptions.FetchContent),
// if you are interested in the content of each page
using (var enumerator = generator.EnumPagesAsync().GetEnumerator())
{
int index = 0;
// Before the advent of "async for" (might be introduced in C# 8),
// to handle the items in sequence one by one, we need to use
// the expanded for-each pattern.
while (await enumerator.MoveNext(CancellationToken.None))
{
var page = enumerator.Current;
Console.WriteLine("{0}: {1}", index, page);
index++;
// Prompt user to continue listing, every 50 pages.
if (index % 50 == 0)
{
Console.WriteLine("Esc to exit, any other key for next page.");
if(Console.ReadKey().Key == ConsoleKey.Escape)
break;
}
}
}
}