根据维基媒体标记中的[[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
部分吗?
谢谢!
答案 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