我开发了一个Android应用程序,使用JSON Google图像搜索API来提供图像,但我注意到Google已经停止支持它。我还发现Wikidata有时会在一些项目上提供图像属性,但我似乎无法使用Wikidata API获得图像的URL位置。有没有办法从维基数据中的条目获取图像URL属性?
9bfwbjaz1#
如果某个维基数据项(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,其中a和B是img_name.ext的MD5 hashsum的第一个和第二个字符(所有空格都替换为_)。
https://upload.wikimedia.org/wikipedia/commons/a/ab/img_name.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属性。
hashsum("Junior-Jaguar-Belize-Zoo.jpg")
213b31ec141dafebe457e49bcd7f9329
P18[0].mainsnak.hash
mtb9vblg2#
您可以从image属性(以下示例中的Sample.png)构建URL:
Sample.png
https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Sample.png&width=300
请参阅维基共享资源的"Reusing content outside Wikimedia" documentation以了解更多细节。
s4n0splo3#
这是一个PHP函数,用于将给定的图像文件名转换为维基百科共享资源的url。
function getWikimediaImageURL($aFilename) { #-- Example: $aURLString = getWikimediaImageURL('Fortuna Düsseldorf.svg'); $aFilename = str_replace( ' ', '_', $aFilename); $md5 = md5($aFilename); return "https://upload.wikimedia.org/wikipedia/commons/" . substr($md5,0,1) . "/" . substr($md5,0,2). "/" . urlencode($aFilename); }
Commons对用户代理头有点挑剔,所以下载时提供一个(根据https://meta.wikimedia.org/wiki/User-Agent_policy更改User-Agent字符串:
$opts = [ "https" => [ "method" => "GET", "header" => "User-Agent: oolBot/0.0 (https://example.org/coolbot/; coolbot@example.org) generic-library/0.0\r\n" ] ]; $context = stream_context_create($opts); $content = file_get_contents( $pfad , false, $context );
3条答案
按热度按时间9bfwbjaz1#
如果某个维基数据项(ID为:Qxxx)具有image (P18)属性,可以通过MediaWiki API访问:
答复将包括:
其中img_name.ext是您要查找的图像的名称。
最终的图像URL为:
https://upload.wikimedia.org/wikipedia/commons/a/ab/img_name.ext
,其中a和B是img_name.ext的MD5 hashsum的第一个和第二个字符(所有空格都替换为_
)。**示例:**对于项目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
属性。mtb9vblg2#
您可以从image属性(以下示例中的
Sample.png
)构建URL:请参阅维基共享资源的"Reusing content outside Wikimedia" documentation以了解更多细节。
s4n0splo3#
这是一个PHP函数,用于将给定的图像文件名转换为维基百科共享资源的url。
Commons对用户代理头有点挑剔,所以下载时提供一个(根据https://meta.wikimedia.org/wiki/User-Agent_policy更改User-Agent字符串: