搜索维基百科,使用c#找到所有可用语言的第一个条目的第一段

本文关键字:一段 语言 第一个 百科 搜索 使用 | 更新日期: 2023-09-27 18:18:09

假设我有一份用一种语言编写的旅游列表,我想用维基百科的一些数据来充实这个列表。

所以,我有以下数据-城市是慕尼黑,它有以下景点:

  • 圣母教堂
  • Marienplatz
  • Karlsplatz

我需要执行以下操作:

  1. 用给定的语言向维基百科发送查询(本例是德语,因为德语维基更有可能有相应的文章)。
  2. 一旦文章被找到,我想要得到它的页面标题和前2-3段。
  3. 我想去掉任何wiki标记,只得到文本。
  4. 如果能有原文("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)
              );

搜索维基百科,使用c#找到所有可用语言的第一个条目的第一段

如果您知道相关文章的标题,则可以执行以下操作:

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。