ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

Twitterライブラリ

Twitter APIが簡単に使えるようになるTwitterライブラリを試す。

目次


Twitterライブラリ

TwitterライブラリはTwitter APIが簡単に使えるようになるGem。
Webページは次のとおり。
RubyGemsドキュメント

The Twitter Ruby Gem
https://www.rubydoc.info/gems/twitter

Twitterライブラリを使う準備

Twitterアプリの作成

Twitterライブラリを使うにはTwitterアプリをつくる必要がある。
TwitterアプリをつくるにはTwitterのアカウントが必要。
TwitterアプリをつくるにはTwitterアカウントに電話番号を登録することも必要。

Twitterアプリをつくるには次のページからTwitterにサインインして必要な登録をおこなう。

Application Management
Twitter Apps
https://apps.twitter.com/

Permissionsタブの設定

Twitterアプリ内にPermissionsタブがある。
ツイートするだけならRead and writeをチェックすれば大丈夫。
他の設定は試していない。必要に応じて調べる。

Twitter APIと接続するために必要な値を取得する

Twitterアプリ内のKey and Access Tokensタブ内から4つの値を得る。

  1. consumer_key
  2. consumer_secret
  3. access_token
  4. access_token_secret


Twitterライブラリの使いかた

Twitterライブラリのインストール

TwitterライブラリのインストールはRubyGemsから直接おこなうかbundlerをつかっておこなう。
今回はbundle installのpathオプションつきでインストールした。方法は後述する。

Twitter APIに接続する

Twitter APIに接続する書式は次のとおり。

変数名 = Twitter::REST::Client.new do |config|
    config.consumer_key        = "YOUR_CONSUMER_KEY"
    config.consumer_secret     = "YOUR_CONSUMER_SECRET"
    config.access_token        = "YOUR_ACCESS_TOKEN"
    config.access_token_secret = "YOUR_ACCESS_SECRET"
end


Tweetする

Tweetする書式は次のとおり。

接続時に代入した変数名.update("ツイート内容")


Twitterライブラリをつかったコード

実際にコードを書く。
Rubyコードの他に.envファイルもつくりTwitterアプリで取得した値を設定する。
tweet.rb

require 'twitter'
require 'dotenv/load'

class Tweet
    # ツイートを初期化する
    def initialize
        @tweet = "ボート(レガッタ)全日本軽量級は終了\n次回は9/6から始まる全日本大学選手権(インカレ)の組合せと結果をつぶやく予定です"
    end

    def tweet
        # Twitter APIに接続する
        client = Twitter::REST::Client.new do |config|
            config.consumer_key        = ENV['consumer_key']
            config.consumer_secret     = ENV['consumer_secret']
            config.access_token        = ENV['access_token']
            config.access_token_secret = ENV['access_token_secret']
        end   
        # ツイートする
        client.update(@tweet)    
    end
end

twitter = Tweet.new
twitter.tweet


.env

consumer_key=************
consumer_secret=************
access_token=************
access_token_secret=************


コードの説明

  • twitterとdotenvをrequireする
  • Tweetクラスを定義する
    • ツイートの内容をinitializeメソッドで初期化する
    • tweetメソッドを定義する
      • Twitter APIに接続する
      • Tweetクラスの初期値をupdateメソッドでツイートする
  • newメソッドでTweetクラスのインスタンスをつくる
  • tweetメソッドでツイートする
    • 初期値がツイートされる


dotenvやbundlerについては前の記事を参照。

コードを実行する

次の手順でコードを実行する。

  • ターミナルのcdコマンドでtweet.rbと同じディレクトリに移動する
  • gem update --systemRubyGemsを最新にする
  • gem update bundlerでbundlerを最新にする
  • bundle initでGemfileをつくる
  • gem 'twitter'をGemfileに追記する
  • gem 'dotenv'をGemfileに追記する
  • bundle install --path vendor/bundleディレクトリ内にgemをインストールする
  • bundle exec ruby tweet.rbでコードを実行する


実行結果




ツイートできた。
データベースとつなげればレース結果のツイートにも使える。

Windows10環境でSSL証明書の認証エラーになる

Windows10環境の場合、次のようにSSL証明書の認証エラーになることがある。
SSL証明書の認証エラー表示

rescue in perform: SSL_connect returned =1 errno=0 state=error: certificate verify failed (Twitter::Error)


pemファイルをダウンロードしたらコードが実行できるようになった。
ただしpemファイルの理解ができていないので今回は紹介することを控える。
上のエラー内容で調べると解決方法はみつかる。必要に応じて対処する。

ツイートの制限

ツイートの連続投稿には制限がある。

Twitter Help Center
https://help.twitter.com/ja/rules-and-policies#twitter-rules

投稿数のリミットはTwitter Help Centerに書かれているより実際はもっと厳しいように思う。
投稿内容の重複にも制限がある。

投稿数や投稿内容によってはアカウントが停止になることもあるので注意が必要。

今回の実行環境

macOS 10.13.4
ruby 2.4.1p111
RubyGems 2.7.7
bundler 1.16.2
twitter 6.2.0
dotenv 2.4.0