2008-08-28

用 Yahoo Pipes 打造個人聯播列表 (Combine the feeds via Yahoo Pipes)

Link to Yahoo PipesYahoo Pipes 已於 2015/08 終止服務。
(Yahoo Pipes service was terminated 2015/08.)


因為成立了新的部落格,所以有了整合自己的 RSS Feeds,自己搞個阿布系列部落格聯播的想法。搜尋之下,既有服務太少也無法達成我個人想像中的需求,找啊找的,讓我發現了這個玩意兒 - Yahoo Pipes,自由度極高的 RSS Feeds 整合器,更強的是, Yahoo Pipes 不需要寫任何的程式碼,動動滑鼠把物件拉一拉組一組,一個自訂規格的 RSS Feeds 整合器就變出來了。

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

學東西最快的,就是自己下去動手實作,做中學,錯中改。所以,那些該自己去點去看去做功課的東西,Example 啦,Reference 啦,就不贅述了,直接一步一步來實作嚕。

我想像中我要的聯播列表長這樣:
  • [部落格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 來清掉所有的內容,這樣,吐出去的資料就是純標題的列表嚕。 前面都是準備工作,現在要把它們兜起來了。成立一個像當初構想的一樣的物件 AbuFeedCollectionYahoo Pipes AbuFeedCollection 因為大部分的工作都已經透過前兩個物件處理掉了,所以這邊整個介面很乾淨清爽,它只要負責把所有收到的資料整合之後,再做一次發布時間的反向排序,這樣就可以產生來自各部落格最新的文章列表了。 再來,Yahoo Pipes有提供各式各樣的發布方式,可以把產出來的資料以各種方式掛到想掛的地方去,或是直接用閱讀器訂閱也行。 Yahoo Pipes Use the Feeds Yahoo Pipes 這個服務真的蠻令人驚艷的,整個UI以及操作的感覺,真的是把 Web Programming 提升到一個境界。不過,想當然爾的,它有點挑瀏覽器,算是小小小小美中不足的地方。 兩個小小提醒,如果有編碼的問題,比方說是餵中文的 Feed,結果吐亂碼出來的這種腹瀉症狀,可以先餵給腸胃出嘞名的強壯的 FeedBurner 先消化一下是個解決問題的好方法。再來,就是在拉那些物件去組出想要的功能的時候,初心者要多注意輸出與輸入的資料型態會讓挫折感少些,比方說它要吃 String 的就別塞個 item 給它,漸漸玩上手之後,就可以多用點心思在物件的設計上,把事情做完之餘,也可以想想怎樣做得更好。

4 回應 :

你真的滿腦子程式噎!~!
by the way, 你怎找到我的flickr相簿?

唷唷唷~稀客稀客~歡迎歡迎熱烈歡迎~

不滿腦子程式的阿布就不是阿布嘞~哈哈~

BTW...妳的相簿我好像有整套的...XDD

匿名

哈摟阿布,
我用你的教學方法把我的好朋友們的RSS都串聯在一起了,十分感謝啊!!!

不過我一直搞不懂regex裡 勾選g s m i 是什麼意思
(因為我沒有學過寫程式啦.... :">)
希望你可以幫我說明一下 , 大感恩!!

順便分享我做好的pipes : http://pipes.yahoo.com/pipes/person.info?display=pipes&eyuid=8Ni7xvY5oW13_B4kh.p9WbRL

Hello~Cathy~

感謝妳的謬讚嚕!不過,妳的回應提醒了我一件事,前一陣子發現我的文章太長,會導致 Yahoo Pipes 跳錯,這對碎念成性的我是很大的困擾,雖然不致於影響最後的結果,一時又修復不了,但是因為龜毛的個性作祟,索性就把這篇文章分享的黑心連結全面下架了,一直忘了去修正,哈哈!

妳的問題的解答在這,關於 正規化表示式 Modifier 的說明。大致說明一下,g (不管出現幾次,全面取代),i (case-insensitive,無視大小寫的比對方式),而 s 與 m 分別指示對換行字元的處理。這在上面提供的正規化表示的介紹連結裡的更詳細說明的部份就有提到嚕。

然後,我去看了妳的自我介紹是資訊同行呢…有機會可以多交流嚕…這部份是職業病,有連結就一路追點,請多包涵…^^"

張貼留言

讓阿布知道你對這篇文章的想法吧!