2018年以降の記事はGitHub Pagesに移行しました

自作EvernoteスクリプトをOAuth対応する

あらすじ

結構前に、Evernoteの認証方法がOAuthになるので、変更してくださいねーというメールがEvernoteからきていた。

ユーザ名とパスワードによる認証から OAuth 認証への移行 - Evernote Developers

そのまま従来のスクリプトを動かしていると、認証エラーになるので、OAuth認証ができるように修正した。

主に自分用メモ。

環境

注: Evernoteスクリプトは自分しか使っていない。

参考サイト

手順

img img

他の人が使っていない、自分だけで使っている場合は以降の箇所だけ修正すればよい。

修正箇所

上記のDeveloperTokenをソース上で取得できるようにする。(今まで使っていたuserid、パスワードはいらない)以下では、Pitを使ってtokenなどを別出ししているので、そこを修正。

         user = Pit.get("evernote", :require => {
+            "developerToken" => "your evernote token.",
         })

従来は、 userStore.authenticate() で認証を通して、 authenticationToken を使うようにしていたが、このくだりを まるまるカット

この authenticationTokendeveloperToken に置き換えてやる。

         # 認証
-        @auth = auth(user, userStore)
-        @authToken = @auth.authenticationToken
-       
+        @authToken = user["developerToken"]
+

で、一個だけ困ったのが、認証結果からuserのshardIdを取ってきてnoteStoreUrlを生成していた箇所。

まるまるカットされたので、どうやって取得するのかな? と思ったら、userStoreに getNoteStoreUrl(token) というメソッドがあるので、これを使えば良い。

         noteStoreUrlBase = "https://#{evernoteHost}/edam/note/"
-        noteStoreUrl = noteStoreUrlBase + @auth.user.shardId
+        noteStoreUrl = userStore.getNoteStoreUrl(@authToken)
         noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
         noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
         @noteStore = Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)

これだけで、とりあえず動くようにはなった!