2007/4/27

Pipes: 含有文章標題的 blogger 近期迴響

Pipes 再強一點的話我會瘋狂愛上她。

之前在近期迴響那篇文章裡,我修改了水瓶子的程式來完成本站近期迴響功能,那段程式裡呼叫了兩次 Blogger 的 JSON,並且在客戶端採用 JavaScript 進行比對。這樣沒什麼不好,只是慢了點,會稍稍拖延一下時間才顯示出來。

那麼,由於小梅子召喚我研究一下 Yahoo! Pipes, 這幾天瘋狂地燃燒青春,總算也... 撞了好幾次牆碰上非常多限制。目前的 Pipes 如果沒有其他能輸出 RSS/JSON/XML 的 API 協助,能做的事情實在是不多。講到能輸出 RSS/JSON 的 API 當然不能忘記 Google,所以我重新思考、能不能把這個「呼叫兩次 JSON、在客戶端比對」的工作交給 Pipes?那麼 JavaScript 的使用量將可達到最小,修改起來也方便。(瓦特比:我想起來了想起來了 orz... 抱歉,文後立刻改給你)

所以這是成品:Blogger: Recent comments with post title,裡頭另外使用了以 blogger 網址查詢標題這個 Pipe,歡迎試用,輸出的結果可為 RSS 或 JSON。另外本站也會評估一下是否改用這玩意。

幾個過程中的心得分享:

  • 其實如果你的 Blogger 網頁是標準 XHTML,那麼以網址查標題就是非常簡單的事情... 不過,由於 Pipes 不能支援「將資料來源的一部份另做他用」,所以直接擷取 XHTML 網頁的結果或許也不會比較好,太肥了。
  • 如果有需要修改某個資料值的話,可以用 Rename 這個模組來「備份」原值;如果有需要以某資料值「覆蓋」另一資料值,也用 Rename(改成要覆蓋過去的名稱即可)
  • 雖然要求使用者輸入網址型態的東西,但以 Text Input 會比用 URL Input 來得靈活。
  • Pipes 是懶人的好朋友,特別適合我這種半調子程式設計師使用。
  • Venkman 是 JavaScript developer 的好朋友。

那麼很快修改一下 Waterbee 要的東西:

<div id="divrc">讀取中請稍候</div>
<script type="text/javascript">
var showcomments = 5;

function recentCommentsLayout(json){  
  var g_bc_comments = json.value.items;
  var insert_block = "";

  for (var i=0,comment; comment=g_bc_comments[i]; i++)
  {
    i_author = comment.author;
    i_link = comment.link;
    i_date = comment["atom:updated"].substr(0,10);
    insert_block += '<li><a href="'+i_link+'">RE: '+ comment.title +'</a><br/>'+i_author+' ['+i_date+']</li>' ; //好懷念 sprintf
  }
  
  document.getElementById('divrc').innerHTML='<ul class="feedItemListDisplay">'+insert_block+'</ul>';

}

document.write('<script type="text/javascript" src="http://pipes.yahoo.com/pipes/pipe.run?numberofcomments=' + showcomments + '&bloggerDomainName=blog.bobchao.net&_id=ap0h_4Ty2xGSOEJ5X0sBXw&_run=1&_render=json&_callback=recentCommentsLayout"/>');
</script>

這樣應該就可以了,如果需要修改樣式,請找 insert_block 那行。

Technorati Tags: ,

1 則留言:

  1. 發生一件奇怪的事,
    我把最新回應改成你給的之後,
    Newsbar 不見了,
    footer 跑上來了。
    只好改回原來的...

    回覆刪除

歡迎留下您的意見