2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

rubyでtwitter自動フォローボット(ランダムな時間にフォロー)

Last updated at Posted at 2022-01-05

知人の依頼で作成

要件

  • ランダムなインターバルでフォローする
    • 知人曰くBAN対策らしいけど、あまり関係ないような気もする
  • 任意の検索ワードで検索して、一番上のひとをフォローする(#相互フォロー など)
    • そのユーザーがフォロー済みだった場合は、そのユーザーのフォロワーのなかからランダムで一人取得してフォローする

実装

  • cronスケジューラでrubyスクリプトを1分に1回定期実行する
    • これだとランダムなインターバルにならないので、rubyスクリプト内で実行を絞る
      • if rand <= FOLLOW_COUNT_PER_DAY / 1440.0
# 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にあげないようにご注意ください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?