Ruby 1.9.3p0でEvernote API 1.20のOAuth版サンプルを動かしてみた
ちょっとEvernoteと連携したサービスを作りたくなったので、Evernote API 1.20(本記事執筆時点の最新版)をダウンロードして、サンプルを動かしてみました。 動かしたのはRubyのサンプル。 手でビルドしたRuby 1.9.3p0を使ってサンプル(ruby/sample/oauth/evernote_oauth.rb)を動かしてみたところ、OAuthでの認証はうまく行きましたが、ノートブック一覧を取得しようとすると、 Error listing notebooks: can't convert nil into String と言われて失敗します。 例外のバックトラックを見てみると、oauth/thrift/transport/http_client_transport.rbで、Net::HTTPでPOSTし、そのレスポンスデータをStringIOのコンストラクタに渡しているところでエラーになっている模様。 Net::HTTPのドキュメント を見てみると、 バージョン 1.1 では HTTPResponse と エンティティボディ文字列の 二要素の配列です。1.2 では HTTPResponse ただひとつのみです。この場合、エンティティボディは response.body で得られます。 と書かれていて、更にバージョン 1.1は bundled with Ruby 1.6 、バージョン 1.2は bundled with Ruby 1.7 or later だと言っています。どうやらRuby 1.9.3p0ではpostメソッドは戻り値を1つしか返さないため、戻り値の受け方が間違っているようです。 ということで、 #resp, data = http.post(@url.request_uri, @outbuf, @headers) #@inbuf = StringIO.new data resp = http.post(@url.request_uri, @outbuf, @headers) @inbuf = StringIO.new resp.body のように修正して動かしてみると、ちゃんとノートブック一覧を取得できるようになりました。 ずいぶん昔のバ...