Heroku Twitter Botをつくりなおしてみる-Win編
Twitter Botをつくってみる-Win編 - プログラミングお勉強記録
Twitter Botをつくってみる-Mac編 - プログラミングお勉強記録
Herokuのアドオンcronをつかって、
1日1回動くBotです。
3日ほど正常に動いていたようですが、
その後タイムラインに出てこない状態です。
Herokuのログ上では動いているようなので、
Twitter側でひっかかっているのかなぁ、、などとぼんやり思っていたのですが、
こういうときどういう手順でテストをしたらいいのかわからず、、
Twitterの認証(確認)
(数日動いていたわけで、それからなにもいじってないんだから認証のところが、、ってことはないと思ったんだけど)
Rubyでつぶやけたので、認証のところは大丈夫。
…もういっかい最初からやってみましょうか。
以前のエントリと重複するところもありますが、
修正したところなども交えてもう一度まとめます。
Winです。
1日1回「bonjour!」とつぶやくのでアプリ名は「bonjour」です。
なのでフォルダとかも「bonjour」になってます。
もちろんソースは
http://d.hatena.ne.jp/ruedap/20110209/ruby_heroku_twitter_bot
こちらをもとに、Winでbonjourな手順をメモしておきます。
準備
1.gemをインストール
$ gem install heroku sinatra bundler get-twitter-oauth-token --no-rdoc --no-ri
2.Git Bashで
bonjourフォルダをつくって準備。
$ mkdir bonjour $ cd bonjour $ git init
※この時点で、bonjourフォルダのなかには「.git」というフォルダ1つ。かすれたアイコンの。
3.Twitter認証の確認
こちらであれこれ確認します。
Twitter Developer Platform — Twitter Developers
Read and writeになってるかとか。
Consumer key
Consumer secret
Access token
Access token secret
4.トークン取得
Winだと文字化けするけど、コピペできなくてつらいけど、がんばる。
$ get-twitter-oauth-token
こんなふうに文字化けします。(Consumer keyなどは塗りつぶしています)
[0mというところのあとに、必要なキー(Consumer keyとConsumer secret)を貼りつけていくと、
URLが表示されます。
Macとかだと勝手にこのURLがひらくそうですが、Winでは開きません。
しかもプロンプトからコピーできないので、手入力…
と思ったら、コピーする方法を知らないだけでしたorz
コマンドプロンプト内のコピーはできないのでしょうか? - winXPを... - Yahoo!知恵袋
で、「許可する」を選ぶとPINを教えてくれるので、それをプロンプトに貼りつけると、
TokenとSecretを教えてくれるので、これをコピーしておきます。
5.ファイルを4つつくる。
全部UTF-8で書くこと。
・ひとつめ Bundler用「Gemfile」
source :rubygems gem 'sinatra' gem 'twitter'
拡張子ないので注意。
Winでは保存したフォルダをひらいて、
「ツール」>「フォルダオプション」>「表示」>「登録されている拡張子は表示しない」のチェックマークをはずして、
拡張子を消します。
・ふたつめ Rack用「config.ru」
おなじディレクトリ内にあるファイルをrequireするときは、ファイル名の前に「./」をいれる。(Ruby1.9以降)
require './app.rb' run Sinatra::Application
・みっつめ Sinatra用「app.rb」
おなじディレクトリ内にあるファイルをrequireするときは、ファイル名の前に(ry
require 'rubygems' require 'sinatra' require './tweet.rb' get '/' do 'under construction' end get '/random_tweet' do Tweet.new.random_tweet # 動作チェックが終わったらコメントアウトすること end
・よっつめ 実際につぶやく内容や認証用「tweet.rb」
ソースファイルに日本語を含む時にいれる宣言が1行目。
あと実際につぶやく言葉を単純な配列で書きなおしています。
# -*- coding: utf-8 -*- require 'rubygems' require 'twitter' class Tweet def initialize @text = [ "bonjour!", #ここで31個作成すること!! "いまなんじ?", "おやつはなにかな?", "ぽえーん", "さば?" ] Twitter.configure do |config| config.consumer_key = 'Consumer keyを挿入する' config.consumer_secret = 'Consumer secretを挿入する' config.oauth_token = 'Tokenを挿入する' config.oauth_token_secret = 'Secretを挿入する' end end def random_tweet tweet = @text[rand(@text.length)] update(tweet) end def daily_tweet tweet = @text[Time.now.day - 1] update(tweet) end private def update(tweet) return nil unless tweet begin Twitter.update(tweet.chomp) rescue => ex nil # todo end end end
6.最後にもういっこインストール
$ bundle install
これをすると、フォルダのなかに「Gemfile.lock」というのがつくられます。
フォルダのなかは、「1フォルダ、5ファイル」
公開(テスト)
Heroku上にWebアプリを作成、、はすでに済んでいます。
Git Bashをひらいて、
$ git add . $ git commit -m 'first commit!'
あの、、「git」のなとにはひとつスペース空いてます!
あと、そのあとは
$ git push heroku master
てやるとエラーになります。
fatal: 'heroku' does not appear to be a git repository fatal: The remote end hung up unexpectedly
て。下記に書き換えればOK
$git remote add heroku git@heroku.com:bonjour.git $git push heroku master
エラーメッセージ。
Permission denied (publickey). fatal: The remote end hung up unexpectedly
SSHてやつですか。そういえば前回もここで苦戦した記憶。
$heroku keys:add
これでSSH鍵がアップロードされたみたい。
あらためてpushしてみましたが、エラー。。
$ git push heroku master ! Invalid path. ! Syntax is: git@heroku.com:<app>.git where <app> is your app's name. fatal: The remote end hung up unexpectedly
もういっかいプッシュしてみようと思ったら、今度はこんなエラーメッセージ
$ git push heroku master To git@heroku.com:bonjour.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@heroku.com:bonjour.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details.
むむむ…
http://d.hatena.ne.jp/nayuko22/20120120
こちらにあったコマンドを試してみたら、
プッシュできた!!!!
$ git push heroku master --force
確認(テスト)
http://アプリ名.heroku.com/random_tweet
にアクセスして、「英数字がいっぱい表示」されると成功らしいのだけど、、、表示されない(´・ω・`)
けどタイムラインをみるとつぶやけています!
(やたー!)
公開(自動化)
テスト用に書いていたところをコメントアウトします。
「app.rb」ファイルのこの部分です。
get '/random_tweet' do # Tweet.new.random_tweet # 動作チェックが終わったらコメントアウトすること end
そしたら自動ツイート機能を追加しましょう。
「Rakefile」をつくります。
拡張子ないので注意。
requireするとき気をつける。
require './tweet.rb' task :cron do Tweet.new.daily_tweet end
※これで、1フォルダ、6ファイルになりました。
$ git add . $ git commit -m 'complete!' $ git remote add heroku git@heroku.com:bonjour.git $ git push heroku master
ふぅ…
これで明日、動くといいなー!!