少年幃禿的煩惱


心情也微微的...凸

最近的學習心得 都改放到 少年幃禿的煩惱@Google Sites

2008/07/14

Google AJAX Feed API (3) - Examples

The Basics
示範從單一 feed 取得資料, 並且顯示每個內容的標題.
Code:

var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("div"); div.appendChild(document.createTextNode((i+1) + '. ' + entry.title)); container.appendChild(div); } } }); Demo:

JSON Result Format
這範例與上面基本範例很類似, 但是它顯示了 AJAX Feed API 最典型的 JSON 屬性. 詳細內容可參考 JSON result format specification.
Code: var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var attributes = ["title", "link", "publishedDate", "contentSnippet"]; for (var j = 0; j < attributes.length; j++) { var div = document.createElement("div"); div.appendChild(document.createTextNode(attributes[j] + ': ' + entry[attributes[j]])); container.appendChild(div); } container.appendChild(document.createElement("hr")); } } }); Demo:

XML Result Format
使用 XML DOM 取代 JSON 來讀取 RSS 跟 Atom feed. 兩種 feed 之間最大不同的地方是 RSS 使用 item 而 Atom 則使用 entry.
第一個範例是使用 XML DOM 直接讀取 RSS feed. 範例中使用了 AJAX Feed API 的 getElementsByTagNameNS 來取得 Digg Feed 中 diggCount 這個增設的資料.
Code: var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml"); feed.setResultFormat(google.feeds.Feed.XML_FORMAT); feed.load(function(result) { var container = document.getElementById("feed"); if (!result.error) { var items = result.xmlDocument.getElementsByTagName("item"); for (var i = 0; i < items.length; i++) { var titleElement = items[i].getElementsByTagName("title")[0]; var title = titleElement.firstChild.nodeValue; var votesElement = google.feeds.getElementsByTagNameNS(items[i], "http://digg.com/docs/diggrss/", "diggCount")[0]; var votes = votesElement.firstChild.nodeValue; var div = document.createElement("div"); div.appendChild(document.createTextNode(title + " (" + votes + " votes)")); container.appendChild(div); } } }); Demo:


第二個範例是使用 XML DOM 直接讀取 Atom feed. 範例中使用了 AJAX Feed API 的 getElementsByTagNameNS 來取得 Google Base Feed 中的資料.
Code: var feed = new google.feeds.Feed("http://www.google.com/base/feeds/snippets"); feed.setResultFormat(google.feeds.Feed.XML_FORMAT); feed.load(function(result) { var container = document.getElementById("feed"); if (!result.error) { var entries = google.feeds.getElementsByTagNameNS(result.xmlDocument, "http://www.w3.org/2005/Atom", "entry"); for (var i = 0; i < entries.length; i++) { var titleElement = google.feeds.getElementsByTagNameNS(entries[i], "http://www.w3.org/2005/Atom", "title")[0]; var title = titleElement.firstChild.nodeValue; var updatedElement = google.feeds.getElementsByTagNameNS(entries[i], "http://www.w3.org/2005/Atom", "updated")[0]; var updated = updatedElement.firstChild.nodeValue; var div = document.createElement("div"); div.appendChild(document.createTextNode(title + " (" + updated + ")")); container.appendChild(div); } } }); Demo:

Combined JSON/XML Result Format
這範例將上面的 XML 重新作一遍, 但是結合 JSON/XML DOM 格式.
Code: var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml"); feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var votesElement = google.feeds.getElementsByTagNameNS(entry.xmlNode, "http://digg.com/docs/diggrss/", "diggCount")[0]; var votes = votesElement.firstChild.nodeValue; var div = document.createElement("div"); div.appendChild(document.createTextNode(entry.title + " (" + votes + "votes)")); container.appendChild(div); } } }); Demo: