読者です 読者をやめる 読者になる 読者になる

代々木で働く超新米エンジニアの足跡

代々木で働くエンジニアです。超新米です。

twitterbotを作る(じゃんけんプログラム)

ぐー、ちょき、ぱーのいずれかをリプライしたらランダムに何かを返し結果を報告するじゃんけんプログラムをつくった

ファイルを3つ用意した。
APIデータファイル、クラスファイル、実行ファイル

APIのファイルは、アカウント情報のようなものをかいてるだけなので省略

初心者歓迎詐欺被害者の会: RubyでTwitter Botをつくる

ここを参考にした。

クラスファイルは、botのクラスをかいたもの

class Bot
attr_accessor :client, :timeline

def initialize
keys = YAML.load_file('./config.yml')

@client = Twitter::REST::Client.new do |config|
config.consumer_key = keys["api_key"]
config.consumer_secret = keys["api_secret"]
config.access_token = keys["access_token"]
config.access_token_secret = keys["access_token_secret"]
end

TweetStream.configure do |config|
config.consumer_key = keys["api_key"]
config.consumer_secret = keys["api_secret"]
config.oauth_token = keys["access_token"]
config.oauth_token_secret = keys["access_token_secret"]
config.auth_method = :oauth
end

@timeline = TweetStream::Client.new
end


ここらへんは、tweetstreamとyamlAPIの情報を読み込ませてるだけだと思う。



def post(text = "", twitter_id:nil, status_id:nil)
if status_id
rep_text = "@#{twitter_id} #{text}"
@client.update(rep_text, {:in_reply_to_status_id => status_id})
puts "#{rep_text}"
else
@client.update(text)
puts "#{text}"
end
end

textに書かれた内容を発言するような仕組みの定義



def fav(status_id:nil)
if status_id
@client.favorite(status_id)
end
end

上のお気に入りバージョン




実行ファイル

if !contents.index("RT")
str_time = Time.now.strftime("[%Y-%m-%d %H:%M]")

これで、リツイートいがいの全体?の情報を取得している

if contents =~ /^@ID\s*/
if contents =~ /リプライ内容/
text = "返す内容\n#{str_time}"
bot.fav(status_id:status_id)
bot.post(text, twitter_id:twitter_id, status_id:status_id)
end
end

@IDのところに自分のIDを入れると、自分のIDへのリプライに反応
リプライ内容のとこに、ぐーやぱーなどいれれば、それがリプライされたとき反応するようになる。
bot.favはお気に入り?に入れるだけなのでなくても問題ないはず
bot.post以下でtextに書かれた内容を返すよう命令してる




調子にのってツイートしまくると規制されるから注意

規制基準
【Twitter】 規制について - Yahoo!知恵袋