1
2

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 5 years have passed since last update.

Twitterでリストに流れるツイートを自動リツイートする

Last updated at Posted at 2020-01-07

本スクリプトの特徴は、Heroku Advanced Schedulerを利用するため__無料__で、任意のリストに流れるツイートを、__自動的に__リツイートすることです。

リストとは何か

リストとは、複数のTwitterアカウントをまとめて管理できる機能です。独自のリストを作ったり、他の利用者が作ったリストを保存したりできます。リストタイムラインには、リストに登録されたアカウントのツイートのみが表示されます。
https://help.twitter.com/ja/using-twitter/twitter-lists

制作動機

noteの記事「文化祭公式Twitterアカウントの自動リツイート等について」をお読みください。

環境

Twitter Developer Accountは、審査があるので早く通しておいた方がいいです。

開発

開発していきます。

リストを作る

利用するTwitterアカウントで、リツイートする対象を登録したリストを作成します。その名称は自由です。

API キーとアクセストークンを取る

https://qiita.com/kngsym2018/items/2524d21455aac111cdee
上の記事を参考に、下の4つのキーまたはトークンを取得します。

  • (Consumer) API key
  • (Consumer) API secret key
  • Access token
  • Access token secret

The Twitter Ruby Gem をインストール

The Twitter Ruby Gem を開発環境にインストールします。

% gem i twitter

Rubyファイルを作る

スクリプトを記述するためのRubyファイル「retweet.rb」を作成します。

% touch retweet.rb

今作成したファイルに以下のように記述します。

retweet.rb
require 'twitter'

# Config
@client = Twitter::REST::Client.new do |config|
  config.consumer_key        = ENV["CONSUMER_KEY"]
  config.consumer_secret     = ENV["CONSUMER_SECRET"]
  config.access_token        = ENV["CONSUMER_TOKEN"]
  config.access_token_secret = ENV["CONSUMER_TOKEN_SECRET"]
end

# PRODUCTION ENVIRONMENT -----------------------------------
@client.list_timeline("my_account", "my_list").each do |tweet|
    if tweet.user.screen_name != "my_account" && !tweet.retweeted? && !tweet.full_text.include?("specified word")
        @client.retweet(tweet.id)
    end
end
  • 「my_account」の「my_list」というリストのタイムラインに表示されたツイートが取得されます。
  • 自分のツイートをリツイートしないため、tweet.user.screen_name != "my_account"としています。
  • 既にリツイートしたツイートを除くため、!tweet.retweeted?としています。
  • 特定の単語が含まれたツイートを除くため、!tweet.full_text.include?("specified word")としています。(ここでは「specified word」)
  • @client.retweet(tweet.id)でリツイートします。

ローカルで環境変数を設定

zshの場合

% vi ~/.zshenv

.zshenvファイルを編集します。新規作成となる場合もあります。VIMエディタの使い方は割愛します。
API キーとアクセストークンを取る」節で取得したキーとトークンを準備し、下のように設定します。(「XXX...」はキーまたはトークン文字列。)

~/.zshenv
CONSUMER_KEY=XXXXXXXXXXXXXXXX
CONSUMER_SECRET=XXXXXXXXXXXXXXXX
CONSUMER_TOKEN=XXXXXXXXXXXXXXXX
CONSUMER_TOKEN_SECRET=XXXXXXXXXXXXXXXX

保存して終了し(:wq)、

% source ~/.zshenv

実行します。

% ruby retweet.rb

Twitterでリツイートが確認されれば大丈夫です。

Herokuにデプロイする

公式のリファレンス「Getting Started on Heroku with Ruby」に沿って、RubyファイルをHerokuにデプロイします。

環境変数を設定する

記事に沿って、Herokuで環境変数を設定します。

Advanced Schedulerの設定

Advanced SchedulerをAdd-onから追加します。
Advanced Schedulerを開き、Scheduled Tasks > Create Triggerを選択します。
Advanced Scheduler.png
以下のように設定します。

設定項目 設定値
Name 任意
Command ruby retweet.rb
Timezone -
State Active
Type Recurring
Schedule Schedule Helper > Hour > Every 1 hours at :00

(Scheduleでは、Cron文法でも良いです)

Hobbyプランでは、毎月1000件までのタスク実行という上限があるため、最小実行間隔が1時間となります。( ∵ 606024*31(1ヶ月の秒換算)/ 1000 ≒ 2678 < 最小実行間隔)

これで、毎時Rubyファイルが実行されるようになりました。つまり、毎時リストのタイムラインをクロールし、リツイートしていないツイートがあればツイートします。

宣伝

この技術により運用されているアカウントが、一高祭(茨城県土浦第一高等学校文化祭)のTwitterアカウントです。一高祭は、県内でも大規模な文化祭です。ぜひフォローお願いします 🙏

一高祭公式Twitterアカウント
https://twitter.com/ichikosai

リファレンス

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?