Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rails and twitter #twtr_hack

2,755 views

Published on

Published in: Technology
  • Be the first to comment

Rails and twitter #twtr_hack

  1. 1. Ruby on RailsでTwitter連携アプリをサクっと作る Fumitaka Yanase : giftee.co @i7a16k
  2. 2. Agenda1. ruby / rails に関して2.Twitter連携アプリ作成の実例 2.1.下準備 2.2.Sign in with Twitter 2.3.Tweet 2.4.Deploy
  3. 3. 1.Ruby on Rails に関して
  4. 4. about:rails(1)「同じ事を繰り返さない」「設定よりも規約」を理念としたフレームワーク railsのフォルダ構造(抜粋) (アプリ名) |-app/ |-assets |-controllers |-helpers |-mailers |-models |-views |-config/ |-db/ |-doc |-lib |-log |-public |-script |-test |-tmp |-vendor
  5. 5. about:rails(2)railsはルータとMVCにより制御される http://my.url/hoge/piyo ↓ routes.rb fooコントローラのbarメソッド ① ② controller ④ ③ ⑤ View model
  6. 6. 2.Twitter連携アプリ作成の実例
  7. 7. キティったーこんなのこれから作ってみますhttp://bit.ly/twtr_hack_rails
  8. 8. 2.1 下準備
  9. 9. アプリ登録Twitterにアプリの登録を行う dev.twitter.com なんかいれとく
  10. 10. アプリ登録Write権限も取れるように dev.twitter.com Read and Write に変更 dev.twitter.com Consumer key / Cosumer secretを 控えておく
  11. 11. rails インストールruby / rubygemsのインストール(説明省略)rubygemsを使ってrailsをインストールgem install rails
  12. 12. rails準備 rails new コマンドにより、アプリケーションの枠組みが作成される rails new <アプリ名>生成されるファイル群-rw-r--r-- 1 i7a16k staff 765 7 29 14:02 Gemfile-rw-r--r-- 1 i7a16k staff 2463 7 29 14:02 Gemfile.lock-rw-r--r-- 1 i7a16k staff 9208 7 29 14:02 README.rdoc-rw-r--r-- 1 i7a16k staff 274 7 29 14:02 Rakefiledrwxr-xr-x 8 i7a16k staff 272 7 29 14:02 app/drwxr-xr-x 10 i7a16k staff 340 7 29 14:02 config/-rw-r--r-- 1 i7a16k staff 159 7 29 14:02 config.rudrwxr-xr-x 3 i7a16k staff 102 7 29 14:02 db/drwxr-xr-x 3 i7a16k staff 102 7 29 14:02 doc/drwxr-xr-x 4 i7a16k staff 136 7 29 14:02 lib/drwxr-xr-x 3 i7a16k staff 102 7 29 14:02 log/drwxr-xr-x 8 i7a16k staff 272 7 29 14:02 public/drwxr-xr-x 3 i7a16k staff 102 7 29 14:02 script/drwxr-xr-x 8 i7a16k staff 272 7 29 14:02 test/drwxr-xr-x 3 i7a16k staff 102 7 29 14:02 tmp/drwxr-xr-x 4 i7a16k staff 136 7 29 14:02 vendor/
  13. 13. 2.2 Sign in with Twitter
  14. 14. TOPページ表示(1)controllerを追加し、TOPページを作成する rails g controller home index生成されるファイル群 create app/controllers/home_controller.rb route get "home/index" invoke erb create app/views/home create app/views/home/index.html.erb invoke test_unit create test/functional/home_controller_test.rb invoke helper create app/helpers/home_helper.rb invoke test_unit create test/unit/helpers/home_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/home.js.coffee invoke scss create app/assets/stylesheets/home.css.scss
  15. 15. TOPページ表示(2)root設定をroutes.rbに追加 routes.rb root :to => ‘home#index’public/index.htmlを削除 rm public/index.html ※ちなみにさっきでてたのはこのpublic.html
  16. 16. Twitter ログインgem設定をGemfileに追加 Gemfile gem ‘omniauth-twitter’ bundle installomniauth用の設定ファイルを追加 config/initializers/omniauth.rb TWITTER_CONSUMER_KEY = ‘xxxxx’ TWITTER_CONSUMER_SECRET = ‘yyyy’ Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET end ※dev.twitter.comで取得したconsumer keyとconsumer secretを使う
  17. 17. Twitter ログインTwitterログイン用のリンク追加 /app/views/home/index.html.erb <%= link_to ‘Sign in with Twitter’, ‘/auth/twitter’ %>
  18. 18. callbackの制御ログイン用のコントローラーを作成 rails g controller sessionsroutes.rbに設定を追加 routes.rb match ‘/auth/twitter/callback’ => ‘sessions#create’sessions_controller.rb に、createメソッド追加 sessions_controller.rb def create raise request.env[“omniauth.auth”].to_yaml end ユーザ情 報がこの中に入っているので 確認してみる
  19. 19. 取得された情報oauth後取得されている情報 provider: twitter uid: 118282075 info: nickname: i7a16k name: i7a location: Spikers Camp image: http://a0.twimg.com/profile_images/1602452666/ i7aicon_normal.jpg description: i7aで「いな」と読ませたいらしいです。16kはspikeoutというゲーム より。エンジニアとして http://giftee.co/ の中の人をやってます。ちなみにIME and DiMENSiONの中の人。男なんですけど、キ ティが好きです。 (キティの中の人含め) urls: Website: http://and-d.i7a16k.net/ Twitter: http://twitter.com/i7a16k credentials: token: 118282075-xxxxxxxxxxxxxxxxxxxxxxxxx secret: yyyyyyyyyyyyyyyyyyyyyyyy
  20. 20. モデルを作ろうuserモデルを作成 rails g model user provider:string uid:string name:string token:string secret:string rake db:migrate カラム名 型 意味 id integer 自動生成 provider string 連携サービス名 uid string 連携サービスのユーザid name string 連携サービスでの名前 token string アクセストークン secret string シークレットトークン
  21. 21. ログインロジックsessions#createにロジック追加 sessions_controller.rb def create auth = request.env[“omniauth.auth”] user = User.find_by_provider_and_uid(auth[“provider”],auth[“uid”]) || User.create_with_omniauth(auth) session[:user_id] = user.id redirect_to root_url enduser.rb にユーザ作成処理追加 user.rb self.create_with_omniauth(auth) create! do |user| user.provider = auth[“provider”] user.uid = auth[“uid”] user.name = auth[“info”][“name”] user.token = auth[“credentials”][“token”] user.secret = auth[“credentials”][“secret”] end end
  22. 22. ログイン後application_controller.rb に current_user メソッド追加 application_controller.rb helper_method :current_user private def current_user @current_user ||= User.where(:id => session[:user_id]) if session[:user_id] endindex.html.erbにログイン状態に応じた制御を追加 index.html.erb <% if current_user %> こんにちは <%=current_user.name%> さん <% else %> <%= link_to ‘Sign in with Twitter’, ‘/auth/twitter’ %> <% end %>
  23. 23. ログアウト実装index.html.erb に ログアウトのリンク追加 index.html.erb<% if current_user %> こんにちは <%=current_user.name%> さん <%= link_to ‘Sign Out’, signout_path %><% else %> <%= link_to ‘Sign in with Twitter’, ‘/auth/twitter’ %><% end %>routes.rb にログアウトの設定追加 index.html.erb match ‘/signout’ => ‘sessions#destroy’, :as => :signoutsessions_controller にdestroyメソッド追加 sessions_controller.rb def destroy session[:user_id] = nil redirect_to root_url end
  24. 24. 2.3 Tweet ・・・ はまた次回?

×