今回このブログシステム作るために Evernote API を使ってみたので、その導入部分のメモ。
このAPIを使うことで、自分用Evernoteアプリを作ることができる。APIのドキュメントを見るとわかるよう結構色々なことができる。公式のEvernoteクライントでできることは当然このAPIでできる。ノートの検索や、読み、書き、とか。OAuthにも対応していているので、第三者にサービスを提供することもできそう。自分が作ったのは俺用アプリなんで、普通にIDとPasswordで認証してる。
準備
- まずAPIキーが必要なんでそれを http://www.evernote.com/about/developer/api/ で取得する。(申し込みから数日かかる。APIキー関連の処理は手動でしてる感じ)
- APIキーは最初に発行された状態ではsanboxにしかアクセスできない。これはEvernoteの正式な環境ではなくて、専用のテスト用の環境。その中で自由にユーザアカウントとかデータと作って遊ばせてくれる。(でもデータの保証はされないらしい)
- その後で、「練習終わったよ!」って再度申請すると、そのキーを本番でも使えるようにしてくれる。その申請も http://www.evernote.com/about/developer/api/ ここからでいいみたい。ただ、申請の正式な方法がよくわからない。自分はApplication Detailsのとこのフリーテキストのところに "Could you activate my API key on the production servers?" 的に書いた気がする。
API
APIはそれなりに簡単に使える。今回はRubyで作ったが、java, perl, php, python あたりもサポートされている。http://www.evernote.com/about/developer/api/ から入手できるEvernote API (ZIP)という中に各種言語のライブラリと一緒にサンプルコードも入ってるのでそれを読めばだいたいのことはわかる。
例えば、今回自分が書いたのだと、
- 自分のアカウントで認証
- "blog"というタグが含まれている全ノートを抽出
- ノートを一つずつ舐めて、自分のWebアプリにデータ取り込み
って感じ。
今回作ったアプリは、ノートの読み込みオンリーだけど、もちろんノートの更新や新規作成もできる。
2010年にもなって自分でブログシステム作るとかあり得ないと思うんだけど、なんとなく作った。完全俺用。
Evernoteと連携
最近すっかりEvernoteどっぷり生活になってる。Webクリップとかはしてなくて、ほとんどがテキストの落書き。で、その中で技術的なメモとかは公開できそうな気がしてるのだけど、どうも公開用に書きなおすのはだるくて放置されてた。で、そのまま公開しちゃえばいいんじゃない?ってのがそもそもの発想。Evernote公式にもそれっぽい機能があるんだけど、どうもいまいちだったんでEvernote APIを使って自分で作ってみた。
それと、過去にも自分の作業ログ的なのを公開していたことがあるんだけど、いくつか問題点があって「一度公開したものを更新しづらい」「自分の手元のバージョンと公開してるバージョン差異」「公開したものを、自分のために見返すときにWeb上の検索はいまいち(ローカル検索には勝てない)」とかがあってだんだん更新しなくなってしまっていた。
Evernoteを使えば、その辺を解決できるかな、と思ったのもきっかけ。(裏の理由としては、SinatraとかMongoDBとかを実際のアプリの上で試してみたかった、というのがある。)
ブログとしての最低限の機能、もない
ブログとWikiの中間ぐらいのイメージで作ったので、色々と中途半端ではある。あるのはAtomフィード / Permanent Llink / Tag (Category) くらいかな。コメントくらいつけてもいいかなとは思ってるけどspam対策とかめんどくさ。 とりあえず、http://disqus.com/ つけてみた。
フレームワークはSinatra
最近、会社でRuby on Railsをやっていて、それなりに楽しいんだけど、ちょっとしたアプリを作るにはいちいち重厚すぎるのでSinatraを使ってみた。結果は良好。ちょっとした社内のシステムとかはSinatraでいけそう。Sinatraについては別にメモを残す予定。
データベースはMongoDB
最近のNoSQLブームに乗っかってしばらくCouchDBで遊んでいたんだけど、どうもまだまだ実システムでは色々きついな、ってところがあって今回はMongoDBで実装してみた。データ量が少ないし、データ構造も単純なんで何とも言えないけど、なかなかいい感じ。
その他
後は普段使いのHaml/rspec/FactoryGirlあたりを使って手早く作った。それと、Ruby 1.9 専用。
それにしても、いまどきのフレームワークやらライブラリやら言語やらのおかげでこれくらいの物なら数時間で作れることに驚いた。一番めんどくさそうな記述部分が完全Evernote任せってのはある。一番時間がかかったのEvernote APIが提供するXMLからhtmlへ変換だったりするわけだけど。XSLTって数年に一度しか必要にならないから毎回1から調べさせられてめんどくさいけど、それなりに便利だからなー。
ブログあちこちに作っても書かねーじゃないか、は禁句。