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 を使用した時よりも若干高速なのが分かります。(当然でしょうが)
以上。
Comments