2009年11月29日 星期日

混搭訂閱多個 rss


*** !!程式改寫; 本篇作廢!! ***
請見新版: 「multi-feeds : 手工自製 rss 過濾混搭器」



[2010/10/14 更新, 增加一個例子 "公民新聞", 並且將所有下載檔案合併在一起, 打包成一個壓縮檔。]

除了自己部落格的留言之外, 我一直沒有很認真地訂閱 rss。 新聞網站更新太快, 與其訂閱, 不如直接連到新聞網站首頁去看, 反正閒暇閱讀的時間通常都趕不上新聞推出的速度。 另一方面, 喜歡的部落格有好幾個, 每個部落格貼文頻率可能較低, 如果每個都訂閱, 一則太囉嗦, 二則多半時候看到的都是沒有動靜。 對於後者, 如果能把好幾個 (更新速率不太快的) rss 混搭起來聯合訂閱成一串, 就太完美了。 用 rss mix 搜尋, 找到 10 Tools to Combine, Mix, Blend Multiple RSS Feeds。 網路上有不少現成的混搭服務: 到這些網站上填入幾個你有興趣的 rss 來源, 及一些設定資料, 他就幫你產生一個單獨的混搭 rss, 不管來源, 全部按時間排序。 不過我沒看到任何一個允許你事後修改設定。 所以只好改找現成的 php 函式庫, 自己動手呼叫。

其實好一陣子以前就已經開始在自己的首頁採用 SimplePie 函式庫顯示部落格的最新文章, 只是先前一直懶得寫程式把幾個 rss 的內容混搭起來。 這個週末才發現: SimplePie 太強了, 不必自己動手, 它自動會幫你混搭。

  1. 請先參考幾個成果示範: 「資訊人權貴之家」 的 「最新幾篇短文」﹑ 「阿貴訂閱清單」「公民新聞」。 (最後這個的原始碼最簡單乾淨, 建議新手從這個改起。)
  2. 下載上述幾個檔案的原始碼, 並解壓縮。 裡面已經包含 SimplePie。 因為配合整個網站的配置, 這幾個檔案被我分散放在各個子目錄下; 但其實你也可以把所有檔案放在同一個目錄下, 並且更正 php 檔裡面的 "require_once" (意思類似 "include") 把多餘的路徑去除掉。
  3. 稍微修改我寫的小小副程式 multi-feeds.php: 這一段
    
            $feed = new SimplePie(
                $feeds,
                preg_replace('#/[^/]*/$#', '/php-cache', $top[fs]),
                3600
            );
    
    裡面最長的那一句 preg_...[fs]), 目的是要從一個全域變數 $top[fs] 開始做代換, 算出一個路徑。 太囉嗦, 可以刪掉。 把它改成 '/home/ckhung/php-cache' 之類的一個表示路徑的簡單字串, 讓 SimplePie 可以存放暫存檔。 該目錄權的限必須完全開放 (777)。
  4. 把幾個範例檔裡面的 $feed_sources 和 $feed_titles 及前後那幾句, 貼到你的 php 網頁裡面, 並稍作修改:
    1. $feed_sources 填入你想訂閱的數個 rss 來源。
    2. $feed_titles 填入來源名稱 (全名若太長, 可以只截取獨特﹑ 可視別的連續一小段) 及你希望它顯示的簡稱。
    3. 呼叫 multi_feeds 時, 第一個參數是希望顯示的條目個數。 若你的輸出網頁不是採 utf8 編碼, 則必須在最後面多加一個參數, 例如 'big5'。

其實應該可以用 favicon 取代 「簡稱」 來顯示每個條目的來源。 不過... 以後有空再研究吧。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。