こんにちは。FenrirFS 開発担当の福満です。
先日リリースいたしました FenrirFS 2.1 は使っていただけましたでしょうか。
Facebook で写真をシェアしたり、Twitter で写真付きでつぶやいたりして楽しんでいただけたらと思っています。
今日は FenrirFS 2.1 で使用した、Evernote API についての話題です。
Evernote API
Evernote はアプリケーションからアクセスするための API を公開し、様々な言語、プラットフォームから利用できるようにしています。
Evernote API Overview | Evernote Corporation
上のページで、SDK をダウンロードして解凍すると、 対応する言語のソースコードが含まれているのが分かります。しかし、残念ながら、FenrirFS の開発言語である Delphi はサポートされていませんでした。
調べてみると、Evernote API SDK は Thrift という RPC フレームワークを使用していて、Thrift でサポートしていない言語はサポートされていないことが分かりました。
Thrift with Delphi
Thrift はオープンソースで開発されているクロスランゲージ RPC フレームワークで、1 つの Thrift IDL(インタフェース定義言語)から様々な言語のコードを生成することが出来ます。また、言語ごとに通信やプロトコル処理を行うライブラリも用意されています。
アプリケーションの開発者が実際に記述する部分は、Thrift IDL とクライアント側のアプリケーション部分、及びサーバー側のハンドラとなり、他の部分は Thrift で生成したコードやライブラリが受け持ってくれます。
Delphi から Evernote API を利用するにあたって、他の言語で DLL を作ってそれを利用するという方法もありますが、デバッグに手間がかかる上に、いざという時に融通が利かないので出来れば避けたいところ。
結局、Delphi 用コードジェネレータとライブラリを作成し、Delphi のコードから 直接 Evernote API を使えるようにしました。
尚、Thrift の変更点はプロジェクトに提出し、現在、最新のリリースで利用可能となっています。
Evernote API を使う
Thrift を使って IDL から Delphi のコードを生成すれば、Evernote API を利用出来るようになります。以下はその手順です。
1、まず、Evernote API の IDL に Delphi のネームスペース宣言を追加します
namespace csharp Evernote.EDAM.Error namespace delphi Evernote.EDAM.Error // 追加!!
2、そして、Thrift でコード生成
thrift-0.8.0 --gen delphi -o . thrift\Errors.thrift thrift-0.8.0 --gen delphi -o . thrift\Limits.thrift thrift-0.8.0 --gen delphi -o . thrift\NoteStore.thrift thrift-0.8.0 --gen delphi -o . thrift\Types.thrift thrift-0.8.0 --gen delphi -o . thrift\UserStore.thrift
これで、生成されたコードとライブラリを使ってアプリケーション側のコードを記述することが出来るようになりました。
変更した Evernote API の IDL と、Thrift で生成したコード、Delphi 用 Thrift ライブラリ、加えて Evernote API に含まれる C# のサンプルプログラムをほぼそのまま Delphi に移植したものを下記の ZIP ファイルにまとめました。
(Delphi 2010 以降の 32 bit コンパイラで動作することを確認しています。)
アーカイブの中身は下記のようになっています。
evernote-api-delphi/ thrift/ // Evernote API の IDL delphi/ sample/ // サンプルプログラム src/ Evernote/ // IDL から生成したコード Thrift/ // Thrift の Delphi 用ライブラリ
* 利用にあたっては、Thrift と Evernote API それぞれのライセンスに従ってください。ライセンス文書は上記 ZIP に同梱しています。
サンプルプログラムの使い方
Delphi で evernote-api-delphi\delphi\sample\EDAMTest.dpr を開き、コード中の下記の部分の API キーと Secret を自分で取得したものに差し替えてコンパイルします。
consumerKey := 'en-edamtest'; consumerSecret := '0123456789abcdef';
API キーと Secret は冒頭のEvernote API のぺ―ジから取得することが出来ます。
コンパイル出来たら、さっそく実行しみましょう。
コマンドラインで、ユーザー名とパスワードを渡して起動します。
EDAMTest.exe <ユーザー名> <パスワード>
最終的に、以下のようなメッセージが表示されたら成功です。
Successfully created new note with GUID: 07b4bfa4-0251-40c5-8443-d68a11d850ff
Evernote の Web ページで確認すると、こんな表示になります。
まとめ
ありとあらゆる言語がサポートされながら、Delphi からは使えなかった Evernote API が使えるようになりました。Delphi 使いの方は是非お試しください。
今後もフェンリルへの応援をよろしくお願いいたします。
フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!
フェンリルの開発者アカウントでは、フェンリルプロダクトの最新開発情報などをつぶやいています。よろしければフォローしてください! Follow @fenrir_dev