Skip to content

Instantly share code, notes, and snippets.

@QB
Last active August 29, 2015 14:07
Show Gist options
  • Save QB/e9374ce22e145fcc754a to your computer and use it in GitHub Desktop.
Save QB/e9374ce22e145fcc754a to your computer and use it in GitHub Desktop.
フォロー・リムーブ等を管理するスクリプト。動かすと、カレントに諸々のdatファイルをまき散らすので、気をつけてください。
require "twitter"
require "json"
# データファイル名に使う単語を決めておく (ユーザ名が接頭辞になる)
FR_FILE = "_friend.dat"
FO_FILE = "_follower.dat"
MESSAGE_FILE = "_message.dat"
# トークンファイルの名前も決めておく
TOKEN_FILE = "token.json"
# どのアカウントを対象にするか (screen_nameで指定)
# 必ずTOKEN_FILEの中に入っているものを指定する
account = ["account1", "account2"]
##### 設定ここまで #####
class AdminFollow
def initialize(user)
@screen_name = user
declare
@bar = "\n" + "=" * 20
@FR_FILE = user + FR_FILE
@FO_FILE = user + FO_FILE
@MESSAGE_FILE = user + MESSAGE_FILE
# 前回データの有無
@fr_exist = File.exist?(@FR_FILE)
@fo_exist = File.exist?(@FO_FILE)
@client = Twitter::REST::Client.new do |config|
config.consumer_key = TOKEN[user]["consumer_key"]
config.consumer_secret = TOKEN[user]["consumer_secret"]
config.access_token = TOKEN[user]["access_token"]
config.access_token_secret = TOKEN[user]["access_token_secret"]
end
end
def declare
puts
puts "#" * 40
puts "### @" + @screen_name + " について処理を開始します"
puts "#" * 40
end
def screen(array)
back = @client.users(array).map(&:screen_name)
return back
end
def read
# 前回取得したフォロー関係情報を配列に詰める
@past_fr = @fr_exist ? open(@FR_FILE).readlines.map(&:to_i) : []
@past_fo = @fo_exist ? open(@FO_FILE).readlines.map(&:to_i) : []
puts "前回データ読込終了" + @bar
end
def request
@now_fr = @client.friend_ids.to_a
@now_fo = @client.follower_ids.to_a
puts "現在のフォロー関係の取得終了" + @bar
end
def puts_unrequited_list
now_difference = @now_fr - @now_fo
puts screen(now_difference)
puts "現在の片思いは上記の通りです" + @bar
end
def data_write
puts @FR_FILE + "を新規作成します" if !@fr_exist
puts @FO_FILE + "を新規作成します" if !@fo_exist
# どうせ上書きするのでwなのは気にしない
fr = open(@FR_FILE, "w")
fo = open(@FO_FILE, "w")
@now_fr.each {|f| fr.puts f }
@now_fo.each {|f| fo.puts f }
puts "dataの書き込み完了" + @bar
fr.close
fo.close
end
def message_write
n_fr = @now_fr - @past_fr # new friend
d_fr = @past_fr - @now_fr # disappeared friend
n_fo = @now_fo - @past_fo # new follower
d_fo = @past_fo - @now_fo # disappeared follower
puts @MESSAGE_FILE + "を新規作成します" if !File.exist?(@MESSAGE_FILE)
file = open(@MESSAGE_FILE, "a+")
file.puts Time.now.to_s
file.puts "new friend: " + screen(n_fr).to_s
file.puts "disappeared friend: " + screen(d_fr).to_s
file.puts "new follower: " + screen(n_fo).to_s
file.puts "disappeared follower: " + screen(d_fo).to_s
file.puts
puts "messageの書き込み完了" + @bar
file.close
end
end
open(TOKEN_FILE) {|io| TOKEN = JSON.load(io) }
account.each do |a|
rs = AdminFollow.new(a)
rs.read
rs.request
rs.puts_unrequited_list
rs.data_write
rs.message_write
end
{
"account1": {
"consumer_key": "YOUR_CONSUMER_KEY",
"consumer_secret": "YOUR_CONSUMER_SECRET",
"access_token": "YOUR_ACCESS_TOKEN",
"access_token_secret": "YOUR_ACCESS_TOKEN_SECRET"
},
"account2": {
"consumer_key": "YOUR_CONSUMER_KEY",
"consumer_secret": "YOUR_CONSUMER_SECRET",
"access_token": "YOUR_ACCESS_TOKEN",
"access_token_secret": "YOUR_ACCESS_TOKEN_SECRET"
},
"account3": {
"consumer_key": "YOUR_CONSUMER_KEY",
"consumer_secret": "YOUR_CONSUMER_SECRET",
"access_token": "YOUR_ACCESS_TOKEN",
"access_token_secret": "YOUR_ACCESS_TOKEN_SECRET"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment