搜索维基百科,使用c#找到所有可用语言的第一个条目的第一段
本文关键字:一段 语言 第一个 百科 搜索 使用 | 更新日期: 2023-09-27 18:18:09
假设我有一份用一种语言编写的旅游列表,我想用维基百科的一些数据来充实这个列表。
所以,我有以下数据-城市是慕尼黑,它有以下景点:
- 圣母教堂
- Marienplatz
- Karlsplatz
我需要执行以下操作:
- 用给定的语言向维基百科发送查询(本例是德语,因为德语维基更有可能有相应的文章)。 一旦文章被找到,我想要得到它的页面标题和前2-3段。
- 我想去掉任何wiki标记,只得到文本。
- 如果能有原文("de")和其他语言的标题,那就太好了。
我试过从NuGet资源库链接到wiki,但我不能得到这个场景运行…下面是我超时的代码:
var enwiki = new Wiki("LinqToWiki.Samples", "en.wikipedia.org", "/w/api.php");
var result = enwiki.Query.allpages()
.Pages
.Select (
page =>
new
{
Title = page.info.title,
Text = page.revisions()
.Where( r => r.section == "0")
.Select( r => r.value)
);
如果您知道相关文章的标题,则可以执行以下操作:
var titles = wiki.CreateTitlesSource(
"Munich Frauenkirche", "Marienplatz", "Karlsplatz (Stachus)");
var pages =
titles.Select(
page => new
{
Title = page.info.title,
Text = page.revisions()
.Where(r => r.section == "0" && r.parse)
.Select(r => r.value)
.FirstOrDefault(),
LangLinks = page.langlinks().ToEnumerable()
}).ToEnumerable();
LangLinks
将包含不同语言的文章标题。
Text
将包含第一部分的HTML。如果你认为wikittext会更好,你可以通过删除&& r.parse
来代替。
也有extracts
模块,似乎支持获得实际的明文,但该模块目前不支持LinqToWiki。