顯示具有 Pipes 標籤的文章。 顯示所有文章
顯示具有 Pipes 標籤的文章。 顯示所有文章

2009年3月20日 星期五

Yahoo Pipes (Combine the feeds via Yahoo Pipes)



http://pipes.yahoo.com

http://abu.tw/2008/08/yahoo-pipes.html


Yahoo Pipes,自由度極高的 RSS Feeds 整合器,更強的是, Yahoo Pipes 不需要寫任何的程式碼,動動滑鼠把物件拉一拉組一組,一個自訂規格的 RSS Feeds 整合器就變出來了。

不過,Yahoo Pipes 難也難在不能自己寫程式,沒辦法自己動手去做一些小幅的微調,不過,基本上都可以靠物件兜來兜去完成所想要的功能。各個物件也都有範例與說明以及其它人做的已經做好 Publish 出來的 pipes 可供參考。

我想像中我要的聯播列表長這樣:
  • [部落格A] 文章標題1
  • [部落格B] 文章標題2
  • [部落格A] 文章標題3
  • [部落格C] 文章標題4
  • [部落格A] 文章標題5
簡單來說,有個部落格標題作為標題前綴,然後依發布的時間排序。


Yahoo Pipes 最粗略地用物件表達就是像這樣:
Thinking in Yahoo Pipes 初步構想
它吐出來的資料就像這樣:
  • 文章標題1
    內文描述(item.description)
  • 文章標題2
    內文描述
  • 文章標題3
    內文描述
  • 文章標題4
    內文描述
  • 文章標題5
    內文描述

可以看到,我們有幾個 Fetch Feed 是極為相似的,只是抓取的來源不同,以及我可能分別要給它們不同的標題前綴。所以,異中求同,我建立一個物件 AbuFeedCore 來專責處理抓取資料及處理標題的動作。


物件 AbuFeedCore 需要給三個參數:
  1. Feed Title : 標題前綴
  2. Feed URL : 資料源位址
  3. Item Count : 想要的資料筆數
Yahoo Pipes AbuFeedCore
動作很簡單,就是把 Feed 資料讀進來,紅框部份的 Regex 物件就是最主要的,以正規化表示來處理標題字串成為想要的樣子。有興趣研究正規化表示式的,可以參考這篇「Regular expressions in Perl」。再來,依發布時間反向排序然後取回指定的資料筆數,這樣就完成了取資料源資料的核心物件嚕。

再來,我只想要我的聯播內出現標題(item.title),所以,想要把內文描述(item.description)過濾掉,所以我做了一個 AbuFeedTitles 物件來處理這個動作。

物件 AbuFeedTitles 的資料來源是倚賴先前所建立的 AbuFeedCore 物件,故同樣需要給三個參數:
  1. Feed Title : 標題前綴
  2. Feed URL : 資料源位址
  3. Item Count : 想要的資料筆數
Yahoo Pipes AbuFeedTitles
可以看到變數其實是拿去餵給裡面所加入的AbuFeedCore 物件,取回資料之後,再把內文描述(item.description)用 Regex 來清掉所有的內容,這樣,吐出去的資料就是純標題的列表嚕。

前面都是準備工作,現在要把它們兜起來了。成立一個像當初構想的一樣的物件 AbuFeedCollection

Yahoo Pipes AbuFeedCollection
因為大部分的工作都已經透過前兩個物件處理掉了,所以這邊整個介面很乾淨清爽,它只要負責把所有收到的資料整合之後,再做一次發布時間的反向排序,這樣就可以產生來自各部落格最新的文章列表了。

再來,Yahoo Pipes有提供各式各樣的發布方式,可以把產出來的資料以各種方式掛到想掛的地方去,或是直接用閱讀器訂閱也行。
Yahoo Pipes Use the Feeds

Yahoo Pipes 這個服務真的蠻令人驚艷的,整個UI以及操作的感覺,真的是把 Web Programming 提升到一個境界。不過,想當然爾的,它有點挑瀏覽器,算是小小小小美中不足的地方。

兩個小小提醒,如果有編碼的問題,比方說是餵中文的 Feed,結果吐亂碼出來的這種腹瀉症狀,可以先餵給腸胃出嘞名的強壯的 FeedBurner 先消化一下是個解決問題的好方法。再來,就是在拉那些物件去組出想要的功能的時候,初心者要多注意輸出與輸入的資料型態會讓挫折感少些,比方說它要吃 String 的就別塞個 item 給它,漸漸玩上手之後,就可以多用點心思在物件的設計上,把事情做完之餘,也可以想想怎樣做得更好。