用 TH-55 看 bloglines
PalmIsLife 的阿輝在這篇《[交流] RSS Web Host 很適合在 PDA 上瀏覽》介紹了如何使用他的 Treo 650 看 Bloglines,我才知道,原來 Bloglines 有提供 mobile 版本,如果搭配 data stream 吃到飽的 3G 門號的話,非常地吸引人。 所以我就提了兩個問題如下:
- 我直接用 TH-55 連上 Bloglines,畫面仍然是分
<frame>的,並沒有出現適合 PDA 閱讀的畫面版本。請問阿輝是直接連就可以了嗎?還是用 PDA 專用的 Bloglines 網址?我的 TH-55 的瀏覽器是 NetFront v3.1 r2.0.26 (en)。 - 大多數的 Blog 以及 Bloglines 的網頁皆是採用 UTF-8 編碼。請問阿輝的 PDA 畫面能夠正常顯示中文,是因為有裝「Unicode 補完計畫」的關係嗎?還是用了其他特殊的技巧?
阿輝的解答是,對於第一個問題,他直接上就可以了,所以 Bloglines 沒辦法偵測我用的 NetFront v3.1,自動切換成 mobile 模式。不過還好 cooltony 給了我這個網址:
把玩了一下,確定了只要透過 HTTP GET 傳 mobile=1 的參數過去,以後的所有存取,通通會變成 mobile 模式,反之則用 nomobile=1 將 Bloglines的首頁網址改成 http://www.bloglines.com/?mobile=1 存在 PDA 的書籤裡,就可以解決這個問題。
至於第二個問題,阿輝是說他是靠 Treo 650 的新韌體直接得到 UTF-8 中文支援。對於不是使用 Treo 650 的朋友,就沒辦法直接看大部分都是 UTF-8 編碼的 blog 了。因此,我只好自己簡單寫一個 http proxy 將 UTF-8 資料轉成 big5。這個用 Perl 的 HTTP::Proxy 可以很方便的解決。
基本上有以下幾件事情要做:
- 只針對
text/html資料作轉碼。 - HTML tag 裡也要轉碼,因為包括
title、alt等屬性裡也可能會有 UTF-8 中文字的存在。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">與其變形要轉成<meta http-equiv="Content-Type" content="text/html; charset=big5">- HTTP header 裡如果有宣告 charset,理論上也應該修正,不過因為很少人用,所以我就省掉這一項了。
第一次搞的時候,弄了很久都沒辦法連上自己的 proxy,剛剛第二次研究,才發現 HTTP::Proxy 的 host 屬性指定可以從哪些 host 連過來,或是設成 undef 不做任何限制,要不然預設只有 localhost 可以連。問題解決後,程式很快就改好了,如下:
#!/usr/bin/perl -w
use Text::Iconv;use HTTP::Proxy;use HTTP::Proxy::BodyFilter;use HTTP::Proxy::BodyFilter::tags;use HTTP::Proxy::BodyFilter::htmltext;
my $ic = Text::Iconv->new('UTF-8', 'CP950');$ic->raise_error(0);
{ package Big5ToUTF8_Filter; use base qw(HTTP::Proxy::BodyFilter);
sub filter { my ($self, $dataref, $message, $protocol, $buffer) = @_; $dataref =~ s/<meta\s+http-equiv="Content-Type"\s+content="text\/html; charset=utf-8">/<meta http-equiv="Content-Type" content="text\/html; charset=big5">/o; $dataref = $ic->convert($dataref); }}
my $proxy = HTTP::Proxy->new(host => undef, port => 63128);
$proxy->logmask(HTTP::Proxy::ALL);$proxy->logfh(*STDERR);
$proxy->push_filter( mime => 'text/html', response => HTTP::Proxy::BodyFilter::tags->new(), response => Big5ToUTF8_Filter->new());
$proxy->start();
因為是使用 Text::Iconv 做轉碼,所以不一定要用 Perl 5.8.6 以上才能跑。使用的方法為,在 NetFront v3.1 的 Options -> NetFront Settings 的第二頁,把 Use Proxy 勾起來,填入 proxy 的網址,就可以看 UTF-8 的 Bloglines 了。自己測試,沒什麼問題,有興趣的朋友,可以把 proxy 設到 140.113.72.2:63130 試試看。 目前只是簡單測試,未來還要改成只針對 UTF-8 的網頁做轉碼,原本是 big5 的就不要轉了,如果是其他編碼,如 gb2312,就轉址到某說明網頁去,如此才完整。另外,為避免 proxy 被擠爆,可能還必須加上 access control 的機制。
2 Comments
QuickNews這個軟體的proxy port只能設定四個數字, 63130太長了 >_<
不是自己的機器,所以不方便用小一點的 port。程式也可以在 win32 上跑,裝個 ActivePerl 即可。BSD license 或是 cc-by,有需要請自助囉。
Post a Comment