我确实有来自wikimedia commons的文件名,我想直接访问缩略图。
示例: Tour_Eiffel_Wikimedia_Commons.jpg
我找到了一种方法来获取包含我想要的缩略图的网址的json数据:
https://en.wikipedia.org/w/api.php?action=query&titles=Image:Tour_Eiffel_Wikimedia_Commons.jpg&prop=imageinfo&iiprop=url&iiurlwidth=200
但我不想要另一个请求。有没有办法直接访问缩略图?
答案 0 :(得分:5)
如果你可以依赖这样一个事实:当前建立网址的方式将来不会发生变化(这是不可保证的),那么你就可以做到。
网址如下所示:
https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Tour_Eiffel_Wikimedia_Commons.jpg/200px-Tour_Eiffel_Wikimedia_Commons.jpg
https://upload.wikimedia.org/wikipedia/commons/thumb
Tour_Eiffel_Wikimedia_Commons.jpg
的MD5哈希值为a85d416ee427dfaee44b9248229a9cdd
,因此我们得到/a
。/a8
。/Tour_Eiffel_Wikimedia_Commons.jpg
/200px-Tour_Eiffel_Wikimedia_Commons.jpg
答案 1 :(得分:1)
如果有人在 SPARQL 而不是 Python 中执行此查询: SPARQL 中存在 MD5 函数,整个字符串操作也可以在 SPARQL 中实现!
public function filterOrderParams(\Enlight_Event_EventArgs $args)
{
$return = $args->getReturn();
$return['invoice_shipping'] = ceil($return['invoice_shipping']);
$return['invoice_shipping_net'] = ceil($return['invoice_shipping_net']);
$subject->sShippingcostsNumeric = ceil($subject->sShippingcostsNumeric);
$subject->sShippingcostsNumericNet = ceil($subject->sShippingcostsNumericNet);
$args->setReturn($return);
}
public function afterGetOrder(\Enlight_Hook_HookArgs $args)
{
if (!$this->checkIfActive()) {
return;
}
$return = $args->getReturn();
$return['invoice_shipping'] = ceil($return['invoice_shipping']);
$return['invoice_shipping_net'] = ceil($return['invoice_shipping_net']);
$args->setReturn($return);
}
在 Wikidata 的查询服务中运行此实时查询:here,如下所述:https://discourse-mediawiki.wmflabs.org/t/accessing-a-commons-thumbnail-via-wikidata/499
答案 2 :(得分:0)
基于@svick解决方案的Python解决方案:
import hashlib
def get_wc_thumb(image, width=300): # image = e.g. from Wikidata, width in pixels
image = image.replace(' ', '_') # need to replace spaces with underline
m = hashlib.md5()
m.update(image.encode('utf-8'))
d = m.hexdigest()
return "https://upload.wikimedia.org/wikipedia/commons/thumb/"+d[0]+'/'+d[0:2]+'/'+image+'/'+str(width)+'px-'+image