2008年1月13日

Multiple labels or tags search

目前很多網站及部落格都有提供使用標籤來分類文章的功能,對於以網頁提供服務的方式,這是傳統目錄分類方式的合理替代品。在瀏覽部落格時,常會想要找出符合多個標籤的文章,但網站上通常都沒有明確的說明如何做到,只把標籤當作類似單層的目錄來使用。

以下是我目前知道的多標籤查詢方法:

1. Technorati

在 Advanced Serch 中,Tag Search 好像可以做多個標籤邏輯組合的搜尋(使用AND、OR、NOT,空白似乎代表AND,標籤中有空白的話可用雙引號「"」將標籤包起來),但是介面上缺少只搜尋某個網站文章的功能,但是上面的 Keyword Search 卻有這項功能,使用的參數名稱是from,於是試著自己加看看,結果竟然成功了。

例如要搜尋 Ajaxian.com 上包含 jQuery 和 Prototype 標籤的文章(標籤的大小寫好像無關,這點跟一些部落格上的查詢好像有差),可以在網址列上輸入 http://technorati.com/tag/jQuery+AND+prototype?authority=n&language=n&from=http://ajaxian.com/ (中間用 jQuery+prototype 也可以)。

可惜的是查詢結果的 feed 及網站所提供的 Tag Query API 無法用上面的參數得到限制網站的結果,不過或許還有隱藏秘技沒被發現,有了這些資訊,要自己做一個多標籤限制網站的Technorati搜尋介面應該不難。

另外有的部落格較舊的文章在 Technorati 上找不到。(ps. 關於 Technorati 有一些問題,例如如何與部落格同步增減標籤及文章,或著如何以人工方式做到,如果有人知道希望能分享一下)

2. Blogger Data API(for Blogger.com 的 blog )

Blogger Data API 是 Google Data API 的一個分支,提供以 feed 的格式存取 blog 資料的功能,其中包括查詢多個標籤文章的功能,例如要查詢本站包含 Javascript 和 Cross Domain 標籤的文章,可以輸入 http://happytemplate.blogspot.com/feeds/posts/summary/-/Javascript/Cross%20Domain

要注意的是標籤的大小寫要一致,並且要經過 UTF-8 編碼,目前只支援 AND 的功能,用「/」表示。另外網頁上所列的查詢參數有一些錯誤,orderby 的值可以是 published(發佈)或 updated(更新),updated-min 和 updated-max 要與 orderby=updated 一起用才會有效,日期時間的值似乎不能加後面的時區(與 Google Data API 上說的不一樣),以上這些可在討論群組中找到。

利用這些資訊,練習寫了一個 Multiple labels search,放在側邊欄:

  • 多個標籤的 AND 以「/」表示,標籤與/之間不能有空白,例如:Javascript/Cross Domain
  • 本站查詢可以從下方標籤雲以拖拉的方式輸入
  • 可以查詢其他 Blogger.com 的 blog
  • 日期格式為YYYY-MM-DD,會跳出月曆方便選擇,不接受時間
  • 為了方便,日期範圍統一依照排序方式為發佈日期或更新日期
  • 顯示的日期時間以查詢目標網站的時區為主,不做轉換

程式方面的感想:

  • 使用 dynamic script sag 及 JSONP 方式取得資料,若是查詢失敗或產生的網址有錯,script tag 的 onload 事件好像不會觸發,所以使用 timer 來刪除失敗時的 script tag,不知道是否有更好的方法,另外不知是否有辦法取得 script tag 所載入的內容。
  • IE 真的很難搞,連簡單的產生並設定 DOM 物件的屬性的都會有問題,根據網路上的討論,似乎短時間內還不會改變。
  • 放在 Google project hosting 的 download 中的 css 檔似乎無法在網頁中直接連結,還不知道原因。
  • 會再用 Google AJAX Feed API 試試看。
  • Yahoo PipesFilter operator 也可以用來過濾標籤,但是對於 Atom 格式的 feed 會有問題,未深入研究,不知怎樣將參數導入 Filter operator。

2 則留言:

  1. 真是太神了,這個功真是看到傻眼。不知可否多分享這類的教學文,或是程式碼讓大家也能享受同樣的新功能呢?

    回覆刪除
  2. +1 我也想知道Mult tags search的程式碼。

    http://www.go2web20.net/
    像這個網站的tag功能很實用。

    回覆刪除