如何访问维基百科 API 中的 object,如果其他 object 的 names/keys 不断变化,但要访问的 object name/key 仍然存在相同?

How to access an object in a Wikipedia API, if the other objects names/keys keeps changing but the object to be accessed name/key remains the same?

我想从维基百科获取图像API。我正在做前端开发,所以我只需要 "GET" 图片,没有后端。

这是一般API:

https://en.wikipedia.org/w/api.php?action=query&titles=Image:Title_to_be_inserted_hered.jpg&prop=imageinfo&iiprop=url

当在 image: 之后插入标题时,返回 object 的列表,其中包括图像的 url,稍后将插入到网页中。

然而,尝试了三个标题(意大利、爱因斯坦和奥巴马)后,返回的objects 参数不同,但URL object 始终存在。

您会注意到 "Pages object" 之后的内容总是在变化。

奥巴马:

https://en.wikipedia.org/w/api.php?action=query&titles=Image:obama.jpg&prop=imageinfo&iiprop=url

意大利:

https://en.wikipedia.org/w/api.php?action=query&titles=Image:italy.jpg&prop=imageinfo&iiprop=url

爱因斯坦:

https://en.wikipedia.org/w/api.php?action=query&titles=Image:einstein.jpg&prop=imageinfo&iiprop=url

我只想获取 URL(使用 Ajax 或 JSON)并存储到我的脚本文件中的一个变量中。

一种方法是使用 Object.keys(obj)。例如:

var pages = obj.query.pages,  // Get the pages object
    firstPage = pages[Object.keys(pages)[0]],  // Get the first page in the pages object
    src = firstPage.imageinfo[0].url;  // Get the first image url from the page above

这是一个实际示例,其中的数据来自您的示例之一:

var data = {"continue":{"iistart":"2007-04-19T23:10:16Z","continue":"||"},"query":{"normalized":[{"from":"Image:obama.jpg","to":"File:Obama.jpg"}],"pages":{"10783885":{"pageid":10783885,"ns":6,"title":"File:Obama.jpg","imagerepository":"local","imageinfo":[{"url":"https://upload.wikimedia.org/wikipedia/en/7/7a/Obama.jpg","descriptionurl":"https://en.wikipedia.org/wiki/File:Obama.jpg","descriptionshorturl":"https://en.wikipedia.org/w/index.php?curid=10783885"}]}}}};

var pages = data.query.pages,
    src = pages[Object.keys(pages)[0]].imageinfo[0].url;

document.write(src);

data 中的任何 API 响应替换为 return imageinfo 中的第一个 url。

对我来说,所有 3 个 url 的 JSON 结构似乎都非常简单。

结构总是

query -> pages -> imageinfo -> url

结果中的信息似乎确实发生了一点变化,但完整图像 url 似乎与上图相同 JSON 结构。