知人の依頼で作成
要件
- ランダムなインターバルでフォローする
- 知人曰くBAN対策らしいけど、あまり関係ないような気もする
- 任意の検索ワードで検索して、一番上のひとをフォローする(#相互フォロー など)
- そのユーザーがフォロー済みだった場合は、そのユーザーのフォロワーのなかからランダムで一人取得してフォローする
実装
- cronスケジューラでrubyスクリプトを1分に1回定期実行する
- これだとランダムなインターバルにならないので、rubyスクリプト内で実行を絞る
if rand <= FOLLOW_COUNT_PER_DAY / 1440.0
- これだとランダムなインターバルにならないので、rubyスクリプト内で実行を絞る
# frozen_string_literal: true
require 'twitter'
require 'logger'
FOLLOW_COUNT_PER_DAY = 200
SEARCH_WORDS = '#相互フォロー'
class TwitterApi
def initialize(logger)
@logger = logger
end
def follow
# 検索結果の一番上にいるユーザーをターゲットにする
target_user_id = client.search(SEARCH_WORDS, lang: 'ja', result_type: 'recent').first.user.id
# ターゲットユーザーがフォロー済みかどうか判定
if client.friendship?(client.user.id, target_user_id)
# ターゲットユーザーがフォロー済みの場合は、そのユーザーのフォロワーをランダムに取得しターゲットにする
target_user_id2 = client.follower_ids(target_user_id).to_a.sample
client.follow(target_user_id2)
@logger.info("フォロー成功: #{target_user_id2}")
else
# ターゲットユーザーが未フォローの場合はフォロー
client.follow(target_user_id)
@logger.info("フォロー成功: #{target_user_id}")
end
end
private
def client
@client ||= Twitter::REST::Client.new do |config|
config.consumer_key = 'Titter Developersで取得してください'
config.consumer_secret = 'Titter Developersで取得してください'
config.access_token = 'Titter Developersで取得してください'
config.access_token_secret = 'Titter Developersで取得してください'
end
end
end
if rand <= FOLLOW_COUNT_PER_DAY / 1440.0 # 1日のフォロー数を制御する
logger = Logger.new('./logfile.log')
logger.info('スクリプト実行開始')
sleep(rand(1..30))
begin
TwitterApi.new(logger).follow
p 'スクリプト正常終了'
logger.info 'スクリプト正常終了'
rescue => e
p 'スクリプト異常終了'
p e
p e.backtrace.join("\n")
logger.error 'スクリプト異常終了'
logger.error e
logger.error e.backtrace.join("\n")
end
end
実行方法
- デスクトップとか好きな場所にスクリプトを置く
- 今回はデスクトップに、auto_following_botというディレクトリを作成してその中においた
- CONSUMER_KEYなどはTitter Developersで取得しておいてください
- twitter gemをインストール
- gem install twitter
- crontabを開く
- crontab -e
- crontabに以下を貼ります
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/<ユーザー名>/.rbenv/bin
*/1 * * * * cd ~/desktop/auto_following_bot && /Users/<ユーザー名>/.rbenv/shims/ruby
following_script.rb
# スクリプトのパスは人それぞれなので注意
- auto_following_botディレクトリにて、rbenvでrubyをセットしてください。
- 1日のフォロー数を変更したい場合は
FOLLOW_COUNT_PER_DAY
を変更- 上限200くらいにしたほうがよさそう
- 300にしたら、
Rate limit exceeded (Twitter::Error::TooManyRequests)
が頻出した
- 検索ワードを変更したい場合は、
SEARCH_WORDS
を変更 - ローカルPCだと、起動中しかフォローしないのでサーバを立ててその中でやれば1日中フォローします
ソースコード上に直接 API_KEY などをハードコーディングする場合は、githubにあげないようにご注意ください。