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

猫の手も借したい

暇を極めた時に更新します

Twitterのアイコンをランダムに変更するスクリプト

2017年最初の月ももう終わりですね。皆さんいかがお過ごしでしょうか。
私は毎日しんどいしんどい言いながら死んだ目で接客してます。

一体どこの層に需要があるのかわかりませんが、タイトルの様なものを作ったので公開します。

要件

Ruby (2.x.xで動作確認 別に最近のなら他ver.でも動くと思う)
Twitter gem
Tweetstream gem

これなに珍百景

アイコン用画像フォルダにぶっ込んである画像からランダムでアイコンを変更します。
"/change_icon"のリプライをトリガーに動作します。


いままでTwitter連携アプリはTwitter gem一本を使ってたけどなんだかTweetstream Gemのほうがよさげなので併用。
ちなみにきっかけは、TwitterGemでは「誰がどれかをツイ消しをした」というところまでしか取得できないのに対しstreamのほうは「誰がどのツイートを消した」というところまで取得できることを知ったため。とはいっても降ってくるのはツイのidなのでどっちみち消えた物は見れないけど。


リプライの判定が
/^@TwitterID ¥/change_name/
なので(要は前方一致)、以降は何が書いてあっても無視します。つまりこれを利用して連投規制回避ができるということ。うるさければ完全一致にして弾いてもいいと思う。

どっかのアホに毎秒アイコンを変えられてTLがすごいことになったのでレスポンスも任意でいいと思います。でもレスポンスないと変わったのかどうかわかりにくいところあるよね。

また、TwitterAPI制限が大きく変わってから今の仕様をよくしらないのでどれくらいの頻度でアイコンを変えられるのか不明。ほどほどに。


#coding: utf-8

require 'twitter'
require 'tweetstream'

#Ck/Cs
CONSUMER_KEY    = "ぴゅぴゅんって飛び出した"
CONSUMER_SECRET = "明日も追い越して"
ACCESS_TOKEN    = "ときめきポポロン♪って"
ACCESS_SECRET   = "きらめきの音が響く"

#TL取得用
TweetStream.configure do |config|
  config.consumer_key       = CONSUMER_KEY
  config.consumer_secret    = CONSUMER_SECRET
  config.oauth_token        = ACCESS_TOKEN
  config.oauth_token_secret = ACCESS_SECRET
  config.auth_method        = :oauth
end


#画像変更/投稿用
REST_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_SECRET
end


Streaming_client.on_inited do
  puts 'TL Connected.'
end

icons = Dir.glob("アイコンをぶち込んであるディレクトリ/*") 
Streaming_client.userstream do |obj|
  if obj.class == Twitter::Tweet && obj.text =~ (/^@Twitter_ID \/change_icon/)
    icon = File.open(icons.sample) #iconsから一つランダムに取得
    REST_client.update_profile_image(icon) 
    REST_client.update("@#{obj.user.screen_name} Done. #{Time.now}", options = {in_reply_to_status_id: obj.id})
  end
end


私はこれにアイコンリセットコマンドを追加してます。また、指定されたアイコンに変更したりする機構も付けたいのでそのうち。

にしても自分用に他の機能も付けてるとはいえ120行あったスクリプトを公開用に整理したらここまで短くなるの何も言えねえな。