RSS Reader 作成で復習!
- おさらいをかねて,RadRailsで新しいプロジェクトをつくるところから復習.
- ライド・オン・Rails そのままのコードです.とくに,parserss.rb と getrss.rb はとても勉強になります.
モデル
- RadRailsの下にあるコンソールからRubyのコマンドがうてないから,しょうがないから,Ruby Consoleを別途立ち上げる.
- D:\work\rails\RssReader でモデルをgenerateする
> D: > cd D:\work\rails\RssReader > ruby script/generate mode Blog > ruby script/generate mode Post
- ProjectをSVN に追加.参照→http://d.hatena.ne.jp/ooolong/20070131/1170252485
- 今回は,MySQL CommandLine Client でNewSchemaを作成.root でログインする.grant でユーザawa にアクセス権限を与えるんだけど,どうもできてないみたい.仕方ないので,SQL Administratorでやってしまおう.
mysql> create database RssReader; mysql> grant all on RssReader.* to awa@localhost;
- database.xml の修正
- 0XX_create_blogs.rb,0XX_create_postss.rb を修正
- rake db:migrate マイグレートして,DBにテーブルを作成と重きや...エラーが.awaではAccessできないみたい.うーん.またしてもしょうがないので,database.yml の username: を root でやってしまおう.コンソールから,rake migrate でもよいし,RailsのRakeTasksウインドウからでもよい.
- SQL Administrator で作成されたテーブルを確認してみる.
rake db:migrate
- blog.rb post.rb を修正
class Blog < ActiveRecord::Base has_many :posts validates_uniqueness_of :rss_url validates_uniqueness_of :url end
class Post < ActiveRecord::Base belongs_to :blog validates_uniqueness_of :url end
GetterとParser 作成
require 'rss/1.0' require 'rss/2.0' require 'rss/dublincore' require 'rss/content' rss = nil open('rss.xml') do |rss_source| begin rss = RSS::Parser.parse(rss_source) rescue RSS::InvalidRSSError rss = RSS::Parser.parse(rss_source, false) end end require 'config/environment' include RssrHelper rss_url = ARGV.shift || 'http://moriq.tdiary.net/index.rdf' rss_url = url_normalize(rss_url) blog = Blog.find_by_rss_url(rss_url) || Blog.new(:rss_url => rss_url) blog.name = rss.channel.title blog.url = rss.channel.link blog.save rss.items.each do |item| url = url_normalize(item.link) post = Post.find_by_url(url) || Post.new(:url => url) post.blog = blog post.title = item.title begin post.content = item.content_encoded rescue post.content = item.description end post.published_at = item.date post.save end
- RAILS_ROOT に,getrss.rb を作成
require 'config/environment' require 'open-uri' include RssrHelper rss_url = ARGV.shift || 'http://moriq.tdiary.net/index.rdf' rss_url = url_normalize(rss_url) blog = Blog.find_by_rss_url(rss_url) || Blog.new(:rss_url => rss_url) header = {} if blog.updated_at header['If-Modified-Since'] = blog.updated_at.httpdate end begin open(blog.rss_url, header) do |rss_source| open('rss.xml', 'w') do |o| o.print rss_source.read end end rescue OpenURI::HTTPError p $! # => #<OpenURI::HTTPError: 304 Not Modified> end
- app/helpers/rssr_helper.rb を作成
module RssrHelper def url_normalize(url) URI.parse(url).normalize.to_s end end
RSS取得とDB格納
- getrss.rb でRSSを取得し,parserss.rb でデータベースに格納する.取得先は,デフォルト http://moriq.tdiary.net/index.rdf
- Console から 実行する.ITmedia +D のRSSを新規登録するには...
> ruby getrss.rb http://rss.itmedia.co.jp/rss/1.0/plusd.xml > ruby parserss.rb http://rss.itmedia.co.jp/rss/1.0/plusd.xml
コントロール,ビュー
- あとはデータベースから find して,表示すれば,RssReader の出来上がり.
参考文献
ライド・オン・Rails Ruby on Railsを徹底攻略
- 作者: 吉田和弘,馬場道明
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/30
- メディア: 単行本
- クリック: 52回
- この商品を含むブログ (88件) を見る