OS-X LionでrubyからEvernoteをたたく環境を作ってみる

とりあえずなんとなくで、Evernote API関連の設定をしてみたので作業記録代わりに残しておこうかと( ´ ▽ ` )ノ
今回の目標はRubyのサンプルコードでsandbox環境に実際にノートが登録されることを確認するまで!

ウェブサービスAPI | Evernote Corporation
ウェブサービスAPI Evernote APIは、容易にEvernoteサービスを利用したローカルおよびウェブベースアプリケーションを実現できるよう、Evernoteのクライアントが利用しているのと全 ...

とはいえ、基本的な手順はEvernoteのサイトに書いてあるとおり。
難しいことは後に回すことにしてサクサクすすめて行きます。

まずAPIキーの取得とAPI SDKのダウンロード。
Evernoteのサイトで登録します。

ユーザ名・氏名・メールアドレスはその通り。
所属する組織欄は、今回はクライアント用キーを生成する為、注意書きの通り「氏名」をそのまま入力。
アプリケーションタイプは「クライアントアプリケーション」として、アプリケーションの詳細には、「ローカルのファイルをノートに登録するスクリプト」的な事を書いて申し込み。

事前に色々調べていたら、APIキーの取得まで数日かかると書かれていたりしたので覚悟していたのだけど、なんか意外に普通にWeb上でそのまま取得できたw
そのままの勢いで、EvernoteのSandbox環境のアカウントも取得します。

Evernoteに登録する

この辺りの手順は、普通にEvernoteのアカウントを作成する場合と同じ(画面も一緒)なので、URLを気にしないと、実際に本番環境で作成してしまいそうでなんか焦る(^_^;)

Web画面でSandbox環境にログイン出来るところまで進めておいたら、次は実行環境の整備。

$ cd /usr/local/share
$ sudo -s
Password: ********
% curl http://evernote.s3.amazonaws.com/api/evernote-api-1.19.zip > evernote-api-1.19.zip
% unzip evernote-api-1.19.zip
% cd /usr/lib/
% mkdir site_ruby # 既にsite_rubyがあれば作成する必要なし
% cd site_ruby/
% cp -rp /usr/local/share/evernote-api-1.19/ruby/lib/* .
% exit

SDKダウンロードして、適当に展開しておいて、Ruby関連はわかりやすいように置いておく感じで...

一応、必要なファイルなどはこれで配置完了になったので、とりあえずは何も考えずにサンプルを実行しますw

$ cd /usr/local/share/evernote-api-1.19/ruby/sample/
$ cp -rp client ~/Desktop/ # 念のためサンプルコードをコピーして弄りやすい場所に
$ cd ~/Desktop/client
$ ruby -I /usr/lib/site_ruby EDAMTest.rb
Unable to load thrift_native extension. Defaulting to pure Ruby libraries.
/usr/lib/site_ruby/Evernote/EDAM/user_store.rb:8:in `require': no such file to load -- user_store_types (LoadError)
    from /usr/lib/site_ruby/Evernote/EDAM/user_store.rb:8
    from EDAMTest.rb:28:in `require'
    from EDAMTest.rb:28

逆にいきなり動いてたらネタにもならなかったので、無事エラーが出てほっとするw

エラー内容を確認すると userstoretypes が見つからないということなのだけど... とりあえず /usr/lib/site_ruby/Evernote/EDAM/user_store.rb を確認

#
# Autogenerated by Thrift
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#

require 'thrift'
require 'user_store_types'

            module Evernote
              module EDAM
                module UserStore

ここでは単にuser_store_typesをrequireしているだけなので、次はEDAMTest.rbを確認してみることに。

dir = File.expand_path(File.dirname(__FILE__))
$LOAD_PATH.push("#{dir}/../../lib")
$LOAD_PATH.push("#{dir}/../../lib/Evernote/EDAM")

require "thrift/types"
require "thrift/struct"
require "thrift/protocol/base_protocol"
require "thrift/protocol/binary_protocol"
require "thrift/transport/base_transport"
require "thrift/transport/http_client_transport"
require "Evernote/EDAM/user_store"
require "Evernote/EDAM/user_store_constants.rb"
require "Evernote/EDAM/note_store"
require "Evernote/EDAM/limits_constants.rb"

特に難しいこともないのだけど、どうやら LOAD_PATH に Evernote/EDAM も追加しているらしいことを見つけるw
なので、Evernote/EDAMもパスに追加して実行することに。

$ ruby -I /usr/lib/site_ruby -I /usr/lib/site_ruby/Evernote/EDAM/ EDAMTest.rb 
Unable to load thrift_native extension. Defaulting to pure Ruby libraries.
Arguments:  <username> <password>

動いた!

ここで実際にきちんと動かすためにAPI Keyなどの編集をしておくことに。

#
# NOTE: You must change the consumer key and consumer secret to the 
#       key and secret that you received from Evernote
#
consumerKey = "en-edamtest"
consumerSecret = "0123456789abcdef"

NOTEに書かれているように、素直に最初にWeb画面で取得したAPI Key(ConsumerKey/ConsumerSecret)に書き換える。
# 変更しないで実行してみてエラーコードを確認してみるもよしw

# Add the Thrift & Evernote Ruby libraries to the load path.
# This will only work if you run this application from the ruby/sample/client
# directory of the Evernote API SDK.
#dir = File.expand_path(File.dirname(__FILE__))
#$LOAD_PATH.push("#{dir}/../../lib")
#$LOAD_PATH.push("#{dir}/../../lib/Evernote/EDAM")

ついでに、スクリプトの中でLOAD_PATHを設定している箇所はコメントしてしまう。
※サンプルコードをコピーしていたりで、そもそももう、このパスにはSDKのファイルが無いし(^_^;)
で、LOAD_PATHについても、コマンドラインで検証は出来ているので、環境変数$RUBYLIBに登録してしまうことに。
そして気を取り直して実行!

$ export RUBYLIB=/usr/lib/site_ruby:/usr/lib/site_ruby/Evernote/EDAM/
$ ruby EDAMTest.rb ksworks ********
Unable to load thrift_native extension. Defaulting to pure Ruby libraries.
warning: peer certificate won't be verified in this SSL session
Is my EDAM protocol version up to date?  true
warning: peer certificate won't be verified in this SSL session
Authentication was successful for ksworks
Authentication token = 
**********************************************************************************************
warning: peer certificate won't be verified in this SSL session
Found 1 notebooks:
  * ksworks のノートブック

Creating a new note in the default notebook: ksworks のノートブック

warning: peer certificate won't be verified in this SSL session
Successfully created a new note with GUID: 
************************************

無事登録できた!
さらにWebからSandbox環境に、本当に登録出来ていることを確認( ´ ▽ ` )g

これで適当にRuby弄って何かしたらEvernoteに登録するスクリプトなんかが書けるようになるはず! ※動作確認出来た所まで行ったので、環境変数のRUBYLIBなどを .profile にでも登録しておくと後々便利...かな?