在Wikipedia API上搜索嵌入模板的标题

时间:2014-03-17 06:45:13

标签: wikipedia-api

我想查询Wikipedia API以获取信息框视频游戏模板中的信息。因此,我进行以下API调用以获取嵌入了信息框视频游戏模板的页面列表:

http://en.wikipedia.org/w/api.php?action=query&generator=embeddedin&geititle=template:infobox%20video%20game

我得到以下结果:

<?xml version="1.0"?>
<api>
  <query-continue>
    <embeddedin geicontinue="10|Infobox_video_game|8484" />
  </query-continue>
  <query>
    <pages>
      <page pageid="785" ns="0" title="Asteroids (video game)" />
      <page pageid="2215" ns="0" title="Sid Meier&#039;s Alpha Centauri" />
      <page pageid="4098" ns="0" title="Puzzle Bobble" />
      <page pageid="4965" ns="0" title="Bubble Bobble" />
      <page pageid="6023" ns="0" title="Castle of the Winds" />
      <page pageid="6259" ns="0" title="Civilization (video game)" />
      <page pageid="6614" ns="0" title="Chrono Trigger" />
      <page pageid="7431" ns="0" title="Counter-Strike" />
      <page pageid="7840" ns="0" title="Chrono Cross" />
      <page pageid="8090" ns="0" title="Day of the Tentacle" />
    </pages>
  </query>
</api>

大。完善。现在,我不想要所有这些页面的列表,因为这几乎完全没用。我想要一个与“mario”匹配的所有此类页面的列表。所以我进行了以下API调用。

http://en.wikipedia.org/w/api.php?action=query&generator=embeddedin&geititle=template:infobox%20video%20game&list=search&srsearch=mario

我得到以下结果(为了便于阅读而截断为2个结果)

<?xml version="1.0"?>
<api>
  <query-continue>
    <search sroffset="10" />
    <embeddedin geicontinue="10|Infobox_video_game|8484" />
  </query-continue>
  <query>
    <pages>
      <page pageid="785" ns="0" title="Asteroids (video game)" />
      <page pageid="2215" ns="0" title="Sid Meier&#039;s Alpha Centauri" />
    </pages>
    <searchinfo totalhits="39118" />
    <search>
      <p ns="0" title="Mario" snippet="is a fictional character  in the &lt;span class=&#039;searchmatch&#039;&gt;Mario&lt;/span&gt; video game franchise  by Nintendo , created by Japanese video game designer  Shigeru Miyamoto .  &lt;b&gt;...&lt;/b&gt; " size="58561" wordcount="8141" timestamp="2014-03-16T02:28:37Z" />
      <p ns="0" title="Mario (disambiguation)" snippet="&lt;span class=&#039;searchmatch&#039;&gt;Mario&lt;/span&gt;  is a fictional character in his eponymous video game series. &lt;span class=&#039;searchmatch&#039;&gt;Mario&lt;/span&gt; may also refer to:  People : &lt;span class=&#039;searchmatch&#039;&gt;Mario&lt;/span&gt; (given name), a list of people  &lt;b&gt;...&lt;/b&gt; " size="1354" wordcount="189" timestamp="2013-08-26T18:46:18Z" />
    </search>
  </query>
</api>

这也是完美的,除了不是那么多,因为它在同一个调用中给了我基本上两个单独的查询结果,这是永远的用例。有没有办法可以查询我从嵌入式列表中获得的结果,还是维基百科API基本没用?

1 个答案:

答案 0 :(得分:1)

API并非“基本无用”,但它不适合您的特定查询。

解决这个问题的一种方法是使用DBpedia,它可以从维基百科的信息框中提取信息,并可以使用SPARQL进行查询。

要获取标题中包含Mario的所有视频游戏,您可以使用以下内容:

SELECT *
WHERE {
    ?game rdf:type dbpedia-owl:VideoGame.
    ?game rdfs:label ?label.
    FILTER regex(?label, "Mario")
}

或者,甚至更好,获得超级马里奥系列中的所有游戏:

SELECT *
WHERE {
    <http://dbpedia.org/resource/Super_Mario_(series)> dbpprop:game ?game
}