Rails 5からAPIモードと呼ばれる機能が使えるようになったと聞いて、APIサーバをサクッと作ってみました。
(Ruby on Railsよりロゴを引用)
準備
$ mkdir fetch_rss_and_post_hateblog $ cd fetch_rss_and_post_hateblog $ echo "gem 'rails', '~>5.0'" > Gemfile $ mkdir .bundle $ echo '--- BUNDLE_PATH: vendor/bundle BUNDLE_DISABLE_SHARED_GEMS: 1 BUNDLE_BIN: ./.bin' > .bundle/config $ sudo yum install -y sqlite-devel # 必要に応じてapt-getなど $ bundle install
プロジェクトをセットアップ。
$ rails new . --api $ echo "development: secret_key_base: `rake secret` test: secret_key_base: `rake secret` production: secret_key_base: <%= ENV[\"SECRET_KEY_BASE\"] %>" > config/secrets.yml
ここまでの関係ファイルを一旦プッシュ。
$ gibo osx ruby rails vim >> .gitignore
$ git init
$ git remote add origin git://github.com/user/repo.git
$ git push origin master
APIサーバの作成
RSSを取ってきて、title, URL, descriptionを返すAPIサーバを作ってみます。
$ rails g controller post
APIモードで作られているか確認してみる。
$ cd app $ ls channels controllers jobs mailers views
はてブのRSSフィードを RSS:Parser#parse
で取れない件は、 はてなのAPIを使う際に503エラーが出る問題と解決策を参考にしました。
app/controllers/posts_controller.rb
def fetch url = 'http://b.hatena.ne.jp/dogwood008/rss' ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' rss = open(url, 'User-Agent' => ua) feed = RSS::Parser.parse(rss) rss.close items = feed.items.map do |i| { link: i.link, title: i.title, desc: i.description, date: i.dc_date } end render json: items end
config/routes.rb
Rails.application.routes.draw do get '/fetch', to: 'posts#fetch' end
いざ、実行。
$ rails s -b 0.0.0.0
http://localhost:3000/posts/fetch
[{ link: "http://brevis.exblog.jp/24515937/", title: "トラブルには技術的原因と、マネジメント的原因がある : タイム・コンサルタントの日誌から", desc: "【要約と私感】“マネジメント的原因” = 仕組みの原因。手っ取り早く直すには技術的要因を取り除けば良いけど、仕組みがダメならまた似たような失敗をうむ。", date: "2016-07-10T15:33:53.000+09:00" }, { link: "http://qiita.com/teradonburi/items/a382a17e1e0245b7d831", title: "AWS料金早見表(サーバレスアーキテクチャ) - Qiita", desc: "一度自分で一通りやってみたい感ある。", date: "2016-07-10T15:27:49.000+09:00" }, ...]
ヒューッ!! その他いろいろ作っていきたい。