Ruby - OAuth のみでツイート!

Updated:


Ruby を使って Twitter でツイートするのに “twitter” という RubyGems ライブラリを使用することが多いと思います。

今回は RubyGems ライブラリ “twitter” を使用せず、 RubyGems ライブラリ “oauth” のみを使用してツイートしてみました。

0. 前提条件

  • Ruby 2.3.3-p222 での作業を想定。
  • 当然ながら、Consumer Key, Consumer Secret, Access Token, Access Token Secret を取得済みであること。

1. 必要な RubyGems ライブラリのインストール

oauth, json ライブラリが未インストールならインストールしておく。(json は、レスポンスを取得するのに必要)

$ sudo gem install oauth json

2. Ruby スクリプトの作成

以下は、ごく簡単な作成例。

Consumer Key オブジェクトを生成後、それを元に Access Token オブジェクトを生成し、エンドポイント(statuses/update.json)を指定してテキストをポストする、というイメージ。

File: tweet_oauth.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#! /usr/local/bin/ruby
# coding: utf-8
#=ツイートテスト(OAuth ライブラリのみを使用)
#
# date          name            version
# 2017.01.16    mk-mode         1.00 新規作成
#
# Copyright(C) 2017 mk-mode.com All Rights Reserved.
#---------------------------------------------------------------------------------
# 引数 : なし
#---------------------------------------------------------------------------------
#
require 'json'
require 'oauth'

class TweetOauth
  # Twitter keys
  CONS_KEY = "... Consumer Key        ..."
  CONS_SEC = "... Consumer Key Secret ..."
  ACCS_KEY = "... Access Token        ..."
  ACCS_SEC = "... Access Token Secret ..."
  SITE = "https://api.twitter.com/"
  URL  = "#{SITE}1.1/statuses/update.json"

  def initialize
    cons = OAuth::Consumer.new(CONS_KEY, CONS_SEC, site: SITE)
    @accs = OAuth::AccessToken.new(cons, ACCS_KEY, ACCS_SEC)
  end

  def exec
    puts text = "これはテストです!"
    res = @accs.post(URL, status: text)
    puts JSON.parse(res.body)
  rescue => e
    $stderr.puts "[#{e.class}] #{e.message}"
    e.backtrace.each { |tr| $stderr.puts "\t#{tr}" }
    exit 1
  end
end

TweetOauth.new.exec if__FILE__ == $0

3. Ruby スクリプトの実行

$ ./tweet_oauth.rb
これはテストです!
{
  "created_at"=> 

  ===< 中略 >===

  "lang"=>"ja"
}

4. 参考サイト


場合によっては、RubyGems ライブラリ twitter を使用するより扱いやすいかもしれませんね。

また、実際に使用してみると、RubyGems ライブラリ twitter を使用した時よりも若干高速なのが分かります。(当然でしょうが)

以上。





 

Sponsored Link

 

Comments