如何在维基媒体标记中构建维基百科[[File:...]]标记的完整URL?

时间:2012-11-30 03:29:54

标签: wikipedia wikimedia

根据维基媒体标记中的[[File:...]]标记或信息框|image=...行,维基百科使用什么逻辑来生成文章中图像的完整网址?

网址似乎始终以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

有没有办法以编程方式确定网址的/6/6a部分,还是维基百科服务器上的查找?

另一个例子,在信息框中:

|image = Jordan Lipofsky.jpg

的产率:

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

可以预测网址的/b/b3部分吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

原来它是从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