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

【Ruby】Twitterアカウント名をツイートから誰でもいじれるようにした

Twitterアカウント名をだれでも変えれるようにした.

f:id:McG:20160217154346p:plain

こんな感じで,ハッシュタグ #さこくんの名前をつけてツイートすると,その名前に変えてくれるスクリプトを書いた.

そしたら,わずか5分足らずに20位のリプが来たのでタイムラインを荒らしたことを申し訳なく思いながら終了. というかみんなTwitter好きすぎ

f:id:McG:20160217154942p:plain

こんなリプが飛んできた(一部)

ひどくないです?w

みんなの反応

ご迷惑をおかけいたしました.

ソースコード

mcg.hateblo.jp

Twitterのbot化のあたりはこちらの記事を参照してください.

以下ソースコード

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_streaming = Twitter::Streaming::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


def rename_profile(name)
  begin
    $client.update_profile({
      name: name
    })
    msg = "迫くんの名前を#{name}に変えたお!!(だれでも変えれる仕様)"
    return msg
  rescue => e
    p e
    return e
  end
end


$client_streaming.user do |object|
  case object
  when Twitter::Tweet
    if (/#さこくんの名前/ =~ object.text) && !(/RT/ =~ object.text)
      #botにリプライきてから処理開始 
      tweet = object.text
      name = tweet.delete("#さこくんの名前")
      puts name
      option = { 'in_reply_to_status_id' => object.id }

      msg = rename_profile(name)

      $client.update msg,option
    end
  end
end

Streaming APIを使って #さこくんの名前 が含まれているツイートを取得して,ツイートを整形,定義したrename_profileメソッドに渡して名前を変えてあげる処理をしています.

ミスった点

あっ.ってなりました. deleteメソッドを使っていたんですが,文字列内部分一致で消しちゃうんですね.正規表現に書き換えておきます.

感想

通知が鳴り止まなくて大変,かつTL汚して周りに迷惑なのでやめましょう()

参考

先輩が似たようなことやってたのでコード読ませていただきました.

github.com

© 2016 Yuki Sako.