【问题标题】:Retrieve Wikimedia Commons Category of a Wikipedia page using the Wikimedia API使用 Wikimedia API 检索 Wikipedia 页面的 Wikimedia Commons Category
【发布时间】:2021-09-26 16:59:20
【问题描述】:

我正在尝试使用 Wikimedia Api 将相应的 Wikimedia Commons 类别获取到特定的 Wikipedia 页面。我认为这是可能的,因为大多数 Wikipedia 页面都包含“在其他项目中” - 侧边栏中的部分,其中包含重定向到 Commons 类别的链接(例如:https://de.wikipedia.org/wiki/Albert_Einstein

提前致谢。

【问题讨论】:

  • 很久没看api了,但是像这样的链接一般都保存在Wikidata项目中。例如,根据您的需要,您可以使用query.wikidata.org
  • de.wikipedia.org/w/…de.wikipedia.org/w/…,但没有列出这些。
  • 我通过使用实体的维基数据 ID 解决了我的问题。不过感谢您的友好建议。

标签: wikipedia-api mediawiki-api wikimedia wikimedia-commons


【解决方案1】:

您可以通过两次 API 调用来实现,第一次调用德语 Wikipedia 会为您获取 Wikidata Qid:

https://de.wikipedia.org/w/api.php?action=query&format=json&prop=wbentityusage&titles=Albert%20Einstein&wbeuprop=&wbeuaspect=

返回:

{
    "batchcomplete": "",
    "query": {
        "pages": {
            "1278360": {
                "pageid": 1278360,
                "ns": 0,
                "title": "Albert Einstein",
                "wbentityusage": {
                    "Q937": {
                        "aspects": [
                            "S",
                            "T",
                            "C.P227",
                            "C.P214",
                            "C.P244"
                        ]
                    }
                }
            }
        }
    }
}

然后你可以使用 Wikidata API 来获取 Commons 类别的名称:https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json&entity=Q937&property=P373

返回:

{
    "claims": {
        "P373": [
            {
                "mainsnak": {
                    "snaktype": "value",
                    "property": "P373",
                    "hash": "be154a8a3dfc826844ceb5a62389857a65ff1e4e",
                    "datavalue": {
                        "value": "Albert Einstein",
                        "type": "string"
                    },
                    "datatype": "string"
                },
                "type": "statement",
                "id": "q937$2F332903-133D-4CA0-AD24-8B4292C2BF89",
                "rank": "normal"
            }
        ]
    }
}

datavalue 中的值是类别的名称。只需在前面加上 https://commons.wikimedia.org/wiki/Category:

即可获得完整的 URL

https://commons.wikimedia.org/wiki/Category:Albert Einstein

【讨论】:

  • 我实际上设法直接从数据源中获取了实体的 Wikidata ID(之前没有想到)。不过还是谢谢你的详细回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2016-02-14
  • 2022-06-14
  • 2019-02-23
  • 2011-04-15
相关资源
最近更新 更多