首页 > 解决方案 > 从 Wikipedia API 获取用户归因链接

问题描述

我是一个一直在使用 Wikipedia API 并想出很多东西的新手,但最后一个让我抓狂。

我已经能够找到我需要的 wiki 页面,然后按照此处的文档利用pageids获取图像的直接链接。

page_id = '1649237' 
image_url_base = 'https://ja.wikipedia.org/w/api.php?' 
    image_params = {
            "action": "query",
            "format": "json",
            "prop": "images",
            "pageids": page_id
            }
    image_url = wiki_image_url_base + page_id
    r = requests.get(url = wiki_image_url_base, params = image_params).json()
    
    image_file_name = str(r['query']['pages'][ja_page_id]['images'][0]['title'])

然后已经能够使用image_file_name来创建指向主文件的链接,如下所示:

https://upload.wikimedia.org/wikipedia/commons/9/9e/Flag_of_Japan.svg

这似乎给出了奇怪的结果。对于我的脚本,我真的想要页面上的顶部图像,但这似乎会返回各种结果。

我被困的地方是我无法弄清楚如何让这个页面上的文档工作:

https://www.mediawiki.org/wiki/API:Imageinfo

我真正追求的是图像的直接链接 URL 和归属链接。如果归因链接变得太复杂,我什至会很高兴能够获得指向此页面图像的链接:

https://en.wikipedia.org/w/index.php?curid=32376184

看起来这个 ImageInfo API 可以工作,但我无法让它工作......我确定是我......

感谢你们对我的帮助。

标签: pythonpython-3.xpython-requestswikipedia-api

解决方案


我想您已经阅读了https://www.mediawiki.org/wiki/API:Imageinfo中的 Python 示例。如果您尝试打开文档提供的 url,您将很容易理解它是如何工作的。因为打开 url 后得到的就是通过 requests 库得到的(https://www.mediawiki.org/wiki/Special:MyLanguage/API:Imageinfo看起来效果不好,但下面的参数效果很好)

import requests
from pprint import pprint
page_id = '1649237' 
image_url_base = 'https://ja.wikipedia.org/w/api.php' 
image_params = {
            "action": "query",
            "format": "json",
            "prop": "images",
            "pageids": page_id
            }

resp = requests.get(image_url_base, params=image_params)
my_data = resp.json()
pprint(my_data)

first_img = my_data["query"]["pages"][page_id]["images"][0]["title"]

for_img_details = "https://www.mediawiki.org/w/api.php?" # https://ja.wikipedia.org/w/api.php
details_params = {
            "action": "query",
            "titles": "File:{}".format(first_img.split(":")[-1]),
            "prop": "imageinfo",
            "format": "json",
            "iiprop":"timestamp|user|url"
}
# action=query&generator=images&titles=Main%20Page&prop=info
resp2 = requests.get(for_img_details, params=details_params)
pprint(resp2.json())

推荐阅读