文系エンジニアの学習日記

プログラミング未経験からIT業界に飛び込んだエンジニアの勉強日記

RSSを追加してみる

★Contents
RSSの定義
RSSはどのように使われてきたか(RSSリーダーの盛衰)
RSS取得方法

RSSの定義と変遷

RSSの定義を簡単にすると、webサイトの情報を効率よく収集できるXMLベースのフォーマットのことを言います。
正確な意味は下記のURLが詳しいです。

RSSで記述された文書には、下記のようなことを記述しています。

・Webサイトの各ページのタイトル
・Webサイトの各ページのアドレス
・Webサイトの各ページの見出し
・Webサイトの各ページの要約
・Webサイトの各ページの更新時刻

これらが書いてあることでwebサイトの更新情報を効率的に把握することができます。

RSSはどのように使われてきたか(RSSリーダーの盛衰)

先ほどの記事でRSSの定義をしましたが、これはどのような用途で利用されてきたのでしょう。
主に、RSSリーダーというソフトウェアの中で使われてきました。

しかし、このRSSリーダーというサービスは現在あまり使われていないというのが現状です。
それに関する記事があって読んでみました。その内容と、?と思ったことについて書いてみます。

そのことについて一旦目次を用意します。

・RSSリーダーの現在
・RSSリーダーが衰退した理由とその理由に対する個人的な所感


RSSリーダーの現在
上記記事で使われているGoogleトレンドによると2005年~2006年をピークに右肩下がりで2018年には、ピーク時の1~4%しか人気がありません。
また、主要なRSSリーダーソフトウェアは2013年のGoogleリーダーのサービス終了でほとんど使われなくなっています。
本当にRSSリーダーは衰退しているのか、今、どのぐらいの主要サイトにRSSリーダーが実装されているのか調べてみました。

RSSリーダーが実装されているブラウザ 
Internet Explorer11 
RSSリーダーが実装されていないブラウザ
MicrosoftEdge
Googlechrome
Safari(MacOS版)

実装されていないブラウザが多数を占めています。


RSSリーダーが衰退した理由とその理由に対する個人的な所感

理由としては、SNSやキュレーションサイトの普及があげられます。
しかし、SNSが普及することと、RSSリーダーが衰退することは相関関係があるのでしょうか。
大まかには同じ物ではありますが、使われ方としては微妙に異なるとおもっていたので、どうして相関関係があるのか実際に調べてみました。
そのため、また、Googleトレンドを見てみましょう。

グラフで見ると、2014年頃はピーク時と比較して25%の人気しかありません。
この時、Facebookが日本でのシェア率が最も高いSNSになったというのと大きく関連していそうです。
そう思う理由として、両者は、お気に入りの記事の更新を確認するという意図で使うとしたら同じ用途で使われているといえるからです。

例えば、Facebookでお気に入りのアカウント、コンテンツを「いいね!」したり、フォローしたりすることでお気に入りの情報をタイムリーに取得することができます。
RSSリーダーもお気に入りのサイトを登録しておくことで、そのサイトの更新情報をタイムリーに取得するものでした。

また、NEVERまとめやグノシーなどキュレーションサイトの普及によって自分の興味のあるジャンルに対するタイムリーな情報が取得できるようになったことも理由としてあげられています。
ただ、それだけで、RSSリーダーが衰退したのか?と思ったため、どういうことだろうと考えてみました。

RSSリーダーで情報を集めるとなると、自分でそのサイトを登録する必要があります。しかし、キュレーションサイトでは、サイトがジャンルに分けて情報を集め、体系化しているため、自分で登録する必要がなくなるのです。
つまり、自分で登録する手間がなくなったから、その分普及したということができそうです。

しかし、キュレーションサイトが集めて体系化した情報は、あくまでも、キュレーションサイトの意図に過ぎないと考えられます。

また、キュレーションサイトがやっている記事をまとめて、掲載するという行為は、、ユーザーからもサイトの信頼性が担保できないという声が上がったりと客観的な視点でも問題を抱えているといえそうです。
ただ、そのようなことを書いている媒体も実はキュレーションサイトだったりしますからね。そこで言いますか?という話です。とはいえ、キュレーションサイトの運営側がキュレーションして取得した情報に対して付加価値をつけているのであれば、そのサイトは存在価値があるものということができそうです。
そもそも、キュレーションサイトの問題点に関する話は鼬ごっこにしかならないから論じる意味はないと思っています。正直、サイトを見る側の意識次第の話ですし。

一旦話を戻します。

キュレーションサイトの登場と、RSSリーダーの衰退に相関関係があるのかという話でした。

私個人の意見ですが、両者の違いとして、自分の意志でサイトを登録して閲覧するか、登録されているものを受動的に閲覧するのかという話であると思っています。RSSリーダーは自分の中でお気に入りのサイトを登録することにより、自分でサイトを選ぶという行為をしています。
したがって、見るものを自分で選びたいという意思がある人にとって、RSSリーダーにはメリットがあるといえるのです。
自分で選んで登録する。という観点で違いが存在するため、この2つには相関関係は存在しないと個人的には思っています。


RSS取得方法

ここまでの記事では、RSSなんてもう使わないのでは?という考え方もできそうです。ただし、RSSに対して、データをURLを使って取得するという観点から取得方法に関しては、今後も使いそうな技術であるため、まだまだ使うこともありそうです。というわけで、取得方法についてです。
今回は、今自分が勉強しているNode.jsを使ったRSSの取得方法について紹介していきます。

取得するにあたって必要な道具は以下の通りです。

・ネットワークアクセス機能
・XMLデータをパースしてJavaScriptのオブジェクトにする機能

それでは、これらの機能を実装していきます。
1.Node.jsのアプリが格納されているディレクトリ内にXML2JSをインストールします。
インストールする際に利用するコマンドは下記の通り

npm install --save xml2js

2.ロードしたHTTPSモジュールを使ってサイトにアクセスします。

router.get('/',(req, res, next) => {
    var opt = {
        key: fs.readFileSync('key.pem'),
	    cert: fs.readFileSync('cert.pem'),
        host:'yume100kairi.hatenablog.com',
        port:443,
        path: '/rss'
    };
    console.log('opt:', opt);
    http.get(opt, (res2) => {
        var body = '';
        res2.on('data', (data) => {     
            body += data;
        });
    console.log('body:', body);
    res2.on('end', () => {
        parseString(body.trim(), (err, result) => {
            var data = {
                title: 'hello!',
                content: result.rss.channel[0].item
            };
        res.render('hello', data);
        });
    })
});

このコードで何やっているの?ということについて説明していきます。
変数optに格納している中身についてここで説明します。

host :アクセスするホスト、ドメイン

アクセスするサイトのコンピューター名、ネットワーク名をここに記述します。

後述するpathと混同してしまいアクセスができないというエラーを発生させてしまったため、違いについて理解しておきたいところです。

port :ポート番号を書きます。HTTPSアクセスでは、443を使います。

pathドメイン以降の部分

.com以降の部分になります。


サイトアクセスが完了したら、レスポンスオブジェクトにデータ取得した時のイベントを設定します。
この中では、変数データの中身をbodyに格納しています。

次に実行するイベントは、XMLデータのパースです。
parseString関数の第1引数にてXMLのテキストデータを指定し、第2引数では、すべてのパース処理が終了した後で呼び出すコールバック関数を用意します。

コールバック関数内では、取得したXMLデータを画面上に表示する処理を行っています。
私が実行したときはこのように記述したまま実行できてしまったのですが、下記の部分でなにをやっているのかあいまい状態なので

content: result.rss.channel[0].item

上記について調べておきたい所存。(たぶんだが、コールバック関数の引数として使っているresultオブジェクト内にあるrssオブジェクトを使って、画面出力用のデータを設定しているのであろうと予想)

3.2.で取得したデータを画面に表示します。

下記のようにHTMLを記述します。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta http-equiv="content-type"
    content="text/html"; charset="UTF-8">
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>

<body>
    <head>
        <h1><%= title %></h1>
    </head>
    <div role="main">
        <% if (content != null){ %>
            <ol>
        <% for(var i in content) { %>
        <% var obj = content[i]; %>
        <li><a href="<%=obj.link %>">
            <%= obj.title %></a></li>
        </tr>
        <% } %>
        </ol>
       <% } %>
       </div>
</body>
</html>

肝となる部分は、

    <div role="main">
        <% if (content != null){ %>
            <ol>
        <% for(var i in content) { %>
        <% var obj = content[i]; %>
        <li><a href="<%=obj.link %>">
            <%= obj.title %></a></li>
        </tr>
        <% } %>
        </ol>
       <% } %>
       </div>

for文を使って、contentの要素をobjに格納し、obj内のlink、titleを使って、取得したRSSデータのリンクとタイトルを表示しています。


終わりに

今回はRSSデータを例にして、webサイト上のデータを取得する方法について紹介しました。今回紹介した方法は、あくまでもNode.jsのアプリケーション作成時に使用する方法ですので、他の言語を使った方法があったら、紹介しようかと思います。