如何访问维基百科 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 结构。
我想从维基百科获取图像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 结构。