0

evernoteAPIをphpで使う(notestore)

前回はユーザーデータを扱うuserstoreを使ったけど、今回はノートを扱うnotestoreというモジュールを使う方法です。「notestore」となってるけど、実際はuserstoreでできる事以外はnotestoreでできます。
ノートやノートブックを操作するのは勿論、タグに関する事、同期に関する事、共有に関する事もnotebookに属します。

■ユーザーデータと同様、notestoreのインスタンスを生成します。
$noteStoreTrans = new THttpClient('sandbox.evernote.com', 80, '/edam/note/' . $_SESSION['shardId'], 'https');
$noteStoreProt = new TBinaryProtocol($noteStoreTrans);
$noteStore = new NoteStoreClient($noteStoreProt, $noteStoreProt);

userstoreとTHttpClientの引数がuserstoreと少し違う。
/edam/user/が/edam/note/(shardId)というものに変わる。
shardIdはgetAccessTokenでoauth_token、oauth_token_secretと同じようにedam_shardという名前で取得できてるはずなのでsessionにでも入れとく便利です。
値は永続的なものなのかユーザーによってどう変わるか分からないけど自分の環境はずっと「s1」が返ってくる。

あとはnoteStoreのインスタンスでごにょごにゅする。

noteStoreに64ものサービスがあるので代表的なところだけ書きます。
■ノートブックを取得
まず公式のサンプルにもあるlistNotebooksを使う。
$notebooks = $noteStore->listNotebooks($_SESSION['accessToken']);

戻り値はオブジェクトになっているので、プロパティにアクセスして情報をとる形になります。

foreach ($notebooks as $notebook) {
// ノートブックの名前
echo $notebook->name;
// ノートブックのユニークなID。ノートブックの名前が変わっても変わらない。
echo $notebook->guid;
}

■ノート検索
findNotesとedam_notestore_NoteFilterを使って検索をする。
以下の例は「ほげ」と書かれたノートを10件取得するというもの。
$filter = new edam_notestore_NoteFilter();
$filter->words = "ほげ"; // 検索したいワード
$noteList = $noteStore->findNotes($_SESSION['accessToken'], $filter, 0, 10);

検索したいワードは普段Evernoteの検索で使うものと同じです。
普通の文字列からsource:やtodo:を使った高度な検索も使えます。
参考: Evernoteを自由に検索するための10の条件

ループで回してメタ情報を取得していく。
foreach ($taskNotes->notes as $note) {
// 属してるノートブックのユニークID
echo $note->notebookGuid
// ノートのユニークID
echo $note->guid
// ノートのタイトル
echo $note->title
}

ただこれだと肝心のノートの内容が取れない。
ノートの内容を取るには別のメソッドをサービスを利用する。

■ノートの内容を取得
$contents = $noteStore->getNoteContent($_SESSION['accessToken'], '2f7rfbc8-0d46-4bf9-91f2-2da715cs99e5');
第二引数はノートのユニークID(guid)が入る。戻り値はstring。
内容はXHTMLに似たENMLで記述されているので、後はPHP Simple HTML DOM Parserとか使ってパースしてやる。

ENMLはこんな形になってます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note><div>ほげほげ</div>
<div>テスト</div>
<div><en-todo></en-todo>やること1</div>
<div><en-todo></en-todo>やること<span style="color: #ff6600;">2</span></div></en-note>

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です