我正在使用类似于http://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gscoord=41.426140|26.099319
的API调用。
我会返回类似这样的内容
<?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>
但是,虽然我实际上想要获得这些页面的一些照片,但是需要后续调用,例如
获取一些页面图像
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步/呼叫中带来所有这些信息。但是,如果它只有一个,那就太好了。
答案 0 :(得分:4)
list
查询,您可以将其用作generator。
让我们试一试:
原始geosearch查询:http://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gscoord=41.426140|26.099319
生成器查询以在匹配的网页上获取图片:http://en.wikipedia.org/w/api.php?action=query&prop=images&imlimit=max&generator=geosearch&ggsradius=10000&ggscoord=41.426140|26.099319
prop=images
查询也可以用作生成器,因此您也可以这样做:
唉,AFAIK你不能嵌套生成器,所以你不能在一个查询中执行这两个步骤。你可以:
唉,事实证明,这两个选项都无法为您提供您可能想要的信息。如果您使用list=geosearch
作为生成器,则无法获得您可能需要的坐标信息。希望在地图上显示结果。另一方面,使用prop=images
作为生成器会让你错过更重要的事情:知道在哪些页面上使用哪些图像!
因此,不幸的是,似乎如果您的目标是将图像放在地图上,您可能需要使用三个单独的查询来完成。至少您仍然可以在一个请求中查询多个页面/图像,因此您不需要更多而不是三个(直到您达到查询限制并需要使用continuations,是)。
(此外,通过三个步骤执行此操作,您可以在第三步之前对图像应用一些过滤。例如,示例查询返回的大多数页面只有三个相同的图像 - Flag of Bulgaria.svg,{ {3}}和Ivaylovgrad Reservoir.jpg - 所有这些都是通过模板使用的,其中没有一个看起来像是表示特定位置的好选择。)
Ps。如果您只是想在特定位置附近找到图片,即使他们没有在任何特定维基百科文章中使用过,您也可以尝试使用geosearch直接在Oblast Khaskovo.png。它似乎没有返回保加利亚示例坐标的任何结果,但Wikimedia Commons中的works just fine。
答案 1 :(得分:1)
以下是基于上一个答案的替代方案。如果您将此查询作为部分答案开始:
然后您可以在此基础上构建以在单个查询中获取信息。 pageimages属性可以与生成器一起使用。您不能嵌套生成器,但可以链接属性。查询可以使用pageimages来获取每个geosearch结果的页面主图像URL。它看起来像这样:
此查询返回图像&#34;文件&#34;名称(图像属性)和主图像的单个URL(pageimages属性)。页面的主要图像是我所需要的。您可以推断&#34;文件&#34; url将文件中的更改与查询输出的url相匹配,但我不能推荐这样的hack。
images属性有一个设置,应该返回interwiki链接的网址,iwurl。我看到&#34;文件&#34;作为一个interwiki链接。此参数不起作用,图像不返回网址。在沙箱上玩可能会引导您找到更好的答案。
直观地看起来你应该能够将图像和imageinfo属性链接在一起。这样做并不能给出预期的结果。
如果页面主图像的单个网址不够,我可以鼓励您在API沙箱中玩,尝试使用某些属性组合来获取所需内容。我正在使用geosearch生成器并获取页面图像,文本描述和纬度/经度坐标,以便我可以获取地址。祝你好运!