TwitterなりすましBotを作った

この記事はAizu Advent Calendar 2016 3日目の記事です。
前の人は、@mot_xxさん、次の人は @stringampさんです。


指定した誰かのツイートを取得してランダムでつぶやくBotです。 サーバーはHeroku、言語はRubyを使います。 まずGitリポジトリのセットアップをして、 Gemfileに

source 'https://rubygems.org'
ruby '2.3.1' 
gem 'sinatra', '1.4.7'
gem 'twitter', '5.16.0'

を記述し bundle install をする。

tweet.rbに

require 'twitter'

class Tweet
  def initialize
    @text = []
    @client = Twitter::REST::Client.new do |config|
      config.consumer_key        = "YOUR_CONSUMER_KEY"
      config.consumer_secret     = "YOUR_CONSUMER_SECRET"
      config.access_token        = "YOUR_ACCESS_TOKEN"
      config.access_token_secret = "YOUR_ACCESS_SECRET"
    end
  end
  def list_tweet
    @client.user_timeline("@ユーザー名",{count:200,exclude_replies:true}).each do |timeline|
    @text.push(@client.status(timeline.id).text)
    end
  end
  def random_tweet
    tweet = @text[rand(@text.length)]
    push_tweet(tweet)
  end
  def push_tweet(tweet)
    puts tweet
    @client.update(tweet)
  end
  def tweet
    self.list_tweet
    self.random_tweet
  end
end
DJ = Tweet.new.tweet

と記述します。
ツイートする内容は @client.user_timeline("@ユーザー名",{オプション}) で指定できます。

次にapp.rb

require 'sinatra'
require_relative 'tweet.rb'
get '/' do
  Tweet.new.tweet
end

config.ru

require_relative 'app.rb'
run Sinatra::Application

と記述

git commit -am "コメント
git push heroku master

でherokuにデプロイをします。

heroku open をすると動作確認ができます。 これで何かツイートされるはずです。

そしたらherokuにHeroku Schedulerのアドオンをインストールして定期的に起動するようにして完成です。 f:id:Nozomi_M:20161202170534p:plain


何故かすべてのツイートを取得することができなかったので妥協案

次はDBを使ってツイッター版魚拓を作りたい

参考記事

RubyでTwitter Botを作ってHerokuで動かす - あかんわ
Twitter API Timeline解説 - のんびりしているエンジニアの日記