はじめに
Evernoteはクラウド上にあらゆる情報を記録できる便利なサービスです。筆者も技術情報から日常生活におけるちょっとした備忘録まで、さまざまな情報をストックするのに活用しています。EvernoteはAPIを公開しているので、Evernoteを活用したアプリケーションや、自分専用のツールを作るとその便利さがさらに広がっていきます。
本記事ではEvernote APIをPythonから利用する方法を解説し、ノートの内容からタグを付与する簡易なプログラムを作成していきます。
対象読者
- Pythonの基本文法を理解している方
- Evernoteをプログラムで操作して便利なものを作ってみたい方
必要な環境
- OS:Windows 7/8.1/10 ※Pythonが動作するLinux/Macでも可ですが、本記事ではWindows環境を想定しています。
-
Python:Python 2.7.13
- Python 3系用のEvernote SDKはテストSDK(2017/3/20時点)という位置付けのため、Python 2系用の最新版を利用します。
- pip、easy_installが使用可能であれば2.7系の他バージョンでも恐らく大丈夫ですが、同一バージョンを推奨します。
- 「Pythonインストールディレクトリ\Scripts」にPATHを通しておいてください。
- Evernoteアカウント(無料のベーシックプランでOK)
Evernote APIの特徴
Evernote APIは汎用的な機能を提供しており、Evernote公式クライアントからも利用されていることから公式クライアントと同等の機能を実現可能なAPIになっています。
Thrift
Evernote APIは軽量RPCフレームワークApache Thriftを使って実装されています。Thriftは異なる言語間のリモート呼び出しを可能とし、例えばサーバーサイドをJava、クライアントサイドはRubyで実装する、といったことが可能です。
そのため、Evernote APIのクライアント用ライブラリ(以降、Evernote SDKと記します)は幅広いプラットフォームをカバーしています。2017/3/20時点で、Python、JavaScript、iOS、Android、Windows、PHP、Ruby、Java、OS X、Perl、C++、ActionScript 3向けのSDKが提供されています。
Thriftの開発元
Thriftは元々Facebook社が開発した軽量RPCフレームワークで、現在はApacheソフトウェア財団のプロジェクトApache Thriftとしてオープンソース化されています。Evernote APIリファレンスのタイトルも[All Thrift declarations]と記載されていて、Thriftベースであることが読み取れます。
認証トークン
Evernote APIを使用するには認証トークンが必要です。認証トークンを手に入れるには2つの方法があります。1つ目はOAuthを実装することです。開発者向けEvernoteサイトからAPIキーを申請し、発行されたAPIキーを使ってOAuthを実装することになります。
2つ目はデベロッパートークンを利用することです。デベロッパートークンは1年間の期限付き認証トークンで、OAuthを実装することが不要なため手軽にAPIの利用を開始することができます。本記事ではデベロッパートークンを利用します。
Evernoteサンドボックス環境
Evernote APIを使ってEvernoteを操作するプログラムをいきなり本番環境で動作させると、自分のEvernoteデータに予期せぬ変更を加えてしまうことや、Evernoteサービス自体への影響も懸念されます。そこでEvernote社は、本番環境から隔離されたサンドボックス環境と呼ばれるテスト環境を提供しています。まずはサンドボックス環境向けのデベロッパートークンで開発をして、動作に問題がないことを確認してから本番環境向けのデベロッパートークンを取得して動作させる流れになります。(OAuth認証の場合、APIキーをアクティベートすることで本番環境での利用が可能になります)
機能
Evernote APIはNoteStore、UserStore、Types、Limits、Errorsの5つのモジュールで構成されていて、それぞれ以下の機能を持っています。
モジュール | 主な機能 |
---|---|
NoteStore | ノートブックやノートの作成・更新・取得・共有。ノート添付ファイルの取得、 検索条件の保存 |
UserStore | 認証(パスワード認証以外にワンタイムパスワードを使った二要素認証も可)、ユーザー情報の取得、Evernoteビジネスアカウントへのユーザーの招待 |
Types | APIで扱うデータモデル(ユーザー、ノートブック、ノート、ノート検索条件、ノート検索結果仕様等) |
Limits | Evernoteサービスの制限値の定数(ノートサイズの上限、ノートタイトルの長さの最小値・最大値等) |
Errors | APIのエラーコード、各種例外オブジェクト |
APIレート制限
Evernoteサービスの性能を保つため、Evernote APIには制限が設けられています。1つの認証トークンで1時間当たりの呼び出し回数に制限があり、制限に達した場合、API呼び出し時にEDAMSystemExceptionが発生します(エラーコードは19 RATE_LIMIT_REACHED)。
残念ながら具体的な上限値は公表されていません。例外をハンドリングする方法や、制限に引っかかりにくくするための設計方針が公式サイトに記載されているので、参考にしてみてください。