2012-11-30 34 views
1

鉴于维基媒体标记中的[[File:...]]标记或信息框|image=...行,维基百科使用什么逻辑来为文章中的图像生成完整URL?如何在维基百科标记中构建完整的URL [[File:...]]标记?

该网址似乎总是以http://upload.wikimedia.org/wikipedia/commons/开头,然后是两个似乎不可预测的网址片段,以及可以从标签预测的图片名称。

例如,

[[File:Michael Jordan UNC Jersey cropped.jpg|thumb|left|Michael Jordan's jersey in the rafters of The [[Dean Smith Center]]]] 

产量:

http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Michael_Jordan_UNC_Jersey_cropped.jpg/220px-Michael_Jordan_UNC_Jersey_cropped.jpg 

有什么方法以编程方式确定URL的/6/6a一部分,或者这是一个维基百科的服务器上查找?

又如,在信息框:

|image = Jordan Lipofsky.jpg 

收率:

http://upload.wikimedia.org/wikipedia/commons/b/b3/Jordan_Lipofsky.jpg 

可以将URL的/b/b3部分来预测?

谢谢!

+1

编程方式源自哪里?外部应用程序? MediaWiki扩展?在维基百科上运行的JavaScript脚本? – svick

+0

维基百科背后的软件被称为[MediaWiki](https://mediawiki.org/);有一个名为['$ wgHashedUploadDirectory'](https://www.mediawiki.org/wiki/Manual:$wgHashedUploadDirectory)的配置变量,在启用了上传功能的Wikimedia Wiki中设置为true。 –

回答

1

发现它是从MD5哈希生成的。类似于Scala中的以下内容可以工作 - 尽管我不确定如何预测它是在/ commons还是in/en。

import org.apache.commons.codec.digest.DigestUtils 
def getImageUrl(fileName: String, rootUrl: String): String = { 

    val messageDigest = DigestUtils.md5Hex(fileName.replace(" ", "_")) 
    val md5 = messageDigest 

    val hash1 = md5.substring(0, 1) 
    val hash2 = md5.substring(0, 2) 

    rootUrl + hash1 + "/" + hash2 + "/" + fileName 

} 

小心前导零,因为这里讨论:

Does wikipedia use different methods to compute the hash part of an image path?

http://lists.wikimedia.org/pipermail/mediawiki-api/2011-December/thread.html#2446

+1

我在#wikimedia IRC听说没有办法预测图像是在/ commons还是/ en,所以你需要询问API,或者猜测并检查。 – mrjf