Lambdaでevernoteからnoteを取得してみた

普段evernoteを使っているのですが、それを自動で集約してPDFにしたいなーとか、自動で投稿したいなーとか思ったのでLambdaで試してみました。

evernote apiの準備

evernote apiを使うには、認証トークンを取得する必要があります。
そこについては以下を参照ください。

https://codezine.jp/article/detail/10055

 

タイトルと本文を取得してみる

コードはこんな感じになります(Python)。
APIのリファレンスはこちら。
https://dev.evernote.com/doc/reference/

import json
from evernote.api.client import EvernoteClient
from evernote.edam.notestore.ttypes import NoteFilter, NotesMetadataResultSpec
import sys
import codecs

sys.stdout = codecs.getwriter('utf_8')(sys.stdout)

def lambda_handler(event, context):
    dev_token = ""
    client = EvernoteClient(token=dev_token)
    userStore = client.get_user_store()
    user = userStore.getUser()

    offset = 0
    max_notes = 10

    noteStore = client.get_note_store()
    notebooks = noteStore.listNotebooks()
    for n in notebooks:
        print n.name
        filter = NoteFilter(notebookGuid=n.guid)
        result_spec = NotesMetadataResultSpec(includeTitle=True)

        result_list = noteStore.findNotesMetadata(dev_token, filter, offset, max_notes, result_spec)
        for noteMeta in result_list.notes:
            print "\t- %s" % noteMeta.title
            note = noteStore.getNote(dev_token, noteMeta.guid, True, False, False, False)
            print "\t- %s" % note.content
            
    return {
        'statusCode': 200,
        'body': json.dumps('get note from evernote')
    }

直接ノートの中身を一気に取得することはできないようです。
最初に、

result_list = noteStore.findNotesMetadata(dev_token, filter, offset, max_notes, result_spec)

で、NotesMetadataListを取得します。
NotesMetadataListはNoteMetadataのリストになります。

Struct: NoteMetadata

Field Type
guid Types.Guid
title string
contentLength i32
created Types.Timestamp
updated Types.Timestamp
deleted Types.Timestamp
updateSequenceNum i32
notebookGuid string
tagGuids list<Types.Guid>
attributes Types.NoteAttributes
largestResourceMime string
largestResourceSize i32

このメタデータが持っているguidを利用して、ノートの本体を取得していきます。

note = noteStore.getNote(dev_token, noteMeta.guid, True, False, False, False)

Struct: Note

Field Type
guid Guid
title string
content string
contentHash string
contentLength i32
created Timestamp
updated Timestamp
deleted Timestamp
active bool
updateSequenceNum i32
notebookGuid string
tagGuids list<Guid>
resources list<Resource>
attributes NoteAttributes
tagNames list<string>
sharedNotes list<SharedNote>
restrictions NoteRestrictions
limits NoteLimits

これでタイトルと本文、後はタグなどの情報が取得できるようになりました。