macOSでTwitterStreamを使うために必要なこと

Twitterが提供するAPIには、RESTとstreamingの二種類があるらしい。このうち、rubyでstreaming APIを利用するには、TwitterStreamというgemが必要だ。
だが、TwitterStreamの依存gem(?)の中に曲者がいて、標準的にインストールしただけでは動かない。犯人を名指しで言うと、それはeventmachineである。
ここまで読んで対応策が分かった方は、以下は読む必要はない。

少し脱線するが、macOSはEl Capitan 10.11から、OpenSSLの開発向けファイルを削除した。AppleはOpenSSLから自身が開発したSecure Transportに移行したのだ。だが、macOSがBSD UNIXの流れをくむOSであることに変わりはなく、UNIXの資産を動かすことができることにも変わりはない。OpenSSLに依存するものを除けば…。

実は、eventmachineもOpenSSLに依存するのだ。だが、嫌らしいことにOpenSSLがなくてもgemとしてビルドは出来てしまう。(当然といえば当然だが)そして、次のスクリプトを動かすと

require 'tweetstream'
require 'yaml'

# Twitter設定情報の読み込み
keys = YAML.load_file('./config.yml')

# Consumer key, Secretの設定
CONSUMER_KEY     = keys["api_key"]
CONSUMER_SECRET  = keys["api_secret"]
# Access Token Key, Secretの設定
ACCESS_TOKEN_KEY = keys["access_token"]
ACCESS_SECRET    = keys["access_token_secret"]

TweetStream.configure do |config|
  config.consumer_key       = CONSUMER_KEY
  config.consumer_secret    = CONSUMER_SECRET
  config.oauth_token        = ACCESS_TOKEN_KEY
  config.oauth_token_secret = ACCESS_SECRET
  config.auth_method        = :oauth
end

TweetStream::Client.new.sample do |status|
  puts "#{status.user.screen_name}: #{status.text}"
end

次のエラーが出る。

libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: Encryption not available on this event-machine
Abort trap: 6

そこでおもむろにOpenSSLをインストールすることになる。入れたのは最新版である。

curl -LO https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --openssldir=/usr/local/ssl
make && sudo make install

よし!これで行けるはずだ。

sudo gem uninstall eventmachine
sudo gem install eventmachine
ruby twitterstream.rb #さっきのスクリプト名
libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: Encryption not available on this event-machine
Abort trap: 6

orz

気を取り直して調べたところ、eventmachineのインストール時に次のようにしなければならないことが分かった。

sudo gem uninstall eventmachine
sudo gem install eventmachine -- --with-cppflags=-I/usr/local/include/openssl

今度こそ!

ruby twitterstream.rb #さっきのスクリプト名

おおっ!(世界中のツイートがターミナルに溢れた)

以上。

参考サイト
TwitterStream/eventmachineでエラー
Crashes when request is received OS X 10.11 #8

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL