SuzuBlog

webのお勉強はじめたばかりの初心者。備忘録

軽い気持ちでTwitterBotを作ろうとして苦戦してた話【Ruby】

思いっきり今の勉強内容から脱線してるのですが。

数日前、急にTwitterBotってどうやって作られてるんだろう?と疑問に感じたので調べてました。

…っていうのは半分建前で。私のオタクアカウントで推しに毎朝挨拶してるのですが、その返事が欲しかったんです。自作自演でも構わない!!!!!!!!!!!!!!!!!

っていう深夜テンションの勢いでTwitterデベロッパー申請を送り、1度「もうちょっと詳しく!」ってお返事が来たけれど、

「勉強用です!」「個人で使用します!」「利益を求めません!」「DMは使いません!」「フォローは手動でします!」「RubyかJS使います!」「趣味です!!!!」「スパムなんてしないよ!!!!だって趣味だからね!!!」

的なことを箇条書きでそれっぽく書いてGoogle翻訳に突っ込んだものをそのまま返信しましたが、なんとか審査を通過しました。

(好奇心の赴くまま)とりあえずやってみよ~!っと思ったわけです。

参考にしたサイト RubyでTwitterBotを作ろう!【導入編】 | 東京工業大学デジタル創作同好会traP

Twitterライブラリ、DevKitのインストールをして…

TLへ呟くプログラムはOK。呟けた!

問題はこの次でした。

リプライを送るプログラムを書こうとすると動かない!!!!!!!!

なんで~~~!?(´;ω;`)???

ってなりながら、質問を投げる私。

teratail.com ※実際に私が投稿した質問。

結論…

Twitter::Streaming::Clienはもう使えない!!!!!!!t

もう使用できないTwitter::Streaming::Clientを使用したサンプルがごろごろ落ちているので気を付けましょう!!!!じゃないと私みたいにハマります!!!!!!

その後に参考にした記事

qiita.com

結果ざっくりこんな感じのプログラムになりました。

require 'twitter'

@client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "consumer_key"
  config.consumer_secret     = "consumer_secret"
  config.access_token        = "access_token"
  config.access_token_secret = "access_token_secret"
end

@client.mentions_timeline.each do |tweet|
    puts "\e[33m" + tweet.user.name + "\e[32m" + "[ID:" + tweet.user.screen_name + "]"
    puts "\e[0m" + tweet.text
    if tweet.text.include?("おはよ")
        @client.update("@#{tweet.user.screen_name} おはよ!#{tweet.user.name}さん!", in_reply_to_status_id: tweet.id)
 else
     @client.update("@#{tweet.user.screen_name} #{tweet.user.name}さん、どうしたの?", in_reply_to_status_id: tweet.id)
    end
    @client.favorite(tweet.id)
end

自分へのリプを確認し、「おはよ」が含まれてたら「おはよ!〇〇さん!」それ以外は「〇〇さん、どうしたの?」と返し、いいねする!

本当は文章中のキーワードによってもっと返事を変えたりしてるけどそこは省略…

1つ思ったのは

「elseはelseなのにelseifじゃなくてelsif」なんだ!?!?!?

でした………(Ruby全く触ったことないからせっかくだしチャレンジしよう精神)

まだ定期実行の手法探ししなきゃなんですが、ここまででちょっと息抜きのつもりが思った以上に時間がかかってしまったので、ちゃんとVue,jsに戻りたいと思います~~~~~