RubyでRSSを取得するチュートリアルを解説します。
Rubyでスクリプトを作成し、RSS取得を取得・抽出します。
RSSを取得すると様々なデータが取れるようになり、組み合わせることでアプリケーションに応用できます。
チュートリアル概要
クラスメソッドさんが運営しているDevelopers.ioのRSSを取得し出力するスクリプトを作成します。
準備
まずは準備をしていきましょう!
適当なディレクトリを作成します。(ruby_rss
でなくても問題ありません)
$ mkdir ruby_rss
作成したディレクトリに移動
$ cd ruby_rss
rss_practice.rb
という名前のRubyファイルを作成
$ touch rss_practice.rb
.rb
ですこれで準備は完了です。
RSS取得
それではRSSを取得していきましょう。
rssライブラリ読み込み
RSS取得にはrss
という標準ライブラリを使用します。
標準ライブラリとは、Rubyに組み込まれているライブラリです。
require ‘ライブラリ名’ をすることでクラスやメソッドが利用できるようになります。
標準ライブラリと外部のライブラリについては補足説明をしています。
それでは、rss_practice.rb
にコードを加えていきましょう。
rssライブラリを読み込んで、classの定義をします。
require 'rss'
class RssPractice
end
取得
Developers.ioのRSSのURLは、https://dev.classmethod.jp/feed/
です。
コードを加えます。
require 'rss'
class RssPractice
RSS_URL = 'https://dev.classmethod.jp/feed/'.freeze
def get_rss
rss = parse_rss
p rss
end
private
def parse_rss
RSS::Parser.parse(RSS_URL)
end
end
RssPractice.new.get_rss
RSS::Parser.parse
にURLを渡すとparseしてくれます。
実行しましょう。
$ ruby rss_practice.rb
RSSを取得できましたね!
#<RSS::Rss:0x00007ff1b3845948 @parent=nil, @converter=nil, @do_validate=true, @channel=#<RSS::Rss::Channel:0x00007ff1b384e700 @parent=nil, @converter=nil, @do_validate=true, @title="Developers.IO", @link="https://dev.classmethod.jp", @description="クラスメソッド発「やってみた」系技術メディア", @language="ja", @copyright=nil, @managingEditor=nil, @webMaster=nil, @rating=nil, @pubDate=nil, @lastBuildDate=2020-08-09 17:02:15 +0000, @docs=nil, @cloud=nil, @skipDays=nil, @skipHours=nil, @image=nil, @textInput=nil, @generator="https://wordpress.org/?v=5.3.2", @ttl=nil, @itunes_image=nil, @itunes_owner=nil, @itunes_new_feed_url=nil, @itunes_author=nil, @itunes_block=nil, @itunes_explicit=nil, @itunes_keywords=nil, @itunes_subtitle=nil, @itunes_summary=nil, @item=[#<RSS::Rss::Channel::Item:0x00007ff1b3121090 @parent=nil, @converter=nil, @do_validate=true, @title="[cdk8s] CDK で Kubernetes を定義してみる", @link="https://dev.classmethod.jp/articles/typescript/cdk8s-cdk-kubernetes-typescript/", @description="<p><img src=\"https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/08/k8s-eyecatch-640x336.png\" /></p><p>Overview Cloud Development Kit for Kubernetes(または cdk8s)は CDK で Kubernetes リソースの定義を行うためのフレームワークです。cdk8s は 2020 […]</p>", @source=nil, @enclosure=nil, @comments=nil, @author=nil, @pubDate=2020-08-09 13:16:28 +0000, @guid=#<RSS::Rss::Channel::Item::Guid:0x00007ff1b3161ac8 @parent=nil, @converter=nil, @do_validate=true, @isPermaLink=false, @content="https://dev.classmethod.jp/?p=611644">, @content_encoded=nil, @itunes_author=nil, @itunes_block=nil, @itunes_explicit=nil, @itunes_keywords=nil, @itunes_subtitle=nil, @itunes_summary=nil, @itunes_name=nil, @itunes_email=nil, @itunes_duration=nil, @trackback_ping=nil, @category=[#<RSS::Rss::Channel::Item::Category:0x00007ff1b3140620 @parent=nil, @converter=nil, @do_validate=true, @domain=nil, @content="Typescript">, #<RSS::Rss::Channel::Item::Category:0x00007ff1b3152fc8 @parent=nil, @converter=nil, @do_validate=true, @domain=nil, @content="AWS CDK">, #<RSS::Rss::Channel::Item::Category:0x00007ff1b315a480 @parent=nil, @converter=nil, @do_validate=true, @domain=nil, @content="cdk8s">], @dc_title=[], @dc_description=[], @dc_creator=[#<RSS::DublinCoreModel::DublinCoreCreator:0x00007ff1b3138290 @parent=nil, @converter=nil, @do_validate=true, @content="me">], @dc_subject=[], @dc_publisher=[], @dc_contributor=[], @dc_type=[], @dc_format=[], @dc_identifier=[], @dc_source=[], @dc_language=[], @dc_relation=[], @dc_coverage=[], @dc_rights=[], @dc_date=[], @trackback_about=[]>, #<RSS::Rss::Channel::Item:0x00007ff1b3170370 @parent=nil, @converter=nil, @do_validate=true, @title="RDS for SQL Serverか
らS3バケットにアクセスできるようになりました", @link="https://dev.classmethod.jp/articles/rds-sql-server-s3-integration/", @description="<p><img src=\"https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/12/sqlserver-640x336.png\" /></p><p>こんにちは。データアナリティクス事業本部の松村です。 2ヶ月以上前の話ですが、RDS for SQL ServerからS3バケットにアクセスができるようになりましたのでご紹介します。この機能は公式ドキュメントではS3との […]</p>"
ここまでで取得が完了です。
取得したデータの抽出
次に取得したデータを抽出していきます。
今回は、タイトルとリンクを抽出して出力してみましょう。
show_data
というメソッドを定義し、ループで回し出力してみましょう。
require 'rss'
class RssPractice
RSS_URL = 'https://dev.classmethod.jp/feed/'.freeze
def get_rss
rss = parse_rss
rss.items.each do |item|
show_data(item)
end
end
private
def parse_rss
RSS::Parser.parse(RSS_URL)
end
def show_data(item)
puts '--------'
puts item.title
puts item.link
end
end
RssPractice.new.get_rss
それでは実行しましょう。
ruby rss_practice.rb
抽出できていますね!
--------
[cdk8s] CDK で Kubernetes を定義してみる
https://dev.classmethod.jp/articles/typescript/cdk8s-cdk-kubernetes-typescript/
--------
RDS for SQL ServerからS3バケットにアクセスできるようになりました
https://dev.classmethod.jp/articles/rds-sql-server-s3-integration/
--------
[AWS 입문] AWS CLI 에서 S3 + CloudFront 로 Vue.js 웹페이지 배포하기
https://dev.classmethod.jp/articles/aws-cli-s3-cloudfront-kr/
--------
React + Material-UIのアプリで選択されているサイドバーメニューの項目を目立たせてみた
https://dev.classmethod.jp/articles/highlight-selected-sidebar-menu-in-react-materialui-app/
--------
【待望】PayPayのオンライン決済APIが公開されたので試してみる #paypay #python
https://dev.classmethod.jp/articles/try-paypay-opa/
--------
【テレワークにオススメ】Amazon Connectを立ち上げてみました
https://dev.classmethod.jp/articles/sales-amazonconnect-launch/
--------
抽出できる要素
今回は、title
とlink
を抽出しましたが、他にもこんな情報も抽出可能です。
- description
- category
- pubDate(配信日時)
- dc:creator(作者)
標準ライブラリ
おまけなりますが、Rubyの標準ライブラリについて解説をします。
もしぼやっと理解している方がいましたら、読んでみてください。
ライブラリ(Gem)の読み込み方
Rubyは、ライブラリをgemと呼んでいます。
基本的には、Gemをインストールし
require 'gemの名前'
をすると利用できるようになります。
標準ライブラリ(gem)の場合
標準ライブラリは、Ruby自体にhttps://github.com/ruby/ruby/blob/master/gems/bundled_gems で読み込まれています。
例えば、今回のrss
もそうですね。
Githubだとこちらのレポジトリにコードが置いてあります。
すでに読み込まれているので、requreのみで利用できるというわけです。
外部ライブラリの場合
外部ライブラリの場合は、Rubyにはまだ読み込まれていないので
require
をしても利用できません。
その場合に一般的な方法としてbundler
というライブラリを利用して、Gemfile
に利用したいGemを追加する必要があります。
まとめ
RubyでRSSを取得・抽出するチュートリアルでした。
RSSを簡単に実装できますね。
Rubyの基礎をもとに、何かツールを作ることはより深く知識を得ることにつながります。