1

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

url 似乎总是以 开头http://upload.wikimedia.org/wikipedia/commons/,后跟两个似乎不可预测的 url 段,再加上可以从标签中预测的图像名称。

例如,

[[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/6aurl 的一部分,或者这是在维基百科服务器上的查找?

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

|image = Jordan Lipofsky.jpg

产量:

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

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

谢谢!

4

1 回答 1

2

原来它是从 MD5 哈希生成的。Scala 中类似下面的东西会起作用——尽管我不确定如何预测它是在 /commons 中还是在 /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

}

小心前导零,如此处所述:

维基百科是否使用不同的方法来计算图像路径的哈希部分?

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

于 2012-11-30T22:26:46.120 回答