Edited at

EvernoteAPIをnode.jsでいじる

More than 3 years have passed since last update.

環境はCentOS6.6です。

デベロッパートークンはすでに取得済みであることを前提とします。


node.jsのインストール

$ sudo yum groupinstall 'Development tools'

$ wget http://nodejs.org/dist/v0.12.0/node-v0.12.0.tar.gz
$ tar xvf node-v0.12.0.tar.gz
$ cd node-v0.12.0/
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

バージョン確認。

$ node -v

v0.12.0
$ npm -v
2.5.1


プロジェクトを作成

ディレクトリを作成&移動して、jsファイルを作成します。

$ mkdir EvernoteSampleApp

$ cd EvernoteSampleApp
$ touch index.js


モジュールのインストール

$ npm install evernote

$ npm install enml-js
$ npm install --save node-note
$ npm install async


コード

index.jsをエディタで開いてカタカタ。ちなみに私はAtomで。

ここでやってるのは、新規ノートの作成と、最初のノートの情報を取得→ENML→HTML変換。


index.js

var Evernote = require('evernote').Evernote;

var ENML = require('enml-js'); //ENMLをHTMLにしてくれたり。
var nodeNote = require('node-note'); //ノートを簡単に作成してくれたり。
var async = require('async'); //非同期処理を楽にしてくれたり。

var DEVELOPER_TOKEN = "<YOUR_DEVELOPER_TOKEN>"; //デベロッパートークン

var client = new Evernote.Client({ token: DEVELOPER_TOKEN });
var noteStore = client.getNoteStore();
var noteFilter = new Evernote.NoteFilter();
var notesMetadataResultSpec;

// 新規ノート作成
/*--------------------------------------------------------------------*/
var evernote = new nodeNote({token: DEVELOPER_TOKEN, sandbox: true});

var options = {
title: 'hoge',
body: 'Create new note'
};

evernote.createNote(options, function (err,createdNote) {
console.log('Create new note : complete' );
});

// ノートの各情報を取得
/*--------------------------------------------------------------------*/

notesMetadataResultSpec = new Evernote.NotesMetadataResultSpec({
includeTitle: true,
includeAttributes: true
});

// 非同期処理
async.waterfall([

// ノート検索?
function(callback){
noteStore.findNotesMetadata(noteFilter, 0, 100, notesMetadataResultSpec, function(err, notes) {
console.log(err || notes);
if(notes){
callback( null, JSON.stringify(notes) );
}
});
},

],function(err, result){

// ひとつ目のノートそ取得してHTML形式で表示
var getMetaData = JSON.parse(result);
noteStore.getNote(getMetaData.notes[0].guid, true, true, true, true, function(err, note) {
console.log(err || ENML.HTMLOfENML(note.content, note.resources));
});

});



ENMLは、Evernoteノートの記述に使用されるマークアップ言語。

HTMLタグもサポートされてるけど、idとかclassとかは使えない。



実行

$ node index.js


参考サイト

[1].npmの基本的な使い方まとめ - うなの日記

[2].Node.js error in noteStore.findNotes and noteStore.findNotesMetadata - Evernote for Developers - Evernote User Forum

[3].node.jsのいろいろなモジュール17 – asyncで非同期処理のフロー制御