RSSフィード(XML)をJSON化して操作してみる。
Node.jsでXMLをJSONに変換して読み込ませてみます。
使用環境は次の通り。
Node.js version v0.8.16
npm request // httpリクエスト用
npm xml2json // XML->JSON変換用
RSSフィードを取得して、記事タイトルと投稿日時を表示する。
本サイトのRSSフィードをhttpリクエストで取得し、XMLをJSONに変換後、記事のタイトルと投稿日時を列挙させてみます。
RSSフィード(RSS2.0)の一部
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0"> <channel> <title>Kimux.Net</title> <atom:link href="http://kimux.net/?feed=rss2" rel="self" type="application/rss+xml"/> <link>http://kimux.net</link> <description>プログラムと趣味と。</description> <lastBuildDate>Wed, 10 Apr 2013 01:12:51 +0000</lastBuildDate> <language>ja</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.5.1</generator> <item> <title>[C#]JSON.Netを使ってWebサービスから取得したJSONを扱うときのメモ。</title> <link>http://kimux.net/?p=1238</link> <comments>http://kimux.net/?p=1238#comments</comments> <pubDate>Mon, 08 Apr 2013 08:32:35 +0000</pubDate> <dc:creator>m-kimura</dc:creator> <category> <![CDATA[ C# ]]> </category> <category> <![CDATA[ プログラム ]]> </category> <guid isPermaLink="false">http://kimux.net/?p=1238</guid> <description> <![CDATA[ Webサービスが提供するWebAPIからJSON形式で情報をもらう。 今やWebAPIなどの受け渡しに使うのはJSONが当たり前になっています。 そこで、C#でWebAPIなどからJSON形式の文字列を受信した時の扱いに … <a href="http://kimux.net/?p=1238">続きを読む <span class="meta-nav">→</span></a> ]]> </description> <content:encoded>
getRss.js
var request = require('request'); var url = 'http://kimux.net/?feed=rss2'; request(url, function (error, response, body) { if (!error && response.statusCode == 200) { var json = xml2json(body); for (var i in json.rss.channel.item) { console.log("title:" + json.rss.channel.item[i].title); console.log("date :" + json.rss.channel.item[i].pubDate); } } }); function xml2json(body) { return JSON.parse(require('xml2json').toJson(body)); }
実行結果
$ node getRss.js title:[C&#35;]JSON.Netを使ってWebサービスから取得したJSONを扱うときのメモ。 date :Mon, 08 Apr 2013 08:32:35 +0000 title:[雑記]Nortonさんの延長画面がソレっぽく見える件。 date :Tue, 02 Apr 2013 17:04:40 +0000 title:[雑記]上原ひろみちゃんにWONDER AIRPORTに出て欲しかった。 date :Sat, 30 Mar 2013 18:59:47 +0000 title:[上原ひろみ]オフィシャル スマートフォンサイトオープン! date :Fri, 29 Mar 2013 11:30:36 +0000 title:[雑記]Windows8は普及するのか。 date :Thu, 28 Mar 2013 06:36:38 +0000 title:[上原ひろみ]Solo@BlueNoteToKyo 2日目2nd! date :Sat, 23 Mar 2013 16:48:40 +0000 title:[Webアプリ]nginxを使ってWebSocketのリバースプロキシを設定する。 date :Fri, 22 Mar 2013 06:21:02 +0000 title:[PC]VMware Player 5でUbuntuを手動インストールする方法。 date :Fri, 22 Mar 2013 04:27:16 +0000 title:[Webアプリ]WebSocketとGoogleMapsでリアルタイム監視マップを作る。その3。 date :Thu, 21 Mar 2013 15:30:10 +0000 title:[Webアプリ]WebSocketとGoogleMapsでリアルタイム監視マップを作る。その2。 date :Tue, 19 Mar 2013 15:09:11 +0000
XMLの属性と要素はJSONに変換するとどうなるのか。
属性値と要素が含まれるXMLをxml2jsonでJSONに変換すると、ノードの最後に要素が格納されます。
JSON変換後の一部。
{"rss": { "version":2, "xmlns:content":"http://purl.org/rss/1.0/modules/content/", "xmlns:wfw":"http://wellformedweb.org/CommentAPI/", "xmlns:dc":"http://purl.org/dc/elements/1.1/", "xmlns:atom":"http://www.w3.org/2005/Atom", "xmlns:sy":"http://purl.org/rss/1.0/modules/syndication/", "xmlns:slash":"http://purl.org/rss/1.0/modules/slash/", "channel": {"title":"Kimux.Net","atom:link":{"href":"http://kimux.net/?feed=rss2","rel":"self","type":"application/rss+xml"},"link":"http://kimux.net","description":"プログラムと趣味と。","lastBuildDate":"Wed, 10 Apr 2013 01:12:51 +0000","language":"ja","sy:updatePeriod":"hourly","sy:updateFrequency":1,"generator":"http://wordpress.org/?v=3.5.1",
XMLパースが面倒だったので、なんかJSONにしたら楽なのかなぁって思ったから、ちょっと試してみたけど、マジ楽だったw