/ #evernote 

Evernote APIをラップするC\#のライブラリEvernoteSharpを試してみました

Evernoteは開発者向けにAPIを提供しています。

C#で書こうとしているちょっとしたプログラムの調査のため、Evernote APIをラップするC#のライブラリEvernoteSharp試してみました。

Evernote APIを使うためには、API Keyを払い出してもらう必要があります。Request an API Keyから、必要事項を書いて申し込みます。私の場合は申し込んでから1時間半ぐらいでAPI Keyがメールで送られてきました。仕事が速いですね!

API Keyは開発用環境であるSandBoxのみで有効です。このため、普段使っているアカウントとは別にEvernote Registrationからテスト専用のアカウントを登録します。

次に、Visual StudioでWindowsアプリケーションのプロジェクトを作成します。EvernoteSharpをダウンロードし、アーカイブを解凍してEvernoteSharp.dllをプロジェクトの参照設定へ追加します。準備はこれで完了。

以下のコードは、指定した画像ファイルをEvernoteのデフォルトのノートブックへ追加するものです。

[csharp]
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using EvernoteSharp;

namespace EvernoteSample
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }

private void button1_Click(object sender, EventArgs e)
 {
 StoreFactory sf = new StoreFactory(new Uri("http://sandbox.evernote.com/"), "your-api-key-here!", "your-api-secret-here!");
 UserStoreWrapper userStore = sf.CreateUserStore();

if (!userStore.CheckVersion())
 throw new Exception("Invalid API version");
 userStore.Authenticate("your-username", "your-password");

NoteStoreWrapper noteStore = sf.CreateNoteStore();
 Evernote.EDAM.Type.Data data = new Evernote.EDAM.Type.Data();

FileStream fs = new FileStream(tbTitle.Text, FileMode.Open, FileAccess.Read);
 byte[] bImageFile = new byte[fs.Length];
 fs.Read(bImageFile, 0, bImageFile.Length);
 fs.Close();

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
 byte[] bs = md5.ComputeHash(bImageFile);
 string hashHex = BitConverter.ToString(bs).ToLower().Replace("-","");

data.Size = bImageFile.Length;
 data.BodyHash = bs;
 data.Body = bImageFile;

Evernote.EDAM.Type.Resource resource = new Evernote.EDAM.Type.Resource();
 resource.Mime= "images/png";
 resource.Data = data;

Evernote.EDAM.Type.Note note = new Evernote.EDAM.Type.Note();
 var defaultNotebook = noteStore.GetDefaultNotebook();

note.NotebookGuid = defaultNotebook.Guid;
 note.Title = tbTitle.Text;
 note.Content = "<?xml version="1.0" encoding="UTF-8"?>" +
 "<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml.dtd">" +
 "<en-note>" +
 "<en-media type="images/png" hash="" + hashHex + ""/>" +
 "</en-note>";

note.Updated = note.Created;
 List<Evernote.EDAM.Type.Resource> resourceList = new List<Evernote.EDAM.Type.Resource>();
 resourceList.Add(resource);
 note.Resources = resourceList;

noteStore.CreateNote(note);

MessageBox.Show(tbTitle.Text + "をEvernoteへ追加しました");
 }

private void button2_Click(object sender, EventArgs e)
 {
 if (openFileDialog1.ShowDialog() == DialogResult.OK)
 tbTitle.Text = openFileDialog1.FileName;
 }
 }
}
[/csharp]

うん、これでなんとかいけそう。

Evernote APIの資料はこちらです。

Edit(Admin)