今天早上在半夢半醒的狀態下偶然看到Sourceforge的「本月計畫」(Project of the Month)為Kiwix。根據介紹,它是一個可以設計來讓使用者可以在離線的狀態下閱讀維基百科。這樣的設計相當棒:有電腦,無聊,但又沒有網路,就可以靠它來消磨時間了!更棒的是,對於居住在網路不是這麼普及地區的人們來說,這可說是一大福音!
Kiwix是一個zim檔案讀取程式。Zim格式是一種高度壓縮的開放檔案格式(請參考這裡),被設計來保存網頁以及相關的檔案。Kiwix會把zim檔案打開,然後適當的呈現其內容。
Kiwix的官方網站很好心的提供了一些wikipedia zim檔案,然而不幸的是,kiwix官方網站上面所提供的wiki zim檔案相當老舊並且難以下載。(當然,難以下載的理由可能是kiwix榮登Sourceforge的本月軟體,被大幅廣告了。)這便讓我想到,我有沒有可能自己進行這樣的轉換,或者說,我有沒有辦法作一個類似的軟體?
如果要轉換的話,勢必要了解wikipedia dump的檔案格式(見這裡),以及zim檔案格式(見這裡)。當然,如果只是想製作一個閱讀器,則了解前者的格式並使用恰當的方式呈現即可。
基於好奇心(我很好奇!),我把在dump中所列出的dump file分割檔中的最小的那一個打包帶回家(enwiki-20130204-pages-articles1.xml-p000000010p000010000.bz2)。解開來後,就像Wikipedia說的一樣,得到了一個xml檔案。裡面有許多Wikipedia上的頁面、頁面資訊(metadata),以及文章內容。不意外的文章內容使用了wiki markup來表示。也就是說,如果我要製作一個閱讀程式,那麼我會需要去處理wiki markup。或許把wiki markup轉換成html很棒,但latex或docbook感覺起來也還行。把wiki markup分析完成之後,要把文字格式化,並且放在正確的位置上,然後把圖片貼好(放在正確的位置上)...對喔還有圖片,我沒有想到這點,那圖片要怎麼辦?
問題大了..搜尋了一下剛帶回家的xml檔案,完全沒有圖片!下第二包看看?好像也沒有..真詭異。上網搜尋後發現了一個可以找所有圖片的軟體wikix(請參考這裡,有原始碼可供使用),它從圖檔名稱推斷出該圖檔在Wikipedia common的位置,然後把它下載下來。
如果說在wiki markup中看到如下的內容
[[File:Alexandra Palace 052.jpg|thumb|upright|A [[blue plaque]] at [[Alexandra Palace]] commemorating the world's first public broadcast of high-definition television]]那麼,我們先把空白換成底線(_),然後計算
Alexandra_Palace_052.jpg
的md5 checksum:
$ echo -n Alexandra_Palace_052.jpg | md5sum 98ecfaed9ac7c5cf5998ffdf46e07a26 -假設圖片儲存在http://upload.wikimedia.org/wikipedia/commons/網站上,則該圖片的完整路徑會是:
http://upload.wikimedia.org/wikipedia/commons/9/98/Alexandra_Palace_052.jpg好了,圖片的問題解決了,那接下來就是wiki markup的處理了。希望不會太難。
沒有留言:
張貼留言