Yoしてますか。
どうやら、Yo APIとやらがある模様。遊んでみます。Yoされたら、ツイッターでやぁするやつを作ってみます。 #ちょっと何言ってんのか
今回は、YAHYAHWORKSにYoすると、@yahyahworks がナンカ言うやつを作ります。
heroku アプリケーションを作成
heroku create ppworks-yo
悲しい事故が起きないようにremoteの名前を変えておく。
git remote rename heroku ppworks-yo
これは、複数のherokuアプリケーションを管理していることを考慮して
間違えて別のローカルリポジトリから意図せずherokuにpushしてしまう
ことを防ぐためです。git push heroku master
でリリースできるのは便利なのですが、herokuのどのアプリケーションにdeployしようとしているかのコンテキストが今いるローカルリポジトリになってしまうので、上記のような悲しい事故が起こりがち。であればコマンドにコンテキストを持たせようという考えです。
今回のアプリであれば、以下のようにdeploy出来るようになるわけです。
git push ppworks-yo master
twitter アプリ作成
https://dev.twitter.com/ へアクセスしてログイン。https://apps.twitter.com/ から「Create New App」を選択。
ナンカ適当に埋める。
permissonを Read and Write に変更する。
更新しても Read Only のままで意味わからないけど、少し経てば反映されるので我慢する。
API Keys にあるAPI key
, API secret
をメモ。「Create my access token」からアクセストークンを作成。これまたすぐに表示されないのでつらいけど我慢する。少しすると、Your access token というところに、 Access token
、Access token secret
が表示されるのでメモ。Access levelがRead and write
となっていることを確認。
Yo callback用のapi 作成
Yoが来たらtwitter gemを使ってメッセージを返すコードです。コードは、ppworks/ppworks-yoに置いてあります。
大したことしないsinatraでいいかなと思います。credentialは環境変数に持たせたいのでdotenv
というgemを使います。.envファイルに書いた内容を環境変数に展開してくれる便利なgemです。twitterへのアップデートはずばりそのままtwitter
というgemを使います。
require 'sinatra' require 'twitter' require 'dotenv' set server: 'webrick' # twitter gemを使うと、これが必要になる Dotenv.load get '/:yo_callback_path' do return status 400 unless params[:username] # username parameterがない場合は Bad Requestとして扱う return status 400 unless params[:yo_callback_path]==ENV['YO_CALLBACK_PATH'] # Yoに設定したパスは開発者しか知り得ないはずなのでそれが一致しない場合はBad Request client = Twitter::REST::Client.new do |config| config.consumer_key = ENV['API_KEY'] config.consumer_secret = ENV['API_SECRET'] config.access_token = ENV['ACCESS_TOKEN'] config.access_token_secret = ENV['ACCESS_TOKEN_SECRET'] end message = ENV['MESSAGES'].split(',').sample # 環境変数MESSAGES内の候補をランダムに抽出 client.update "#{message} #{params[:username]}さん" # twitterでつぶやく end
specはこんな感じ。
App API access has YO_CALLBACK_PATH has username parameter should be ok has no username parameter should eq 400 has invalid YO_CALLBACK_PATH has username parameter should eq 400 has no username parameter should eq 400 has no YO_CALLBACK_PATH has username parameter should eq 404 has no username parameter should eq 404
herokuにdeploy
環境変数にcredentialを設定します。YO_CALLBACK_PATHは推測しずらい適当な文字列を設定してください。後ほど使います。
pwgen -s 12
の結果とか。
- API_KEY: 前述のtwitter API key
- API_SECRET: 前述のtwitter API secret
- ACCESS_TOKEN: 前述のtwitter アカウントの Access token
- ACCESS_TOKEN_SECRET: 前述のtwitter アカウントの Access token secret
- YO_CALLBACK_PATH: あとでYO API設定で設定するcallbackのパス。
heroku config:set \ API_KEY=your_api_key \ API_SECRET=your_api_secret \ ACCESS_TOKEN=your_access_token \ ACCESS_TOKEN_SECRET=your_access_token_secret \ MESSAGES='message1,message2' \ YO_CALLBACK_PATH ='api_path'
heroku config
してみて、設定されていればokです。
git push ppworks-yo master
YOのapiアカウントを作る
YO API用のユーザー名と、そのユーザーにYOが来た時に呼び出すURL
などを指定します。YOが来た時に呼び出すURLは今回作って herokuにdeployしたもの + 先ほど設定したYO_CALLBACK_PATH
です。
例えば、herokuアプリケーション名がppworks-yo
、YO_CALLBACK_PATHをFDolzFF97a12
にしていた場合は、https://ppworks-yo.herokuapp.com/FDolzFF97a12
となります。
YOしてみる
やぁ PPWORKSさん
— yahyahworks (@yahyahworks) 2014, 7月 24
出来た。

Sinatra: Up and Running: Ruby for the Web, Simply
- 作者: Alan Harris,Konstantin Haase
- 出版社/メーカー: O'Reilly Media
- 発売日: 2011/11/21
- メディア: Kindle版
- この商品を含むブログを見る