Node.jsを使ってrssを整形しサイト上に表示するメモ(ブログエンジンGhostの場合)

# 概要
[feedparser](https://github.com/danmactough/node-feedparser)を使ってGhostのrssをexpressで動かしている自社サイトにparseしたのでメモ。Node.js v4.2.3 + express 4.x環境です

## ちょこっと詰まったポイント
`media:content`の中身ってどうとるの…！？のポイント。urlやimgが大体ここに詰められていたりします。

## 表示するページ側
```route/index.js
var express = require('express');
var app = express();
var Feed = require('../common/feed');

router.get('/', function (req, res) {
  Feed.getBlogfeed(function (err, items) {
    res.render('index', {
      title: 'ものづくりをはじめる人が生まれやすい世界をつくる',
      items: items,
    });
  });
});
```
## Ghostのrssフィードの例
```rss.
<item>
	<title>
		<![CDATA[ IoT領域をやりますって、どういうこと？ ]]>
	</title>
	<description>
		<![CDATA[
		<p><img src="http://pick.paeria.jp/content/images/2016/02/IMG_0661.jpg" alt="alt"></p> <h1 id="iot">IoTの仕事してますって、結局何？</h1> <p>IoTやってます！と言っているのはインターネットの仕事してますと言うくらいに指す領域が広く、何かの申
		]]>
		<![CDATA[
		請をする時に事業説明をしたりすると「なんかわかんないけどネットのやつね」と括られることが多いです。</p>
		// 中略
		]]>
	</description>
	<link>
	http://pick.paeria.jp/watasitatinokao-eruiotnituite/
</link>
<guid isPermaLink="false">4dd02062-afdc-4712-8769-e12a9c9aa8f7</guid>
<category>
	<![CDATA[ paeria ]]>
</category>
<category>
	<![CDATA[ IoT ]]>
</category>
<dc:creator>
<![CDATA[ yamaguchi takahiro ]]>
</dc:creator>
<pubDate>Wed, 03 Feb 2016 01:10:00 GMT</pubDate>
<media:content url="http://pick.paeria.jp/content/images/2016/02/IMG_0661-5.jpg" medium="image"/>
<content:encoded>
<![CDATA[
<img src="http://pick.paeria.jp/content/images/2016/02/IMG_0661-5.jpg" alt="IoT領域をやりますって、どういうこと？"><p><img src="http://pick.paeria.jp/content/images/2016/02/IMG_0661.jpg" alt="IoT領域をやりますって、どういうこと？"></p> <h1 id="iot">IoTの仕事してますって、結局何？</h1>
// 中略

]]>
</content:encoded>
</item>
```


## rssフィードの処理側
```common/feed.js
var express = require('express');
var app = express();
var Feed = {};
var FeedParser = require('feedparser');
var request = require('request');

Feed.getBlogfeed = function(cb) {
    var options = {};
    var gUrl = 'http://pick.paeria.jp/rss/';
    options = {
      url: 'http://pick.paeria.jp/rss/'
    };      
    request.get(options, function (err, body) {
      if (err) {
        console.log("rss error!")
        cb(null);
      } else {
        console.log("rss ok")
        var req_blog = request(gUrl);
        var feedparser = new FeedParser({});
        var items = [];

        req_blog.on('error', function (error) {
          // errorしたらここ
          return cb(null);
        });
        req_blog.on('response', function (res) {
　　　　　// responseを受け取った結果を接続
          this.pipe(feedparser);
        });
        feedparser.on('readable', function (item) {
　　　　　// 得られた結果を配列へ詰めていく
          while (item = this.read()) {
            items.push(item);
          }
        });
        feedparser.on('end', function () {
　　　　　// コールバックで戻す
          cb(null, items);
        });
      }
    });
};

module.exports = Feed;
```

## テンプレート側(swigでレンダリング)
```
// items(rssフィード全体)を取得する
{% for i in items %}
<h1><a href="{{i.link}}">{{"title: " + i.title}}</a></h1>
<p>{{"date: " + i.pubdate|date('Y.m.d')}}</p>
　// media:contentのimgとurlをを展開する
  {% for k in i.enclosures %}
  {{"img: " + k.url}}
  <p>
  <img src="{{k.url}}">
  </p>
  {% endfor %}
{% endfor %}
```

## おまけ
rssを吐き出している、下記のblogもよろしくお願いします！
http://pick.paeria.jp/

## 参照しました
Node.js の Feedparser を使って RSS フィードを JSON 形式で取得しよう
http://phiary.me/node-js-feedparser-rss-json/