Introduction

ブログ内検索

  • このサイトの記事を検索 by Google

おすすめの一冊!

無料ブログはココログ

« 算数オリンピック | トップページ | 2種類の API keys »

2011-01-26

Evernote API の門を叩く


Evernote の API を叩くサービスの開発を再開しました。
とりあえず、Twitter のツイートとかを取り込めるようにするつもり。


今回はもう最初から @nifty の CGI にするのはあきらめて、自前の VPS で
やることにしたので、まずは Thrift を make&install しました。
ただし、単に Evernote API を叩くクライアントを動かすだけなら
Thrift のインストールは要らなかったかもしれません・・・・

Evernote API の zip ファイルに Perl クライアント用のライブラリが含まれていて、
その中に Thrift のライブラリも一式含まれているみたいでした。
それを直接参照できるようにシンボリックリンクを張っておきます。

$ ln -s ~/evernote-api-1.17/lib/perl ./Evernote
続けて、Evernote API Overview のサンプルコードに従って Perl コードを書き始めます。
use strict; use warnings; use utf8; use lib './Evernote'; use Data::Dumper; $Data::Dumper::Purity = 1; use Thrift; use Thrift::HttpClient; use Thrift::BinaryProtocol; use UserStore; use EDAMUserStore::Constants; my $userStoreTrans = Thrift::HttpClient->new('https://sandbox.evernote.com/edam/user'); my $userStoreProt = Thrift::BinaryProtocol->new($userStoreTrans); my $userStore = UserStoreClient->new($userStoreProt, $userStoreProt); eval { my $versionOK = $userStore->checkVersion('tw2en/0.0.0.1', EDAMUserStore::Constants::EDAM_VERSION_MAJOR, EDAMUserStore::Constants::EDAM_VERSION_MINOR); print Dumper($versionOK) . "\n"; }; die Dumper($@) if $@;
ここで、URL を "https" じゃなくて "http" にしてしまって、はまりました。 コンパイルは成功するのですが、実行すると例外を投げてお亡くなりになってしまいます。
$VAR1 = bless( { 'code' => 0, 'message' => 'Missing version identifier' }, 'Thrift::TException' );
この例外を投げている Evernote/Thrift/BinaryProtocol.pm を覗いてみると、 バージョン番号のチェックでエラーになっているみたいでした。 値をデバッグプリントしてみると、0x8001xxxx を期待しているところに 0x35303020 とかいう値が渡されていて、それでエラーになっていました。 とりあえず通信はできてるっぽいのが非常に悩ましくて、もしかして期待値がハードコーディング されているけどその値を Evernote 用に変えないといけないんじゃないか、などと邪推したり。 たくさんググって見ましたけど、関係ありそうな話はどこにも見あたらず・・・ 結局、サーバの URL のプロトコルを "http" から "https" に変えたら あっさり動きました。 実のところ、サンプルコードが https になっているのにはかなり早い段階で気がついていて、 そこは修正したつもりだったのですが、ファイルを VPS にアップロードするときに 宛先フォルダの指定を間違えていて、別のフォルダのファイル(参照されない)が更新されて 実際に使われているファイルは更新されていなかった、というミスでした。 でも、http でも接続できるのって、なにか意味があるんですかね・・・・(くやしい 次のステップはユーザ認証ですが、ここでもまた躓きそうな予感 (-_-;

« 算数オリンピック | トップページ | 2種類の API keys »