2012-11-30 49 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