evernote-logoEvernote で調子に乗ってガンガンアップロードしていたら、月半ばで早々と月間のアップロード容量に到達してがっかり、ということを何度も繰り返さなくて済むように、日々の使用状況を Evernote Cloud API から取得してみた。


  1. 環境の構築
  2. Cloud API のアカウントを取得
  3. API を利用


evernote の Python SDK を利用する。

まずは SDK が依存する OAuth ライブラリをインストール

$ pip install oauth2

次に SDK をインストール

$ git clone https://github.com/evernote/evernote-sdk-python.git
$ cd evernote-sdk-python
$ python setup.py install

Cloud API のアカウントを取得

API 検証用の sandbox が用意されているので、次の URL からテストアカウントを登録する。


今回の場合、API はあくまでも個人用途。
このようなケースでは OAuth 認証ではなく、長い有効期間が設定されたトークン(Developer token)を使いまわして認証できる。

Using developer tokens
If you are building a script or application that will only access your own personal Evernote account, then you don’t need to implement OAuth. Instead, you can get a developer token that will allow you to use the API to access your own personal Evernote account.


次の URL から Devloper Token を取得。


ついでに本番向けの Devloper Token は次の URL から取得。




Developer Token を利用して API からアップ容量を取得する。SDK にある次のサンプルコードをベースにする。


ちなみに EDAM は Evernote Data Access and Management のアクロニム。


個人目的なので、OAuth ではなく 取得した Developer Token で認証する。
auth_token に取得したトークンを設定

import evernote.edam.userstore.constants as UserStoreConstants
from evernote.api.client import EvernoteClient
# Real applications authenticate with Evernote using OAuth, but for the
# purpose of exploring the API, you can get a developer token that allows
# you to access your own Evernote account. To get a developer token, visit
# https://sandbox.evernote.com/api/DeveloperToken.action
auth_token = "your developer token"
if auth_token == "your developer token":
    print "Please fill in your developer token"
    print "To get a developer token, visit " \
# Initial development is performed on our sandbox server. To use the production
# service, change sandbox=False and replace your
# developer token above with a token from
# https://www.evernote.com/api/DeveloperToken.action
client = EvernoteClient(token=auth_token, sandbox=True)


サーバのサポートする API バージョンでクライアントがアクセスしていることを確認。

user_store = client.get_user_store()
version_ok = user_store.checkVersion(
    "Evernote EDAMTest (Python)",
print "Is my Evernote API version up to date? ", str(version_ok)
print ""
if not version_ok:

正常であれば、version_okTrue を返す。

SDK が古いまま放置されていたりすると False がかえってくる。



user = user_store.getUser()
note_store = client.get_note_store()
sync_state = note_store.getSyncState()
print '%s,%s,%s,%s' % (user.accounting.uploadLimit,

どうやれば必要な情報をとれるのかは、検索するなりマニュアルをよむなりリファレンスを grep するなりする。

月間アップロード上限と月間アップロード済みサイズは NoteStore.SyncStateUser.Accounting 経由で次のようにして取得できた。各値の意味は以下。


The number of bytes that can be uploaded to the account in the current month. For new notes that are created, this is the length of the note content (in Unicode characters) plus the size of each resource (in bytes). For edited notes, this is the the difference between the old length and the new length (if this is greater than 0) plus the size of each new resource.


The date and time when the current upload limit expires. At this time, the monthly upload count reverts to 0 and a new limit is imposed. This date and time is exclusive, so this is effectively the start of the new month.


The server’s current date and time.


The total number of bytes that have been uploaded to this account in the current monthly period. This can be compared against Accounting.uploadLimit (from the UserStore) to determine how close the user is to their monthly upload limit. This value may not be present if the SyncState has been retrieved by a caller that only has read access to the account.


実行すると、次のように CSV 形式で出力される。


あとは、API の通信先を本番に変更し(auth_token の変更と EvernoteClient の sandbox フラグを False にする)、データを蓄積して適当な閾値でアラートを上げるようにすれば OK。

Tagged with:
Posted in python, web

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 6 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 6 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 1 year ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: