如何从维基百科获取特定数据?

时间:2017-03-23 14:23:56

标签: php query-string wikipedia-api

我只想获取有关视频游戏的数据(如Duke Nukem 3D,Atari Games等)。但是看看他们期望你如何查询以及其他人如何做到这一点,我无法完全理解如何去做。我现在已经搜索了几天如何做,但空出来了。

我也查看了他们的API,但他们希望你如何创建查询字符串并没有真正帮助我。我试着这样做:

https://en.wikipedia.org/w/api.php?action=query&prop=categories&format=json&titles=Video_Game

但它给了我这个回报:

{
   "batchcomplete":"",
   "query":{
      "normalized":[
         {
            "from":"Video_Game",
            "to":"Video Game"
         }
      ],
      "pages":{
         "361741":{
            "pageid":361741,
            "ns":0,
            "title":"Video Game",
            "categories":[
               {
                  "ns":14,
                  "title":"Category:Redirects from other capitalisations"
               },
               {
                  "ns":14,
                  "title":"Category:Unprintworthy redirects"
               }
            ]
         }
      }
   }
}

我怀疑它只是找到了视频游戏的页面而不是所有关于视频游戏的页面。我可能只是不明白如何从维基百科中获取数据。

任何帮助?

2 个答案:

答案 0 :(得分:1)

英语维基百科中有关视频游戏的所有页面都包含名为Infobox video game的模板,因此您只需使用Wikipedia API查询属性transcludedin即可获取所有这些内容:

https://en.wikipedia.org/w/api.php?action=query&prop=transcludedin&tilimit=500&titles=Template:Infobox_video_game

答案 1 :(得分:0)

首先,Video GameredirectVideo game(维基百科中的大小写很重要,除了标题的第一个字符外)所以它没有太多有用的信息。您可以使用redirects=1 API参数自动解决重定向。

另一个问题是,您在询问API视频游戏文章的类别。您可能想要的是询问视频游戏类别中的文章。这就像action=query&list=categorymembers&cmtitle=Category%3AVideo+games

第三个问题是类别形成图表,因此通常大多数相关内容都在子类别中,而不是主要类别本身。 Category:Video games就是这种情况。因此,即使您正确地检索了文章列表,它也不会特别有用。

有多种方法可以获得更有用的相关文章列表。

  • 您可以根据信息框包含进行查询,Termininja说。问题在于它会遗漏那些没有信息框的文章(通常是较新的,写得不太好的文章)。
  • 您可以使用实验性独立category graph search service查找视频游戏类别和子类别中的所有文章。在实践中,对于非常通用的类别(例如"视频游戏"因为类别系统很乱 - 它不是一个合适的树,它包含循环和其他奇怪的东西,所以你可能会发现,当深入到子类别时,内容甚至与视频游戏无关。 (例如视频游戏>视频游戏文化&>书呆子文化>动漫和漫画迷。)
  • 您可以对SPARQL使用Wikidata次查询,例如is a: video game。这取决于正确维护的维基数据信息,但情况并非总是如此。

在这种情况下,最好使用信息框。