6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】サイトのRSSを読み込んで、内容をフロントに返す

Posted at

RSSとは

Rich Site Summaryの略で、充実したサイトの要約という意味になる。

主な特徴は、

  • 内容情報のメタデータ化にRDFを使う。
  • それの情報をXML言語で記述する。
Webサイトの要素 マークアップ言語
Webページ HTML
RSS XML
メタデータデータベースでいうカラムのこと
RDFメタデータを統一するための規格。データベースでいうモデル?
マークアップ言語<>で表した要素を使って、データの構造を示す言語

#gemを追加

Gemfile
gem 'feedjira'
gem 'httparty'
$ bundle install

##対象RSSを、Railsで処理してクライアントに送るまでの流れ

  1. RSSをrailsに送る
  2. 受け取ったRSSを扱いやすい形になるようパースする
  3. パースしてオブジェクトになったデータをJSON形式で、クライアントに返す

今回は、サーバ側の処理を書いていくので、2番目と3番目のコーディングをみていく。

#受け取ったRSSを、XML形式のデータに変換する


rss = Feed.new(url: params[:url])
xml = HTTParty.get(rss).body

##変換したXMLデータをパースして、オブジェクト形式のデータにする。


obj = Feedjira.parse(xml)
パースとはそのデータを解析して扱えるデータ(rssの書式データ)か判別し、扱えるデータなら変換までする処理のこと。

##オブジェクトデータを分解して、記事内容を取得できるようにする

list = []

obj.entries.each do |item|
  list += [
    :title => item.title,
    :url => item.url,
    :title => item.summary,
    :published => item.published.to_time.strftime("%Y-%m-%d %H:%M:%S")
  ]
end

データを配列の要素にすることで、記事の内容を取得できる。
obj.entriesは、オブジェクトの記事内容の塊のこと。

##クライアントに返すデータを作成する

data = {
  feed: {
    id: rss.id,
    url: rss.url,
    title: obj.title,
    item: list    
  }
}

render :json => data

クライアントに、JSON形式で返すようにする。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?