阅读我自己的Evernotes

时间:2013-11-19 19:32:30

标签: python macos evernote

我知道如果我Evernote Python API get a special API key提供了一个名为getNote的方法。

但是,对于我想要的应用程序来说,这一切都太过分了:使用Python对我自己的个人Evernotes进行文本分析。即使使用API​​看起来也有点矫枉过正,因为它更适合应用程序开发人员。

是否有更简单的方法通过注释名称在Python中访问我自己的个人Evernotes并阅读他们的内容

2 个答案:

答案 0 :(得分:7)

您提到的特殊API密钥是针对OAuth的,对于仅访问您自己的帐户的某些应用来说,这样做太过分了。为此目的,Evernote有一个developer token

下面是一个简单的例子,说明如何获得带标题的笔记。

import evernote.edam.type.ttypes as Types
import evernote.edam.notestore.ttypes as NoteStore

from evernote.api.client import EvernoteClient

auth_token = "your developer token"

client = EvernoteClient(token=auth_token, sandbox=True)
note_store = client.get_note_store()

note_filter = NoteStore.NoteFilter()
note_filter.words = 'intitle:"test"'
notes_metadata_result_spec = NoteStore.NotesMetadataResultSpec()

notes_metadata_list = note_store.findNotesMetadata(note_filter, 0, 1, notes_metadata_result_spec)
note_guid = notes_metadata_list.notes[0].guid
note = note_store.getNote(note_guid, True, False, False, False)

答案 1 :(得分:1)

我能看到的最简单的解决方案是在Evernote内容文件夹中搜索每个笔记的唯一内容。它在这里找到:

/Users/[system_username]/Library/Application Support/Evernote/accounts/Evernote/[evernote_username]/content/

备注的标题未列在内容文件夹中,因此您必须手动将它们映射到其关联的文件夹。例如,标题为'Monday''Sunday'的注释可以映射到字典中,如下所示:

day = {
    'Monday': 'p1647',
    'Tuesday': 'p1648',
    'Wednesday': 'p1622',
    'Thursday': 'p1620',
    'Friday': 'p1641',
    'Saturday': 'p1644',
    'Sunday': 'p1635',
}

Evernotes的内容存储在各自content.html文件夹中的p\d+个文件中。它们可以通过以下函数作为字符串访问:

import os
def getHTML(note_folder):
    system_username = 'your_username'
    evernote_username = 'your_username'
    base_dir = '/Users/'+system_username+'/Library/Application Support/Evernote/accounts/Evernote/'+evernote_username+'/content/'
    f = open(os.path.join(base_dir,note_folder,'content.html'), 'r')
    return f.read()

您可以使用BeautifulSoup解析HTML。这将以简单的注释打印所有行:

from BeautifulSoup import BeautifulSoup
html = getHTML(day['Monday'])
soup = BeautifulSoup(html)

divs = soup.findAll('div')
for div in divs:
    if len(div.contents) == 1:
        s = div.contents[0]
        if div.br != None:
            s = ''
        print s
相关问题