Header
2019-04-29
2019-05-01

Rubyでツイッターのアカウントを自動ブロックする

2019 04 29 pix201905a

Ruby2.4.1とtwitterのAPIを利用して指定したキーワードがプロフィールのディスクリプションに設定されていれば、自動でアカウントをブロックするプログラムを作成します。

TwitterアカウントとRubyがあれば、目で見て可動を確認できるのでプログラミング初心者にもおすすめです。

※TwitterのAPI登録方法は省いているので、既にTwitterのデベロッパーにアカウント登録をしていることを前提とします。

ツイッターのAPIリファレンスキーを取得する

ツイッター公式サイトへアクセス

Detailsを選択

TwitterApi1

Keys and tokensを選択し、Consumer API keysとAccess token & access token secretの4つの項目を利用します。

TwitterApi2

サンプルコード

以下がサンプルコードになります。

分かりやすいように、ハッシュタグ#Progateでツイートを検索し、プロフィールのディスクリプションに#Progateが設定されているアカウントを自動ブロックします。

※あくまでテストの為に設定しているので、Progateについて特に他意はございません。

require 'twitter'
require 'json'

search_keyword = "#Progate"

# 検索する範囲最大は200件
search_tweets = 200

#以下はツイッターのAPIリファレンスキーを設定
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

# 検索結果を取得する
result_tweets = client.search(search_keyword, lang: "ja", count: search_tweets, exclude_replies: true, result_type: "recent")

# 検索結果を20件表示する
result_tweets.take(20).each do |tw|
  #検索したユーザー名を表示
  p tw.user.name

  #プロフィールのディスクリプションに検索キーワードが設定されていればブロック
  if tw.user.description.include?(search_keyword)
    client.block(tw.user.screen_name)
    puts "#{tw.user.name}をブロックしました"
  end
end

サンプルコード解説

検索キーワードを設定

今回は#Progateで設定しています。 複数キーワードで設定する場合は半角スペースを利用してand検索も可能です。

search_keyword = "#Progate"

以下は登録したAPIキーを上から順番通りコピペします

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

検索結果を取得

今回は日本語で最新のツイートを取得し、リプライを検索対象から外しています。

# 検索結果を取得する
result_tweets = client.search(search_keyword, lang: "ja", count: search_tweets, exclude_replies: true, result_type: "recent")

検索結果の取得は様々な指定が可能です。

詳細は以下公式リファレンスを参照して下さい

公式リファレンス

検索結果を表示し、ブロックする

.takeで検索結果を20件を表示し、その中からディスクリプションに指定キーワードが設定されていればブロックします。

検索結果はstring型で出力するのでrubyのinclude?メソッドを利用してプロフィールディスクリプションに指定値が設定されているか確認します。

# 検索結果を20件表示する
result_tweets.take(20).each do |tw|
  #検索したユーザー名を表示
  p tw.user.name

  #プロフィールのディスクリプションに検索キーワードが設定されていればブロック
  if tw.user.description.include?(search_keyword)
    client.block(tw.user.screen_name)
    puts "#{tw.user.name}をブロックしました"
  end

参考記事

以上になります

プログラムの発火は手動になりますが、Railsのgem WheneverやLinuxのcron機能などを利用すれば指定期間で自動でプログラムを実行することも可能です。

興味のある方は Rails WheneverやLinux cronで検索してみて下さい。

関連記事

Ruby単体でAPIを操作する|Udemy

Ruby on Railsで外部APIを利用して、簡単なアプリケーションを作成する

Rubyでサイトをスクレイピングし、ローカルに画像を保存する

Ruby on RailsでRedisを利用してランキング機能を実装する

Ruby on Railsとtwitterの投稿機能を連携する

前の記事
次の記事
人気記事
カテゴリーから記事を探す