Evernoteへメモを追加する。
Evernoteに自分で作成したメモを簡単に追加できればいいなと思っていたのですが、EvernoteのAPIは、ThriftなのでDelphiから直接扱うことはできません。だからずっとあきらめていたのですが、先ほどENScriptというものを見つけました。
Evernote
Windowsでの開発
http://www.evernote.com/about/intl/jp/developer/windows.php
Evernoteがインストールされていることが前提条件なのですが、Evernote.exeをパラメーター付でわざわざ起動させるのなら、そのままEvernote使えばいいと思います。しかしENScriptならDelphiから直接メモを追加できそうな感じなので試してみました。
今回createNoteではなく、importNotesを使っているのは、どちらにしても書き込んだメモをファイルとして渡すのであれば、パラメーターが少ないimportNotesの方がすっきりすると考えたからです。 Evernoteエクスポートファイル (ENEX) の仕様は、単純なメモを出力させて、それに基づいて作成していますので、必ずしも正しいとは言えないかも知れません。
実行するとこんな感じ
Evernoteでは、こんな感じ
このサンプルのように、わざわざ入力用ボックスを分けるのであれば、Evernoteを使っているのと変わらないですが、メモの1行目はタイトル、2行目はタグというようにすれば入力も楽でメモとして使えるのではないかと思います。
※このプログラムでは、処理に失敗してもエラーメッセージが表示されません。ENScriptは、エラーを起こすと実行されたままになることがあり、その場合、タスクマネージャーから終了させて下さい。
Evernote
Windowsでの開発
http://www.evernote.com/about/intl/jp/developer/windows.php
Evernoteがインストールされていることが前提条件なのですが、Evernote.exeをパラメーター付でわざわざ起動させるのなら、そのままEvernote使えばいいと思います。しかしENScriptならDelphiから直接メモを追加できそうな感じなので試してみました。
今回createNoteではなく、importNotesを使っているのは、どちらにしても書き込んだメモをファイルとして渡すのであれば、パラメーターが少ないimportNotesの方がすっきりすると考えたからです。 Evernoteエクスポートファイル (ENEX) の仕様は、単純なメモを出力させて、それに基づいて作成していますので、必ずしも正しいとは言えないかも知れません。
実行するとこんな感じ
const Temp = 'Evernote.enex'; S1 = '<?xml version="1.0" encoding="UTF-8"?>'+ '<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export.dtd">'+ '<en-export>'; // エクスポートしたファイルには、その時の日時や // EverNoteのバージョンが入っていますが、 // なくても動作しましたので、消しました。 // 複数ある場合は、<note></note>までを繰り返す。 S2 = '<note>'; // ここにタイトル <title>タイトル</title> S3 = '<content>' + '<![CDATA[' + '<?xml version="1.0" encoding="UTF-8"?>' + '<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">'+ '<en-note style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">'; // ここに本文 S4 = '</en-note>' + ']]>' + '</content>'; // ここに作成日時 <created>20111001T042516Z</created> // ここにタグ <tag>タグ1</tag> <tag>タグ2</tag> S5 = '<note-attributes>'; // ここにURL <source-url>http://delphi-fan</source-url> S6 = '</note-attributes>' + '</note>'; S7 = '</en-export>'; // Evernoteエクスポートファイル (ENEX)の作成 procedure TForm1.MakeTempFile(FileName: String); // UTCの日時-「年月日T時分秒Z」という文字列にします。 function GetCreateDateTime: String; var UTC: TSystemTime; begin GetSystemTime(UTC); with UTC do Result := Format('%.2d%.2d%.2dT%.2d%.2d%.2dZ', [wYear,wMonth,wDay,wHour,wMinute,wSecond]); end; var SL1, SL2: TStringList; I: Integer; begin SL1 := TStringList.Create; SL2 := TStringList.Create; try SL2.Delimiter := ','; SL2.StrictDelimiter := True; SL1.Add(S1); SL1.Add(S2); // タイトル SL1.Add('<title>'+Edit1.Text+'</title>'); SL1.Add(S3); // 本文 for I := 0 to Memo1.Lines.Count -1 do if I = 0 then SL1.Add(Memo1.Lines[I]) else SL1.Add('<div>'+Memo1.Lines[I]+'</div>'); SL1.Add(S4); // 作成日時 SL1.Add('<created>'+GetCreateDateTime+'</created>'); // タグ SL2.CommaText := Edit2.Text; for I := 0 to SL2.Count -1 do SL1.Add('<tag>'+SL2[I]+'</tag>'); SL1.Add(S5); // URL if Trim(Edit3.Text) <> '' then SL1.Add('<source-url>' + Edit3.Text + '</source-url>'); SL1.Add(S6); SL1.Add(S7); SL1.SaveToFile(FileName, TEncoding.UTF8); Sleep(50); // おまじない finally SL2.Free; SL1.Free; end; end; // ファイルを作成してEvernoteに読み込ませます。 procedure TForm1.Button1Click(Sender: TObject); var FileName: String; Param1, Param2: String; begin FileName := ExtractFilePath(Application.ExeName) + Temp; MakeTempFile(FileName); if FileExists(FileName) then begin Param1 := 'C:\Program Files\Evernote\Evernote\ENScript'; Param2 := 'importNotes /s ' + FileName + ' /n ' + Edit4.Text; ShellExecute(Handle, 'OPEN', PWideChar(Param1), PWideChar(Param2), nil, SW_HIDE); end; end; // 同期 procedure TForm1.Button2Click(Sender: TObject); var FileName: String; Param1, Param2: String; begin Param1 := 'C:\Program Files\Evernote\Evernote\ENScript'; Param2 := 'syncDatabase'; ShellExecute(Handle, 'OPEN', PWideChar(Param1), PWideChar(Param2), nil, SW_HIDE); end;
Evernoteでは、こんな感じ
ノートブックにないノートブックを指定した場合、ローカルノートブックとして新規作成されます。(Delphi_Newは、新規ノートブック)
リストにあるノートブックの場合は、そこにメモが追加されています。(Delphi2は作成済みノートブック)
このサンプルのように、わざわざ入力用ボックスを分けるのであれば、Evernoteを使っているのと変わらないですが、メモの1行目はタイトル、2行目はタグというようにすれば入力も楽でメモとして使えるのではないかと思います。
※このプログラムでは、処理に失敗してもエラーメッセージが表示されません。ENScriptは、エラーを起こすと実行されたままになることがあり、その場合、タスクマネージャーから終了させて下さい。
| 固定リンク