好讀版:
http://myweb.ncku.edu.tw/~c34031328/diary/obml.html
[Opera_mini] 是 opera 公司推出的適合手機的瀏覽器,
但其實 *她* 並不解析 [HTML] 。
她的運作必需依賴 Opera 公司的伺服器,
將網頁由 HTML 格式轉換成 **OBML** 格式;
同時大幅縮小網頁大小。
後再由 opera mini 解析、排版。
固她才可以 [繞過色情守門員] 。
[繞過色情守門員]: http://myweb.ncku.edu.tw/~c34031328/diary/man.html
OBML 格式全名 *Opera Binary Markup Language* ,
是由 opera 公司所開發,針對 HTML 簡化格式。
她並不全是文字,其中內含了一些二進位碼,
用來表示某段文字是的格式。(像超連結、標題、顏色。)
嘗試以純文字讀取會有部份亂碼。
(或全部亂碼。我以 [more] 或 [less] 讀取時
二進位會顯示為亂碼,文字就保有文字。
別的工具有沒有這麼聰明我就不確定了。)
另外我不知道為什麼,
我的 OBML 檔副檔名不是 `*.obml` , 而是 `*.obml16` .
反正沒差,可以看就好了,以下仍稱 `*.obml` .
但讀者請自行確認自己的是 `*.obml` 或 `*.obml16` .
## 前言 ##
在舊手機上只用 opera mini .
而又舊手機除了上網也沒什麼能做的;
固上面就積了一堆 *儲存* 來離線看的網頁。
最近換手機,想把這 *脫拉庫* 東西抓出來,
轉換成方便的格式。於是搜尋了一下,記錄流程。
## 取出 obml 檔 ##
首先取得 root 權限;沒有的話用 adb 也可以。
( adb 能取得 root 權限。)
目標是把存在內部空間的 obml 檔複製出來。
以我來說路徑是:
`/data/data/com.opera.mini.android/files/*.obml`
我的檔案名是一串七或八個數字,副檔名 obml .
### 使用 adb ###
** 無須 root 權限 **
$ adb root pull "/data/data/com.opera.mini.android/files"
# 拉出整個目錄
$ adb root pull "/data/data/com.opera.mini.android/files/*.obml"
# 拉出特定檔案
不會 adb 的請自己 google.
( 或等我有空寫一篇文章;但不做別人做過的事是我的原則:P
網路上這麼多教學了……。)
### 使用 root explore ###
** 必須取得 root 權限 **
隨便找一款支援 root 的檔案管理員,
進到你的 opera mini 的資料夾。
四處看看,把副檔名是 obml 的檔案都複製到 sdcard
或其它你方便的地方。
然後再複製回電腦裡。
## 將 `*.obml` 轉換成 `*.html` ##
google 大神與 SlackOverFlow ,
都只推薦用 Java 虛擬機器可以在電腦跑 Opera mini .
但我認為這樣還是很不方便。
希望可以轉成 HTML , PDF , 或者純文字也可以。
於是在 github 上找到這東西: [obml-parser] .
可以把 OBML 轉換回 HTML .
(同場加映,同位作者寫的 [OBML 語法介紹] 。
如果有興趣的話可以讀。)
[obml-parser]: https://github.com/grawity/hacks/blob/master/hacks/Text/obml-parser
[OBML 語法介紹]: https://gist.github.com/grawity/702b31cddcc5a6622724/a00d1b072e7d7344488e4d1b6cae7ab3a14b2399
** 用 [python] 寫得,所以你得要有 python 才行。 **
(或等某個好心人把它轉成可執行檔;
"" 別看我,我不會 python . "" )
請用 python3 或以上,我也不知道為什麼。
"" 我說過我不會 python. ""
因為我 [fedora] 23 , 直接打 python 是對應到 python2.X ,
然後 python2.X 說我的檔案沒有宣告編碼。(???)
python3 就不會;所以我指令下 python3 .
(感覺是如果檔案內有用到 *非 ASCII* 要宣告,
不然 python2.X 直譯器會報錯。)
python3 obml-parser *.obml
ls # 顯示 *.obml *.obml.html
# 原本只有 `*.obml` ,
# 多出 `*.obml.html` .
在放 obml 的目錄下會生成一個
`*.obml.html` 的檔案,
可以直接用瀏覽器看。
## 糟糕的 HTML ##
打開後和用 opera mini 看一樣……;
就是只有 6, 7 公分寬, [像這樣] 。
如果不給看或看起來很奇怪,可以看一下原始碼。
它的 HTML 很糟……,完全沒有結構。
(沒有 `<html>` , `<head>` , `<body>` , 全部混在一起。)
[像這樣]: http://myweb.ncku.edu.tw/~c34031328/study/html/opera_mini/54613806.obml16.html
而且還宣告了 `<!DOCTYPE html>` ...,
要求瀏覽器以標準的語法來剖析該文件。
(如果沒有宣告,瀏覽器會以 [怪異模式] 來剖析 HTML .
這樣就算語法不正確,看起來也 *還可以* 。)
### tidy 拯救混亂的 HTML ###
[tidy] 是 w3c 開啟的一開源專案,
該程式會嘗試修正不正確的 HTML 語法;
並重新排版。如果你的瀏覽很挑食,
拒絕 *obml-parser* 所生出的 HTML ,
可以試試這招。
"" 雖然我的 firefox 看起來都一樣。 ""
tidy 前:
http://myweb.ncku.edu.tw/~c34031328/study/html/opera_mini/54613806.obml16.tidy.html
tidy 後:
http://myweb.ncku.edu.tw/~c34031328/study/html/opera_mini/54613806.obml16.html
** 注意! **
*我的版本* 的 tidy 會預設將輸入視為 ASCII ,
但很遺憾 *obml-parser* 所轉出來的是 **UTF-8** .
所以你需要指定編碼;或指定不處理編碼問題。
tidy -raw *.obml.html > *.obml.tidy.html
# 不處理編碼
tidy -utf8 *.obml.html > *.obml.tidy.html
# 指定 UTF-8