如何通过维基百科 API 在一次地理搜索调用中获取更多信息?

Mic*_*ael 5 api wikipedia-api

我正在使用类似于http://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gscoord=41.426140|26.099319.

我返回这样的东西

<?xml version="1.0"?>
<api>
  <query>
    <geosearch>
      <gs pageid="27460829" ns="0" title="Kostilkovo" lat="41.416666666667" lon="26.05" dist="4245.1" primary="" />
      <gs pageid="27460781" ns="0" title="Belopolyane" lat="41.45" lon="26.15" dist="4988.7" primary="" />
      <gs pageid="27460862" ns="0" title="Siv Kladenets" lat="41.416666666667" lon="26.166666666667" dist="5713.5" primary="" />
      <gs pageid="13811116" ns="0" title="Svirachi" lat="41.483333333333" lon="26.116666666667" dist="6521.9" primary="" />
      <gs pageid="27460810" ns="0" title="Gorno Lukovo" lat="41.366666666667" lon="26.1" dist="6613.4" primary="" />
      <gs pageid="27460799" ns="0" title="Dolno Lukovo" lat="41.366666666667" lon="26.083333333333" dist="6746.2" primary="" />
      <gs pageid="27460827" ns="0" title="Kondovo" lat="41.433333333333" lon="26.016666666667" dist="6937" primary="" />
      <gs pageid="27460848" ns="0" title="Plevun" lat="41.45" lon="26.016666666667" dist="7383.1" primary="" />
      <gs pageid="24179704" ns="0" title="Villa Armira" lat="41.499069444444" lon="26.106263888889" dist="8130" primary="" />
      <gs pageid="27460871" ns="0" title="Zhelezari" lat="41.413333333333" lon="25.998333333333" dist="8540.1" primary="" />
    </geosearch>
  </query>
</api>
Run Code Online (Sandbox Code Playgroud)

但是虽然我实际上是在尝试获取这些页面的一些图片,但需要进行后续调用,例如

  • 获取一些页面图像

    http://en.wikipedia.org/w/api.php?action=query&prop=images&pageids=13843906

  • 然后,获取图像信息

    http://en.wikipedia.org/w/api.php?action=query&titles=File:Alexandru_Ioan_Cuza_Dealul_Patriarhiei.jpg&prop=imageinfo&iiprop=url

好吧,即使这让我得到了我最终需要的东西,它也根本没有效率。

我想知道这个调用是否有一些参数,或者完全其他调用可以在最多 2 个步骤/调用中提供所有这些信息。不过,如果它只是一个,那就太好了。

Ilm*_*nen 5

哇,我不知道现在还有这样的功能!但要回答你的问题,因为它是一个list查询,你可能可以将它用作生成器

我们来尝试一下:

查询prop=images也可以用作生成器,因此您也可以这样做:

唉,据我所知,您无法嵌套生成器,因此您无法在一个查询中执行这两个步骤。您可以:

  1. 在一个查询中获取图像列表,然后使用另一个查询来获取 URL,或者
  2. 从基本的地理搜索查询开始获取页面 ID,然后在另一个查询中获取图像及其 URL。

唉,事实证明这两个选项都无法为您提供一些您可能想要的信息。如果您用作list=geosearch生成器,则如果您希望在地图上显示结果,则无法获得可能需要的坐标信息。另一方面,用作prop=images生成器会让您错过更重要的事情:了解哪些图像用于哪些页面!

因此,不幸的是,如果您的目标是将图像放置在地图上,您可能必须使用三个单独的查询来完成。至少您仍然可以在一个请求中查询多个页面/图像,因此您不需要超过三个页面/图像(直到您达到查询限制并需要使用Continuations,即)。

(此外,分三步执行可以让您在第三步之前对图像应用一些过滤。例如,示例查询返回的大多数页面仅具有相同的三个图像 - Flag of Bulgaria.svgIvaylovgrad Reservoir.jpgOblast Khaskovo.png — 所有这些都是通过模板使用的,而且没有一个看起来像是代表特定位置的好选择。)

诗。如果您只是对查找特定位置附近的图像感兴趣,即使它们没有在任何特定的维基百科文章中使用,您可能想尝试直接在Wikimedia Commons上使用地理搜索。它似乎没有返回保加利亚示例坐标的任何结果,但它在更拥挤的位置工作得很好

  • 对于正常的图像,请使用 PageImages:https://www.mediawiki.org/wiki/Extension:PageImages#API ;) (2认同)