Skip to content

Instantly share code, notes, and snippets.

@itiut
Last active July 12, 2023 04:13
Show Gist options
  • Save itiut/5820445 to your computer and use it in GitHub Desktop.
Save itiut/5820445 to your computer and use it in GitHub Desktop.
twitter bot作成のプロセス

twitter bot作成のプロセス

環境構築

rubyのインストール(ubuntu)

$ sudo apt-get install git build-essential libreadline-dev libssl-dev
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
$ echo 'eval "$(rbenv init -)"' >> ~/.profile
$ exec $SHELL -l
$ rbenv install 2.0.0-p195
$ rbenv rehash
$ rbenv global 2.0.0-p195

rubyのインストール(os x)

これでできる?
http://qiita.com/s-yamaz@github/items/b38b330b44f517f3c77c

bundlerのインストール

$ gem install bundler

twitterの認証の設定

  1. http://twitter.com/apps/new からアプリケーションを登録
    consumer keyconsumer secretをメモっておく
  2. http://atoken4me.heroku.com/ からOAuthトークンを取得
    oauth tokenoauth token secretをメモっておく
  3. 登録したアプリケーションのSettingsからApplication TypeAccessRead and Writeなどに設定しておく

herokuの初期設定

  1. https://www.heroku.com/ からSign Up
  2. SSH公開鍵を登録する
    AccountページのSSH Keysから
    鍵を作っていない場合は、$ ssh-keygen -t rsaなどする
  3. Add-onsを使うためにクレジットカード情報を登録する
    無料のAdd-onsだけを使うのにも、登録が必要
    AccountページのBillingから

プロジェクトの作成

ローカルリポジトリの作成

$ git init
$ echo "vendor" >> .gitignore
$ git add .
$ git commit -m "Initial commit"

bundlerを使ってgemをインストール

Gemfileを作成

source "https://rubygems.org"

gem 'foreman'
gem 'twitter'

インストール

$ bundle install --path=vendor/bundle

コーディング

bot.rbを作成

# coding: utf-8

require 'twitter'

Twitter.configure do |config|
  config.consumer_key       = 'アプリの consumer key'
  config.consumer_secret    = 'アプリの consumer secret'
  config.oauth_token        = 'ユーザーの oauth token'
  config.oauth_token_secret = 'ユーザーの oauth token secret'
end

# このへんは自由に
Twitter.update(Time.now.strftime("もう%H時%M分か・・・"))

実行

$ bundle exec ruby bot.rb

foremanで環境変数を使えるようにする

.envを作成
イコールの周囲にスペースを入れてはいけない。下の例の波括弧も入力しない。

TWITTER_CONSUMER_KEY={アプリの consumer key}
TWITTER_CONSUMER_SECRET={アプリの consumer secret}
TWITTER_OAUTH_TOKEN={ユーザーの oauth token}
TWITTER_OAUTH_TOKEN_SECRET={ユーザーの oauth token secret}
TZ=Asia/Tokyo

.envをgitで無視

$ echo ".env" >> .gitignore

bot.rbを編集

Twitter.configure do |config|
  config.consumer_key       = ENV['TWITTER_CONSUMER_KEY']
  config.consumer_secret    = ENV['TWITTER_CONSUMER_SECRET']
  config.oauth_token        = ENV['TWITTER_OAUTH_TOKEN']
  config.oauth_token_secret = ENV['TWITTER_OAUTH_TOKEN_SECRET']
end

実行

$ bundle exec foreman run ruby bot.rb

Procfileを使ってコマンドを簡略化?する

Procfileを作成

bot: ruby bot.rb

実行

$ bundle exec foreman start bot

コミット

$ git add .
$ git commit -m "Create bot.rb"

heorkuにデプロイ

このへんを参照
http://itiut.hatenablog.com/entry/2013/05/31/024209

heroku toolbeltのインストール(ubuntu)と初期設定

$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
$ heroku login

appの作成

$ heroku create

プロセス数を0に

$ heroku ps:scale web=0

heroku-configを使って、.envに書いた環境変数をherokuに追加

$ heroku plugins:install git://github.com/ddollar/heroku-config.git
$ heroku config:push

デプロイ

$ git push heroku master

schedulerアドオンを追加して、設定画面を開く

$ heroku addons:add scheduler:standard
$ heroku addons:open scheduler

Add Job...から実行したいコマンドを追加

$ bundle exec foreman start bot

gemのclockworkを使って定期的に実行する

Gemfileを編集して、$ bundle install

source "https://rubygems.org"

gem 'foreman'
gem 'twitter'
gem 'clockwork'

bot.rbを編集

# coding: utf-8

require 'twitter'
require 'clockwork'
include Clockwork

Twitter.configure do |config|
  config.consumer_key       = ENV['TWITTER_CONSUMER_KEY']
  config.consumer_secret    = ENV['TWITTER_CONSUMER_SECRET']
  config.oauth_token        = ENV['TWITTER_OAUTH_TOKEN']
  config.oauth_token_secret = ENV['TWITTER_OAUTH_TOKEN_SECRET']
end

handler do |job|
  Twitter.update(Time.now.strftime("もう%H時か・・・"))
end

every(1.hour, 'tweet.job')

Procfileを編集

bot: bundle exec clockwork bot.rb

実行

$ bundle exec foreman start bot

デプロイした後、botのプロセス数を1に

$ heroku ps:scale bot=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment