讓你的網頁動態取得del.icio.us bookmark

, , , , at February 11th, 2007 by 小影

這個blog雖然一直有tag的功能,不過這都只是作者我所訂下的。在我迷上del.icio.us後我就想,如果能讓讀者都可以加tag那不是很有趣?是否有甚麼方法在網頁中顯示某一頁在del.icio.us中的tags、並讓用者可以自行加入更多的tags?

最先想到的是用五六年前己經使用的方法:用php讀取del.icio.us的網頁,再把結果處理顯示出來。幸好近幾年開放源碼和服務的風氣,一些主要的網路公司如Google、Yahoo己經開放他們的API,我們可以經WebService存取它們的資料。del.icio.us也不例外,它開放了一系列的Web Service,其中JSON的服務讓用戶用JavaScript經HTTP存取有關的資料。

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。易於人閱讀和編寫。同時也易於機器解析和生成。介紹JSON它的好處是簡單,沒有多餘的tags,使用起來的overhead比xml小得多當然,實際應用上許多人在用Ajax時也不會真的用到XML,然而不用XML而用XMLHttpRequest()不是很多餘嗎?,更重要的是所有支援JavaScript的browser也都支援JSON,使用上和一般JavaScript完全沒有分別!

以下是使用JSON向del.icio.us查詢一個網頁的tags的源碼這來自del.icio.us官方的示範:del.icio.us/help/json

{[.src-1 /enzymes/chili-js.php]}

使用後的效果如下圖,網頁會由del.icio.us顯示讀取信息並把結果顯示出來。

非同步的JSON

如果細心留意加了上面源碼的網頁,你會發現網頁載入到一半停了下來,要等一會才會完整顯示全頁。這是因為這樣讀取JavaScript不是「非同步(Asynchronous)」的動作,Browser要等完全載入整個script才會繼續處理餘下的頁面。我們希望browser首先載入整個網頁,再從外部讀取資料,在取得資料後再把它顯示出來。怎樣才可以用非同步的方式使用JSON?只要稍為更改源碼即可辦到:

放在網頁 < head > 裏的JavaScript:

{[.src-2 /enzymes/chili-js.php]}

以上源碼有三個function:

  1. callDelicious() :在文件的HEAD中加入一個SCRIPT的tag,效果是向del.icio.us存取資料,當完成後會呼叫displayDelicious()。留意當中呼叫的URL有一個MD5 hash了的URL,這是由於del.icio.us要求使用目標網頁的URL作key去讀取資料。我使用了Paul Johnson’s 的JavaScript MD5 Library把制作MD5。
  2. displayDelicious():在我們拿到del.icio.us的資料後,顯示輸出用的function
  3. addDelicious():讓用者增加del.icio.us bookmark的function
放在內文裏的HTML:

{[.src-3 /enzymes/xml.php]}

結語

以上只是基本的JSON應用,使用JSON輕鬆地做出AJAX一樣效果的動態網頁。如上文所說,除了del.icio.us外,如Google或Yahoo也有開放API讓用戶以JSON方式存取資料。如果你想開發Web Application,可以考慮用JSON取代笨重和兼容性低的XML/AJAX。如果你在研發Web Service請考慮加入支援JSON,因為那幾乎不花費任何人力又可以省下許多資源!

相關連結

(工作關系,這篇寫了停了整整一個月還沒有完工,趁有點時間終於攪定了…)

相關文章

  1. 1 Trackback(s)

  2. Apr 8, 2007: reality » Blog Archive » 我的軟件

Post a Comment