Skip to content

Commit

Permalink
Merge pull request #3 from cmckni3/master
Browse files Browse the repository at this point in the history
Upgrade Evernote SDK
  • Loading branch information
volkhin authored Jul 21, 2017
2 parents e61d3e3 + 39b156f commit 284956a
Show file tree
Hide file tree
Showing 8 changed files with 787 additions and 35 deletions.
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# get token at https://www.evernote.com/api/DeveloperToken.action
EVERNOTE_TOKEN=
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/notes
/node_modules
tmp/
.env
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Evernote-markdown

Convert Evernote's notes into Markdown syntax.
Convert Evernote's notes into Markdown syntax.

## Quickstart

Expand All @@ -9,11 +9,13 @@ Convert Evernote's notes into Markdown syntax.
git clone https://github.com/volkhin/evernote-markdown
cd evernote-markdown

2. Get Developer Token at https://www.evernote.com/api/DeveloperToken.action
and put it into **index.coffee**.
3. Install node modules
2. Install node modules

npm install
cp .env.example .env

3. Get Developer Token at https://www.evernote.com/api/DeveloperToken.action
and put it into **.env**.

4. Execute script

Expand Down
20 changes: 16 additions & 4 deletions index.coffee
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
dotenv = require('dotenv').config()

debug = require('debug')('evernote-markdown:client')

Evernote2Markdown = require './src/evernote'
# get token at https://www.evernote.com/api/DeveloperToken.action
token = 'PUT YOUR TOKEN HERE'
converter = new Evernote2Markdown token
converter.convertNotes()

token = process.env.EVERNOTE_TOKEN

new Promise (resolve, reject) ->
converter = new Evernote2Markdown token
converter.convertNotes()
.then(() ->
console.log 'complete'
process.exit 0
).catch (err) ->
console.log 'Error', err
process.exit 1
11 changes: 8 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,16 @@
],
"license": "MIT",
"dependencies": {
"coffee-script": "^1.7.1",
"coffee-script": "^1.12.3",
"debug": "^2.6.1",
"dotenv": "^4.0.0",
"entities": "^1.1.1",
"evernote": "^1.25.3",
"libxmljs": "^0.10.0",
"evernote": "^2.0.1-beta",
"libxmljs": "^0.18.4",
"mkdirp": "^0.5.0",
"underscore": "^1.6.0"
},
"engines": {
"node": ">= 4.6.0"
}
}
16 changes: 9 additions & 7 deletions src/enml.coffee
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
debug = require('debug')('evernote-markdown:enml')

libxmljs = require 'libxmljs'
entities = require 'entities'
_ = require 'underscore'
Expand All @@ -19,8 +21,8 @@ inlineElement = (str) ->
str = "#{str} " if str.length
return str

recursiveWalk = (node) =>
# console.log node.name(), node.type(), node.toString()
recursiveWalk = (node) ->
debug node.name(), node.type(), node.toString()
switch node.type()
when 'text' then inlineElement node.toString()
when 'comment' then ''
Expand All @@ -44,15 +46,15 @@ recursiveWalk = (node) =>
"[#{text}](#{href})"
when 'br' then '\n'
when 'div', 'en-note', 'ol', 'ul', 'p' then blockElement content
when 'en-todo'
when 'en-todo'
" - [#{if node.attr 'checked' then 'x' else ' '}] "
else content
else
throw Error "no rule to parse #{node}"
throw new Error "no rule to parse #{node.type()} #{node.name()} #{node.toString()}"

toMarkdown = (note) ->
xmlDoc = libxmljs.parseXml note.content
# console.log xmlDoc.root().text()
toMarkdown = (content) ->
xmlDoc = libxmljs.parseXml content
debug xmlDoc.root().text()
content = recursiveWalk xmlDoc.root()

module.exports =
Expand Down
51 changes: 34 additions & 17 deletions src/evernote.coffee
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{Evernote} = require 'evernote'
debug = require('debug')('evernote-markdown:evernote-api')

Evernote = require 'evernote'
ENML = require './ENML'
fs = require 'fs'
mkdirp = require 'mkdirp'
Expand All @@ -9,40 +11,55 @@ class Evernote2Markdown
constructor: (@token) ->

auth: ->
throw Error 'Please specify auth token!' if not @token
throw new Error 'Please specify auth token!' if not @token
@client = new Evernote.Client
token: @token
sandbox: false
china: false
return @client

saveToFile: (path, data) ->
fs.writeFile path, data
new Promise (resolve, reject) ->
fs.writeFile path, data, 'utf8', (err) ->
return reject err if err
resolve()
.catch (err) ->
console.error 'failed to write file', path, err

handleNote: (note) =>
console.log "Loaded node '#{note.title}' (#{note.guid})"
@noteStore.getNotebook note.notebookGuid, (err, notebook) =>
throw Error err if err?
debug "Loaded note '#{note.title}' (#{note.guid})"
@noteStore.getNotebook note.notebookGuid
.then (notebook) =>
path = "#{@directory}/#{notebook.name}"
debug 'making dir', path
mkdirp path, (err) =>
throw Error err if err? and err.code isnt 'EEXIST'
# @saveToFile "#{path}/#{note.title}.enml", note.content
markdown = ENML.toMarkdown note, true
# console.log markdown
throw err if err? and err.code isnt 'EEXIST'
markdown = ENML.toMarkdown note.content, true
filename = note.title.replace /\//g, ''
@saveToFile "#{path}/#{filename}.md", markdown
.catch (err) ->
console.error 'handleNote', err

convertNotes: ->
@auth()
@noteStore = @client.getNoteStore()
noteFilter = new Evernote.NoteFilter()
spec = new Evernote.NotesMetadataResultSpec()
notes = @noteStore.findNotesMetadata noteFilter, 0, 1000, spec, (error, response) =>
throw Error err if err?
noteFilter = {}
spec =
includeTitle: true
@noteStore.findNotesMetadata noteFilter, 0, 1000, spec
.then (response) =>
notes = response.notes
console.log "Found #{notes.length} note(s)"
debug "Found #{notes.length} note(s)"
noteSpec =
includeContent: true
for note, i in notes
@noteStore.getNote note.guid, true, false, false, false, (error, note) =>
throw Error err if err?
@noteStore.getNoteWithResultSpec note.guid, noteSpec
.then (note) =>
@handleNote note
.catch (err) ->
console.error 'getNoteWithResultSpec', err
Promise.reject err
.catch (err) ->
console.error 'convertNotes', err

module.exports = Evernote2Markdown
Loading

0 comments on commit 284956a

Please sign in to comment.