MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

PythonからEvernote APIを使う方法

 

はじめに

先日、Evernoteのノートをランダムに表示する

Webアプリを公開しました。

myenigma.hatenablog.com

 

上記のアプリでは、PythonのWebサーバから

EvernoteのAPIを利用してユーザのEvernoteの情報を取得し、

サービスを構築しています。

 

今回は自分のメモも兼ねて、

PythonからEvernote APIを使用する方法を

まとめておきたいと思います。

 

Evernoteのアカウントを作る

下記のリンクからEvernoteのアカウントを作ることができます。

Create an Evernote Account

上記のリンクからアカウントを作成すると、

1ヶ月分Evernoteのプレミアムプランが無料になります。

 

API keyの取得

EvernoteのAPIを使用するには、

まず初めにEvernoteのAPIを取得する必要があります。

 

EvernoteのAPI keyは下記のリンクから取得することができます。

 

Evernote APIでは、まず初めにサンドボックスと呼ばれる、

テスト用のEvernoteの環境のみにアクセスできるように

アカウントが設定され、

最後に本番環境でAPIで使えるように、

API keyのアクティベート申請をする必要があります。

 

詳しいAPIの使用方法に関しては、

下記のリンクを参照下さい。

 

Python APIライブラリ evernoteの使い方

EvernoteのAPIをPythonで利用する方法として、

下記のライブラリを利用することができます。

pypi.python.org

github.com

 

pipでインストールする場合は、

下記でOKです。

pip install evernote

 

上記のPythonライブラリを利用する方法を

下記で説明します。

 

クライアントオブジェクトの生成

Evernoteのデータにアクセスするために

クライアントオブジェクトは下記のように生成できます。

from evernote.api.client import EvernoteClient

client = EvernoteClient(
        consumer_key=CUNSUMER_KEY,
        consumer_secret=CUNSUMER_SECRET,
        #sandbox=True # テスト環境
        sandbox=False # 本番環境
    )

前述したconsumer keyとconxumer secretを入力し、

テスト環境の場合はsandbox=True(デフォルト)とし、

本番環境の場合はsandbox=Falseとします。

 

sandbox環境は下記の記事に説明がある通り、

テスト用のevernote環境で、好きなユーザを作成し

自分の作成したアプリのテストをすることができます。

 

アプリのEvernote oauth認証

自分のWebアプリからユーザのEvernoteデータにアクセスするには、

下記のようにoauth認証が必要です。

request_token = client.get_request_token(CALLBACK_URL)
client.get_authorize_url(request_token)
redirect_url=client.get_authorize_url(request_token) 

CALLBACK_URLにWebアプリのURLを指定して、

アクセスさせれば、Evernoteの認証ページにジャンプし、

認証させることができます。

あとはrequest_token["oauth_token"]と

request_token["oauth_token_secret"]を

クッキーやDBなどに保存しておけば、

次からは認証期間中、そのデータを元に認証無しでデータにアクセスできます。

 

クッキーに保存した場合、下記のようにクッキーのデータを利用して、

access_tokenを取得できます。

access_token = client.get_access_token(
   request.get_cookie("oauth_token", secret=cookie_secret_),
   request.get_cookie("oauth_token_secret", secret=cookie_secret_),
   request.GET.get('oauth_verifier', '')
)

Evernoteのユーザデータを取得する

前述の方法で取得したアクセストークンを元に、

下記のようにユーザのデータを取得できます。

client = EvernoteClient(token=auth_token)
userStore = client.get_user_store()
user = userStore.getUser()

 

ユーザ変数のデータ構造に関しては、

下記のAPIマニュアルを参考にしてください。

Evernoteのノートブックのデータを取得する

下記のようにユーザのノートブックのデータリストも取得できます。

client = EvernoteClient(token=access_token)
noteStore = client.get_note_store()
notebooks = noteStore.listNotebooks()
for n in notebooks:
    print n.name %ノートブックの名前を表示

ノートブックオブジェクトの詳しい使い方は下記の

APIドキュメントを参照下さい。

 

指定したノートブックのノートの情報を取得

上記の方法で、ノートブックの情報を取得し、

その情報の中のGUIDという情報を使うことで、

指定したノートブックのノートの情報を取得することができます。

 

下記のようにフィルタオブジェクトに

ノートブックのGUIDを指定し、

resultSpecに検索結果をフォーマットを指定することで、

ノートを検索することができます。

# 検索条件として、ノートブックを指定
filter=evernote.edam.notestore.ttypes.NoteFilter()
filter.notebookGuid=notebookGuid

# 検索結果として、タイトル名を指定
resultSpec=evernote.edam.notestore.ttypes.NotesMetadataResultSpec()
resultSpec.includeTitle=True

# 一回のコールで取得できるのは250が最大
noteMetaList=noteStore.findNotesMetadata(filter, 0, 250,resultSpec)

# ノートの情報
for noteMeta in noteMetaList.notes:
    print(noteMeta.title.decode("utf-8")) # ノートタイトルを表示
 

一つ注意点として、findNotesMetadata関数で一回で取得できる

ノートは250個が最大のようなので注意しましょう。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com