EvernoteAPI試験用開発環境の構築
RubyでEvernoteAPI試験用開発環境の構築をします。
■構築環境
Ubuntu 13.04
■用意するパッケージ(利用したバージョン)
Ruby (1.9.3)
gem (2.0.3)
sinatra (1.4.3)
evernote_oauth (0.2.1)
■用意するデータ
Evernote API Key :取得はこちらです
Evernoteサンドボックスアカウント:作成はこちらです
サンプルスクリプト:本ブログの下記に示します。またGitHubにもあります。
※sinatraとは
・Rubyの軽量Webフレームワーク
・シンプルなWebアプリ用のDSL(Domain Specific Language)ドメイン特化言語
■導入コマンド履歴
sudo gem install sinatra
sudo gem install evernote_oauth
※rubyとgemは導入済みでした。
■サンプルスクリプトの実行
端末でアプリを起動(ruby en_oauth.rb)し、ブラウザからアクセス(http://localhost:4567/)します。
※evernote_configも同じフォルダ内に置きます。
■実行結果
端末側:
ruby en_oauth.rbブラウザ側:
INFO WEBrick 1.3.1
INFO ruby 1.9.3 (2012-04-20) [i686-linux]
== Sinatra/1.4.3 has taken the stage on 4567 for development with backup from WEBrick
INFO WEBrick::HTTPServer#start: pid=xxxx port=4567
■サンプルスクリプト
en_oauth.rb
require 'sinatra' enable :sessions # Load our dependencies and configuration settings $LOAD_PATH.push(File.expand_path(File.dirname(__FILE__))) require "evernote_config.rb" before do if OAUTH_CONSUMER_KEY.empty? || OAUTH_CONSUMER_SECRET.empty? halt '<span style="color:red">Before using this sample code you must edit evernote_config.rb and replace OAUTH_CONSUMER_KEY and OAUTH_CONSUMER_SECRET with the values that you received from Evernote. If you do not have an API key, you can request one from <a href="http://dev.evernote.com/documentation/cloud/">dev.evernote.com/documentation/cloud/</a>.</span>' end end def auth_token session[:access_token].token if session[:access_token] end def client @client ||= EvernoteOAuth::Client.new(token: auth_token, consumer_key:OAUTH_CONSUMER_KEY, consumer_secret:OAUTH_CONSUMER_SECRET, sandbox: SANDBOX) end def user_store @user_store ||= client.user_store end def note_store @note_store ||= client.note_store end def en_user user_store.getUser(auth_token) end def notebooks @notebooks ||= note_store.listNotebooks(auth_token) end def total_note_count filter = Evernote::EDAM::NoteStore::NoteFilter.new counts = note_store.findNoteCounts(auth_token, filter, false) notebooks.inject(0) do |total_count, notebook| total_count + (counts.notebookCounts[notebook.guid] || 0) end end get '/' do erb :index end get '/reset' do session.clear redirect '/' end get '/list' do begin # Get notebooks session[:notebooks] = notebooks.map(&:name) # Get username session[:username] = en_user.username # Get total note count session[:total_notes] = total_note_count erb :index rescue => e @last_error = "Error listing notebooks: #{e.message}" erb :error end end get '/requesttoken' do callback_url = request.url.chomp("requesttoken").concat("callback") begin session[:request_token] = client.request_token(:oauth_callback => callback_url) redirect '/authorize' rescue => e @last_error = "Error obtaining temporary credentials: #{e.message}" erb :error end end get '/authorize' do if session[:request_token] redirect session[:request_token].authorize_url else # You shouldn't be invoking this if you don't have a request token @last_error = "Request token not set." erb :error end end get '/callback' do unless params['oauth_verifier'] || session['request_token'] @last_error = "Content owner did not authorize the temporary credentials" halt erb :error end session[:oauth_verifier] = params['oauth_verifier'] begin session[:access_token] = session[:request_token].get_access_token(:oauth_verifier => session[:oauth_verifier]) redirect '/list' rescue => e @last_error = 'Error extracting access token' erb :error end end __END__ @@ index <html> <head> <title>Evernote Ruby Example App</title> </head> <body> <a href="/requesttoken">Click here</a> to authenticate this application using OAuth. <% if session[:notebooks] %> <hr /> <h3>The current user is <%= session[:username] %> and there are <%= session[:total_notes] %> notes in their account</h3> <br /> <h3>Here are the notebooks in this account:</h3> <ul> <% session[:notebooks].each do |notebook| %> <li><%= notebook %></li> <% end %> </ul> <% end %> </body> </html> @@ error <html> <head> <title>Evernote Ruby Example App — Error</title> </head> <body> <p>An error occurred: <%= @last_error %></p> <p>Please <a href="/reset">start over</a>.</p> </body> </html>
evernote_config
# Load libraries required by the Evernote OAuth require 'oauth' require 'oauth/consumer' # Load Thrift & Evernote Ruby libraries require "evernote_oauth" # Client credentials OAUTH_CONSUMER_KEY = "your key" OAUTH_CONSUMER_SECRET = "your secret" # Connect to Sandbox server? SANDBOX = true
以上で開発環境の構築とサンプルの実行は終了です。