[教學] 使用 YQL 跨網域讀取網站內容

2011年3月6日

許多 Mashup 網站經常需要跨網域存取(多個)外部網站資料,如果該資料來源網站沒有提供 JavaScript API 的話,由於 JavaScript 原生的安全性限制,這些動作都必須繞道 Server 端的 Proxy。這個雞肋的步驟很容易澆熄開發者的熱情,特別是對前端工程師 (Front-end Engineer, F2E) 來說更是如此。

您的煩惱 YQL 聽到了!Yahoo! 查詢語言 (Yahoo! Query Language, YQL)解決了這個惱人的問題。YQL 將整個網路的公開內容視為一個巨大的資料庫,每個網頁就是一個概念上的 "Table"。YQL 的概念可以用以下這段 SQL 語法說明:
select * from internet

開始使用 YQL

YQL 提供了完整的官方文件,但學習 YQL 可以從更簡單的 YQL Console 開始。


三個步驟開始 YQL Console
  1. 左上方的空白欄位輸入 YQL 語法。YQL 的語法長得很像 SQL ,非常很容易讀寫。初學者可以參考右方列出的的語法範例。以下是一段簡單的 YQL 範例,列出 Flickr 的前10筆搜尋結果:
    select * from flickr.photos.search
    where
    text="Cat" limit 10

  2. YQL 提供 XML/JSON 兩種回傳格式,如果是 JSON 還可以加上 callback function。選擇回傳的格式後,按下黃色的 "TEST" 按鈕開始抓資料。YQL 的最長回應時間為 30 秒,通常不會太慢,不過實際速度得視目標網站的回應時間而定。
  3. 回傳的結果(XML/JSON)顯示於下方的欄位。

使用 YQL 預設的 DataTable

了解了 YQL 語法後,可先別急著動手寫語法。YQL 內建了 1000 個以上的 DataTable ,包含 amazon, ebay, netflix, flickr, github, imdb 甚至 Google 部分的 API 等,這個列表可以在 YQL Console 的右下方找到,節省開發者的時間:


使用 YQL 抓取公開網站資料

除了內建的 DataTable 外,所有的公開網站都在 YQL 處理的範圍。例如以下的語法可以取得博客來網路書店的「本月新書排行」榜:
select * from html
where url="http://www.books.com.tw/books/new/79newbooks.php"
and
xpath='//*[@id="right"]'


值得注意的是,YQL 會讀取目標網站 robot.txt,如果該網站不願意被抓資料的話,可以在這裡拒絕 YQL。

小結

YQL 提供了簡單的介面讓開發者跨網域的資料存取,如此一來,我們就可以將每一個開放的網頁視為一張張的 Table,然後 *select* 裡頭存放的資料。此外,對前端工程師來說,YQL 也有效地解決了 JavaScript 跨網域的安全限制,可以直接從前端取得包含 callback function 的 JSON 物件(範例),加快開發速度。

更多 YQL 的操作方法與使用限制,可以直接看官方文件或 YDN 的中文說明:1, 2, 3, 4

相關文章:

  1. YQL: The Two-Minute Tutorial
  2. 無痛OAuth (II) : 透過YQL取得Oauth Access Token
  3. 利用YQL抓出Flickr相簿中的照片url
  4. 採花大盜速成秘籍之YQL
  5. 使用 YQL 來擷取網頁圖片
  6. 美國yahoo推出了類似SQL讀取資料的API
  7. 用 Yql 抓取 Yahoo Finance 股價
  8. 查詢網頁使用雅虎YQL
  9. Web API power tools:  One tool to bind them all
  10. Jonathans stuff
  11. 維基百科:XPath

0 意見 :

Related Posts Plugin for WordPress, Blogger...