![]()
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のデフォルトのノートブックへ追加するものです。
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= "image/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="image/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;
}
}
}
うん、これでなんとかいけそう。
Evernote APIの資料はこちらです。
関連する記事:
- pomera2evernoteが窓の杜で紹介されました
- Evernoteの添付ファイル機能に感動した件
- PomeraのテキストをEvernoteへアップロードするプログラムを作りました
- .NETからRedmineへアクセスするライブラリを試してみた
- pomera2evernoteが「できるポケット+ Evernote 活用編」で紹介されました
Pingback: links for 2010-03-21 - マイフットプリント::myFootPrint: