【情報収集に活用】Railsで RSSリーダーを作る方法

Not image

みなさま、こんにちは。

みなさんは普段どのように情報収集していますか?

王道は、TwitterやFacebook・お気に入りのニュースアプリといった所でしょうか?

今の世の中情報が氾濫していて、いつどこにいてもポケットの中に情報の海がある状態です。

今回は、今の時代が良いとかダメだとかという話ではなく、情報を効率的に収集する仕組みの一つである「RSS」という仕組みに着目していくのです。

そんな「RSS」を使ったツールに「RSSリーダー」というものがあります。

RSSリーダーを簡単に説明すると、自分のお気に入りのサイトなどの更新情報や新着情報を手軽にチェックすることができるツールです。

そこで今回の本題は、自作で「RSSリーダー」を作っていきます。

車輪の再発明になってしまいますが、RSSリーダーの仕組みの一端に触れることができるので、結構面白いと思います。

RSSの仕組みやRSSリーダーについて知りたい方は、まとめましたのでご参考に!

【情報収集に使われる技術】RSSの仕組みとRSSリーダーについて調べてみた!まとめ

2019.01.24

ちなみにRSSリーダーを作るのには、「feedjira」というGemを使います。

それでは、実際に手を動かして作っていきましょう!

RailsでRSSリーダーを作る手順

Gem「feedjira」のインストール

まずはじめにgemをインストールしましょう。

先ほども申したように、RSSリーダーを作成するには「feedjira」というgemを使います。

なのでGemfileに書き込むなり、gem installコマンドを使うなりしてインストールする必要があります。

今回はGemfileに追加して「bundle install」していこうと思います。

上のように「bundle install」が完了すると、「feedjira」インストール完了です。次の工程へ。

モデル・テーブルの作成

次は、RSSリーダーで取得した記事の情報などを保存するための、モデル・テーブルを作成していきましょう。

単純な作業なのでサクッとコマンドを実行して、必要なモデル・テーブルを作成します。以下のコマンドを実行してください。

今回はmediumモデル・テーブルでRSSの取得先のURLや名前を扱います。

articleモデル・テーブルで実際に取得した記事の情報を扱います。

そんなこんなで、mediumテーブルとarticleテーブルは一対多の関係になります。

rakeタスク作成

さて次は、rakeタスクの作成です。

これから作るrakeタスクが実行されることで、mediumテーブルに登録してあるサイト(URL)の最新情報や更新情報を引っ張ってくることができます。

それではさっそく、以下のコマンドでrakeタスクを作成しましょう。

すると「lib/tasks/rss.rake」というネーミング直球のrakeタスクファイルが作成されていますので、そこに以下のコードを追加してください。

ポイントは「first_or_initializeメソッド」で、これはテーブル内にマッチする要素があればそれを返して、無いならレコードを作るというメソッドです。

無い場合レコードを作るといっても、createのクエリはこの段階では流れません。

こうすることで、同じ内容のレコードが作成されることを防ぐことができます。

さて、無事rakeタスクを作成できたところで、実際に実行してお目当のサイトから新着情報・更新情報を取ってこれて、DBに保存されるか確認しましょう。

上のようにconsoleから、レコードが作成されていることが確認できたら成功です。Congratulations!!

改良余地

ここまでで、RSSを使って情報を取得してくることはできるようになりました。

しかし定期的に情報を取得するために、手でコマンドを打つのは面倒ですよね。

このような時はGemの「whenever」などを使って、rakeタスクを定期実行してあげればOKでしょう。

Railsを使うからには「アプリとして成り立たせたい」と思いますので、各自コントローラやルーティングを設定してもらって「Webアプリ」らしくしていってください。

まとめ

ここまでRSSを使って、特定のサイトの情報を取得する方法をまとめてきました。

RSSという技術はかなり枯れた技術感がありますが、「温故知新」という言葉もあるように、枯れた技術の中からも新しいことを見出せると思っています。

今回も読んでいただきありがとうございました。それでは〜。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です