BETA

Node.jsでrss-parserを使って更新情報を取得する

投稿日:2019-05-30
最終更新:2020-05-11

はじめに

Pythonでfeedparser使ったりもしたんですが、やはり私にはJavaScriptがあっているなぁと感じ、JavaScript(Node.js)でRSSをパースするrss-parserというものを試してみました。
とても簡単で楽しかったです。

rss-parser

A small library for turning RSS XML feeds into JavaScript objects.
bobby-brennan/rss-parser: A lightweight RSS parser, for Node and the browser

インストール

npm i rss-parser  

上のように入れました。
が、今README見てみたところ以下のように書いてありました。

npm install --save rss-parser  

--saveって何だよ。

古いnpmだと必要だったようです。無視します。

使い方

README見てください。
基本的には以下のようになるかと思います(2019/05)。

const Parser = require('rss-parser');  
const parser = new Parser();  

(async () => {  
    const feedUrl = 'https://www.reddit.com/.rss'; // 適当なURL  
    const feed = await parser.parseURL(feedUrl);  
    console.log(feed);  
})();  

awaitを使うのを忘れないようにしましょう。

feedの中身は以下のようになっています(READMEより)。

feedUrl: 'https://www.reddit.com/.rss'  
title: 'reddit: the front page of the internet'  
description: ""  
link: 'https://www.reddit.com/'  
items:  
    - title: 'The water is too deep, so he improvises'  
      link: 'https://www.reddit.com/r/funny/comments/3skxqc/the_water_is_too_deep_so_he_improvises/'  
      pubDate: 'Thu, 12 Nov 2015 21:16:39 +0000'  
      creator: "John Doe"  
      content: '<a href="http://example.com">this is a link</a> &amp; <b>this is bold text</b>'  
      contentSnippet: 'this is a link & this is bold text'  
      guid: 'https://www.reddit.com/r/funny/comments/3skxqc/the_water_is_too_deep_so_he_improvises/'  
      categories:  
          - funny  
      isoDate: '2015-11-12T21:16:39.000Z'  

個人的にisoDateがとても嬉しいです。

サクッと作るよ

適当に簡略化した(2020/05/10)

#!/usr/bin/env node  

(async () => {  
  const Parser = require('rss-parser');  
  const parser = new Parser();  

  /**  
   * @param {string} url  
   */  
  const getFeeds = async (url) => {  
    return (await parser.parseURL(url)).items  
      .map(({ title, link, isoDate }) => ({ date: new Date(isoDate), link, title }))  
      .sort((a, b) => a.date === b.date ? 0 : (a.date > b.date ? -1 : +1))  
      ;  
  };  

  const result = (await Promise.all([  
    getFeeds('http://feed.japan.cnet.com/rss/index.rdf'), // CNET  
    getFeeds('https://gigazine.net/news/rss_2.0/'), // Gigazine  
    getFeeds('https://japanese.engadget.com/rss.xml'), // Engadget  
    getFeeds('https://jp.techcrunch.com/feed/'), // TechCrunch  
    getFeeds('https://www.gizmodo.jp/index.xml'), // Gizmodo  
  ]))  
    .reduce((acc, cur) => [...acc, ...cur], []) // .flat()  
    .map(feed => feed.title + '\n\t' + feed.link)  
    .join('\n')  
    ;  

  console.log(result);  
})();  

おわりに

説明することがないぐらい簡単でした。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

おかゆりぞっとのさほど技術的ではないブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう