用迂迴方法為 BBS 訂 RSS

自從 news.isu.edu.tw 中止服務後,一堆 BBS 小站的轉信跟著斷炊。這篇紀錄如何為 BBS 引入 RSS 當作代餐,使用的 BBS 版本是 M3 (itoc 維護版)*截自目前這方法並不實用*

在使用 bmtad 之下,BBS 有所謂的「寄至板面」功能,可以藉由發送 email 來達成發表文章。站內使用者可以其註冊時使用的 email address 發送想要發表的文章至 {board_name}.brd@{site_name} (例如 test.brd@nonexistbbs 會將文章發佈至 test 看板)。

而藉由 rss2email 之類的程式,就可以迂迴為指定的看板訂閱 RSS。在 Debian GNU/Linux 的套件庫當中已經收錄了 rss2email,所以我就懶到底直接拿來用 (apt-get install rss2email)。

裝好之後,記得從 /usr/share/doc/rss2email/examples/ 把 config.py 複製到 .rss2email 裡。之後根據需求修改:

  • DEFAULT_FROM = “您註冊時使用的 email address”
  • FORCE_FROM = 1
  • SMTP_SEND = 1
  • SMTP_SERVER = “SMTP 伺服器名稱:埠號” (如果是使用 GMail 則為 “smtp.gmail.com:587”)
  • AUTHREQUIRED = 1
  • SMTP_USER = ‘信箱帳號’
  • SMTP_PASS = ‘信箱密碼’
  • CHARSET_LIST=’BIG5′, ‘US-ASCII’, ‘ISO-2022-JP’, ‘ISO-8859-1’, ‘UTF-8’ (讓 Big5 排首位,避免 bmtad 退回)

(因為牽涉到密碼資訊,如果您跑 rss2email 的機器是多人共用的,請注意 .rss2email 之下的權限設定。)

再來略為修改一下 /usr/share/rss2email/rss2email.py,為的是要讓寄件人、標題改用 Big5 編碼 (雖然有人會認為這樣直接修改程式太 dirty):

  • sender_name = str(Header(unicode(sender_name), header_charset)) 改為 sender_name = str(Header(sender_name.encode(‘big5’), header_charset))
  • msg[‘Subject’] = Header(unicode(subject), header_charset) 改為 msg[‘Subject’] = Header(subject.encode(‘big5’), header_charset)

之後就可以 r2e 訂閱一些想看的 RSS feeds 至不同的版面,然後放進 crontab 用適當的週期去 check 新進文章。這邊要注意的是 bmtad 會抓 SPAM,所以時間週期要拿捏得好,或是去修改 bmtad 另外做特別的判定。

雖然 rss2email 有換行的排版選項 (BODY_WIDTH),但是實際的排版效果不太理想,原因在於 Python 是真正將一個中文字當成一個字,所以 BODY_WIDTH 設為 36 對中文文章來說還不錯,對英文文章卻排得像是短詩。

遇到 Big5 範圍外的字,rss2email 也會直接將文章內容轉以 Unicode 發送,然後就被 bmtad 退回。

目前這樣子做出來的效果只是勉強塞一點戰備口糧給沒信可轉的 BBS 站一點東西吃,要到軍罐或辦伙等級的話,就要再刻一些程式了,當然若能直接由 BBS 系統抓 feeds 是最好的。


已發佈

分類:

作者:

標籤: