プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

学習記録③「heroku + sinatraでTwitterBOTを喋らせる」

やること

題名の通り、herokuを使ってTwitterBOTを作成します。
取り上げるのは現在時刻をPostするだけのBOTですが、herokuで環境をこさえておけば、今後複雑な処理を実装するときなんかに重宝するのではないかと思います。ローカルでだけ動くものを作っても面白くないですもんね。

環境

Ruby(1.9.2)
sinatra(1.3.1)
・bundler(1.0.21)
・herokuアカウント

必要なgemのインストール

gem install heroku sinatra bundler get-twitter-oauth-token twitter_oauth

とにかくインストールしましょう。

プログラミング

今回はsinatraを使うので、ファイル構成は以下のように設定します。

.git
app.rb
Gemfile
config.ru
tweet.rb

それぞれのソースは以下のとおりです。

Gemfile
source :rubygems
gem 'sinatra'
gem 'twitter'
gem 'twitter_oauth'
config.ru
require './app.rb'
run Sinatra::Application
app.rb
require 'rubygems'
require 'sinatra'
require './tweet.rb'

get '/' do
  'running'
end
get '/tweet' do
  Tweet.new.tweet
end
tweet.rb
require 'rubygems'
require 'twitter_oauth'
require 'twitter'

class Tweet
  def tweet
    t = TwitterOAuth::Client.new({
      :consumer_key=>'取得した値を入力する',
      :consumer_secret=>'取得した値を入力する',
      :token=>'取得した値を入力する',
      :secret=>'取得した値を入力する'
      })
       t.update "#{Time.now}"
       end
end

'取得した値を入力する'には、RubyとOAuthを使ったTwitter Botの作成(環境構築編)を参照してください。私も勉強記録①で参考にさせて頂いています。

herokuにアプリを新規作成

heroku上にアプリを作成。たったこれだけです。簡単です。

heroku create testtesttesttest3333(私が設定したアプリケーション名)

SSHキーがないって怒られたら以下のコマンドを試してみてください。

ssh-keygen -t rsa -C "YOUR_EMAIL_ADDRESS@example.com"

SSHキーを再発行して登録してもうまくいかない場合は、$HOME/.ssh/config内に

Host heroku.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/YOUR_SSH_KEY

と、表記してみてください。あるいはYOUR_SSH_KEYに意図しない表記があった場合は記述を改めてください。続・$HOME/.ssh/configを活用していますか?が参考になります。高度な設定は真似できてませんが、githubとherokuのSSH鍵を共存させるのに使っています。

公開するために

bundle installして公開の準備を整えます。ソースを格納してるディレクトリで以下のコードを実行してください。

$ bundle install

Gemfile.lockが生成されたら成功です。いよいよ公開しますよ。

.git
app.rb
Gemfile
Gemfile.lock
config.ru
tweet.rb

ディレクトリがこんな感じになればOK

gitを使ったherokuにpush

$ git add .
$ git commit
コメントを記入して抜ける
$ git push heroku master

これでOK。試しに「$ heroku open」でアプリケーションを開いてください。画面に「running」と表示されればばOKです。そこで「http://testtesttest3333.heroku.com/tweet」と入力すれば、BOTが現在の時刻をつぶやきます。画面はエラーのように映りますが、遷移先の画面を記述していないので今回はスルーしてください。

こんな感じです。


いかがでしたでしょうか。
かなり簡略化しているので、いろいろと不明な点もあるかと思います。気になった方や間違いを指摘してくれる素敵な御仁がおりましたら是非是非からんであげてください。
今後はheroku + sinatraで動くものをつくっていきます。ご期待。