40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

MacのiPhotoの写真をEvernoteに一括インポート出来ないか模索中

〜2010/06/25追記〜
iPhotoの複数の写真を(ほぼ自動で)まとめてEvernoteに取り込むスクリプト完成というエントリで完成版出来ました
〜ここまで〜

タイトルのままですが、これまで撮りためてきた写真をiPhotoで管理しているのですが、その中でよく撮れている写真だけをライフログ的に、Evernoteにも取り込んでおこうかなとふと思いつきました。

Evernoteは有償アカウントにアップグレードしているとはいえ、撮影したデータそのままアップするのはあれなんで、

  • iPhoto上で気に入った写真だけを適当な大きさに縮小して書き出す
  • 書き出された写真を一括でインポート

という流れでやってみようかなぁと思い、手始めにすでに作成した画像付きのノートをエクスポートすると、拡張子がenexというEvernote独自のXML形式のファイルが吐き出されるのでそれを適当なテキストエディタで開いて、どういう文書構造になっているのか理解することから始めました。

テキストだけのノートだったらそんなに難しそうではないというのは直感的にわかったけど、画像のようなバイナリファイルをXML構造でどう表現しているんだろうか疑問で、それらしき個所を見ていたらというタグの後に、多数の文字列が埋め込まれたいたので、

Base64っていうのを使ってバイナリデータをテキストデータ化しているんだろうか」

かなと推測。

試しに別の画像ファイルを準備してRubyに標準で組み込まれているbase64というモジュールを利用して、エクスポートされたenexファイルの以降の個所をこの別の画像をBase64エンコード結果に置き換えて、Evernoteにインポートして、うまく行くと思ったら、なぜか画像がリンク切れのような感じになった・・

これ以上推測で物事を進めるには限界ありそうなので、こういう時には、ググる前に、EvernoteAPIドキュメントをしっかり読もうと決めて、読んでいたのですが、バイナリデータの扱いについては

Base64エンコード処理をする
・画像ファイルのMD5 ハッシュ値を取得する

ということをしないといけないことが判明。

MD5ハッシュ値を利用するというのは日常的にプログラミングしている人だったら直感的にすぐにわかるのかもしれないけど、自分の頭の中にはこういう発想がなかったので1つ勉強になった!

まぁそんなことはどうでもよく、こんな感じのRubyのスクリプト書きました。

require 'base64'
require 'digest/md5'
base64result = Base64.encode64 File.open("img/001.jpg").read
hashresult = Digest::MD5.hexdigest(File.open("img/001.jpg",'rb').read)
puts imgdata
puts result

enexファイルを開き、上記のRubyのスクリプトのhashresultの結果をで囲むようにし、hashresultの結果は

の2ヶ所を編集してenexファイルをインポートしたら無事に画像表示されたので、これを土台に本格的にツール作ってみようかと思います。