我想从维基百科 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:
之后插入标题时,会返回一个对象列表,其中包括图像的 URL,该图像稍后将被插入到网页中。
但是尝试了三个标题(意大利、爱因斯坦、奥巴马)后,返回的对象参数不同,但URL对象始终存在。
您可以注意到“Pages 对象”后面的内容始终会发生变化。
奥巴马:
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);
用任何 API 响应替换 data
仍将返回 imageinfo
中的第一个网址。
关于javascript - 如果其他对象名称/键不断变化但要访问的对象名称/键保持不变,如何访问 Wikipedia API 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37375015/