【问题标题】:How to get image URL property from Wikidata item by API?如何通过 API 从 Wikidata 项目中获取图像 URL 属性?
【发布时间】:2015-12-21 10:48:07
【问题描述】:

我制作了一个使用 JSON Google 图片搜索 API 来提供图片的 Android 应用,但我注意到 Google 已停止支持它。我还发现 Wikidata 有时会在某些项目上提供图像属性,但是我似乎无法使用 Wikidata API 获取图像的 URL 位置。

有没有办法从维基数据中的项目中获取图像 URL 属性?

【问题讨论】:

    标签: java android mediawiki-api google-image-search wikidata-api


    【解决方案1】:

    如果某些维基数据项(ID:Qxxx)具有image (P18) 属性,您可以通过MediaWiki API 访问它:

    https://www.wikidata.org/w/api.php?action=wbgetclaims&property=P18&entity=Qxxx
    

    回复将包括:

    "claims": {
            "P18": [{ "mainsnak": { "datavalue": { "value": "img_name.ext" }, "hash": ... }}]
    }
    

    其中 img_name.ext 是您要查找的图像的名称。

    最终图像 URL 将是:https://upload.wikimedia.org/wikipedia/commons/a/ab/img_name.ext,其中 abimg_name 的 MD5 hashsum 的第一个和第二个字符。 ext(所有空格都替换为_)。

    示例: 对于项目 jaguar (Q35694),API 将返回图像名称“Junior-Jaguar-Belize-Zoo.jpg”,其 MD5 为 hashsum("Junior-Jaguar-Belize-Zoo.jpg") = 213b31ec141dafebe457e49bcd7f9329,因此 a= 2 和 b=1,否则最终图像 URL 将为:https://upload.wikimedia.org/wikipedia/commons/2/21/Junior-Jaguar-Belize-Zoo.jpg

    注意: MD5 哈希值是图像文件的名称,而不是 JSON 正文中包含的 P18[0].mainsnak.hash 属性。

    【讨论】:

    • 不错!您也可以直接获取调整后的图片网址,如下所示:commons.wikimedia.org/w/… 不过,请注意,请求大于原始图片尺寸的尺寸会返回错误
    【解决方案2】:

    您可以从图像属性构建 URL(以下示例中为Sample.png):

    https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Sample.png&width=300
    

    有关详细信息,请参阅 Wikimedia Commons 的"Reusing content outside Wikimedia" documentation

    【讨论】:

    • 它有效,但不适用于&width 参数,在这种情况下,对于不同的图像,您可能会得到404
    • 这个解决方案,尽管有 302 重定向(在上面的例子中指向 https://upload.wikimedia.org/wikipedia/commons/a/a7/Sample.png),但它比其他使用 md5sum 的方法更安全(检测 /a/a7,可能会发生变化。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多