Ruby から Twitter API を使用するサンプル (SSL / Basic 認証)

Twitter の Basic 認証のサポートは既に終了しました。 本記事中で参考になるのは一番最後の 「CA 証明書ファイルの取得方法」 ぐらいだと思います。

Web 上を探すと RubyTwitter API を使用する方法の説明やらサンプルやらが色々ありますが、Basic 認証をするだけで SSL プロトコル (HTTPS 通信) を使っていないものしか見当たりませんでした。 あんまりネットワーク関係のことは詳しくないんですが、パスワードを送っているからには SSL を使った方がいいですよね・・・?

というわけで HTTPS 通信で Ruby から Twitter API を使用するサンプルです。 Ruby 1.9 での動作を確認しています。 また、下記サンプルを動作させるためにはあらかじめ、PEM 形式で保存された Twitter の CA 証明書ファイルを取得する必要があります。 取得方法は後述します。

サンプルコード

Net::HTTP モジュールを使用しています。 詳しいオブジェクトやメソッドの詳細は Ruby リファレンスマニュアルの Net::HTTP の項目 を見てください。

#! /usr/bin/ruby1.9
# -*- coding: utf-8 -*-

require "net/https"

# Twitter のユーザ名
user_name = "XXXXXXXX"
# Twitter のパスワード
password = "XXXXXXXX"
# PEM 形式で保存された Twitter の CA 証明書ファイルのパス
# (あらかじめ Twitter のサーバから取得しておく)
ca_file_path = "./twitter.pem"
# 使用する Twitter API 名 (今回の場合は GET メソッドを使用するものでなければならない)
api_method_name = "/statuses/friends_timeline.xml"
# 取得した XML 文字列を格納するための変数
response_xml = nil


# HTTPS プロトコルを使用し, Basic 認証を使って Twitter API を使用

# Net::HTTP オブジェクト生成
# cf. http://www.ruby-lang.org/ja/man/html/Net_HTTP.html
# cf. http://www.ruby-lang.org/ja/man/html/net_https.html
https = Net::HTTP.new( "twitter.com", "443" )
https.use_ssl = true
https.ca_file = ca_file_path
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
# セッション開始
https.start do |h|
# Net::HTTPRequest オブジェクト生成
# cf. http://www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html
req = Net::HTTP::Get.new( api_method_name )
req.basic_auth( user_name, password )
# リクエストを送信し, Net::HTTPResponse オブジェクトを取得
# cf. http://www.ruby-lang.org/ja/man/html/Net_HTTPResponse.html
res = h.request( req )
if ( res.code == "200" ) then
# 取得成功
response_xml = res.body
else
# 取得失敗
raise Exception.new( "取得失敗" )
end
end


# 取得結果の表示
puts response_xml

exit 0

Twitter の CA 証明書ファイルの取得方法

Firefox 3.5 以上 *1 を使用し、Twitter の CA 証明書ファイルを取得する方法を記します。 通常の API を使用する際に使う CA 証明書ファイルは https://api.twitter.com/ から取得し、User Streaming API を使用する際に使う CA 証明書ファイルは https://userstream.twitter.com/ から取得します。

  1. まず、Firefox 3.5 で https://api.twitter.com/ (通常の API 用) または https://userstream.twitter.com/ (User Streaming API 用) に接続する
  2. ブラウザのメニューバーの 「ツール」 → 「ページ情報」 でページ情報を開く
  3. 「セキュリティ」 を選択する
  4. 「証明書を表示」 ボタンを押し、証明書ビューアを開く
  5. 「詳細」 タブを選択
  6. 証明書の階層から 「*.twitter.com」 または 「userstream.twitter.com」 を選択 *2
  7. ウィンドウ下部の 「エクスポート」 ボタンを押し、保存ダイアログを開く
  8. ファイルの種類は 「証明書パスを含む X509 証明書 (PEM)」 を選び、名前を適当につけて保存する

以上です。 保存したファイルが Twitter の CA 証明書ファイルとなります。

*1:Firefox 3.6 でも確認しました。

*2:実際にはどれでも良い