GoogleAppsScriptではてブのRSSをパースする
今日も今日とてGASネタです。
前回の記事ではAtom形式のRSSをパースしたけれど、今回ははてなブックマークのRSSをGoogleAppsScriptでパースします。
はてなブックマークのRSSは、ちょっと特殊で独自のNamespaceが入ってたりします。
このへん。Namespaceが入っているところがちょっと違います。
まずはコードを。
コード
function getHatenaRss(){ var feedURL = "http://b.hatena.ne.jp/hotentry/it.rss"; var xml = UrlFetchApp.fetch(feedURL).getContentText(); var document = XmlService.parse(xml); var root = document.getRootElement(); var rss = XmlService.getNamespace('http://purl.org/rss/1.0/'); var dc = XmlService.getNamespace('dc', 'http://purl.org/dc/elements/1.1/'); var hatena = XmlService.getNamespace('hatena', 'http://www.hatena.ne.jp/info/xmlns#'); var items = root.getChildren('item', rss); var results = []; for (var i = 0; i < items.length; i++) { var item = {} item.title = items[i].getChild('title', rss).getText(); item.link = items[i].getChild('link', rss).getText(); item.date = items[i].getChild('date', dc).getText(); var bookmarkcount_string = items[i].getChild('bookmarkcount', hatena).getText(); item.bookmarkcount = parseInt(bookmarkcount_string, 10); results.push(item); Logger.log(item); } return results; }
ブックマーク数は後で使いたいので、数値にしています。
はまったところ
Namespaceが入っているとちゃんとその要素だよというのを指定してあげないと取得できないので、そこをどのように書けばいいのか迷いました。
Namespaceは、だいたい一番上のタグ内に定義されています。
その情報をもとにして定義、指定してあげれば取得できました。
まとめ
前に同じようにNamespaceが指定してあるものがRubyで取ろうとしたときに取れなくて、その時はすべて定義を消しちゃってとったけど今となってはその辺ももっとスムーズにできるかもしれない。
それではまたー。