エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

CotEditorからSimplenoteへテキストを送る

ネット上にテキストを保存してくれるSimplenoteというサービスがあります。iPhoneアプリケーションもあるので、わたしの場合iPhone上では標準のメモの代わりに利用しています。
さらにそのSimplenoteのテキストをバックアップしてくれるサービスSimplenote Backupというのがあります。こちら、ソースコードが公開されています。

コードを読んでいくとSimplenote.pyというファイルにSimplenoteへアクセスするための機能がまとめられているのがわかります。

PythonよりRubyの方が性に合っている、という個人的な理由のもとにこれをRubyに書き換えられないかと試みたんですが…。SSLの壁に阻まれてあっさり挫折。Rubyに標準添付されているライブラリnet/httpsでは、上記のSimplenote.pyのように簡単にSSL通信を書くことはできない模様。

ぢゃ、だれかライブラリを公開したりしてないかなー、と探したら。見つかりました。


RubyGemsでインストール。

sudo gem install simplenote


使い方はソースを見てもらうとして。こんな感じでサンプル。標準入力をSimplenoteに送ります。

# toSimplenote.rb

require 'rubygems'
require 'simplenote'

EMAIL    = 'foo@bar.com'
PASSWORD = 'foo_bar_baz'

simplenote = SimpleNote.new
simplenote.login(EMAIL, PASSWORD)
simplenote.create_note(STDIN.read)

EMAILPASSWORDは自身のSimplenoteのアカウント情報で書き換えてください。


実行。

$ cat toSimplenote.rb  | ruby toSimplenote.rb 
warning: HTTParty depends on version 0.1.7 of crack, not 0.1.6.

これで自分自身をSimplenoteに送ることができました。
…が。なんかcrackのバージョンが違うと警告が出ます。
調べてみたところcrack-0.1.7のバグのようで、crack-0.1.7のバージョン情報の値が0.1.6になっているのが原因のようです(VERSION string needs to be updated · Issue #7 · jnunemaker/crack · GitHub)。なんだそれ、って感じですが。


このままでも使えには使えるのですが、後半の話のためにもこのバグに対処しときます。
わたしの環境の場合、次のファイルが問題のファイル。

/opt/local/lib/ruby/gems/1.8/gems/crack-0.1.7/lib/crack.rb 

このファイルの中にバージョンが記述されています。

VERSION = "0.1.6".freeze

これを0.1.7に書き換えます。これで警告が出なくなりました。

CotEditorで編集したテキストをSimplenoteに送る

実は標準入力からテキストを送れたら、ほとんどできたも同然でして。

上記のスクリプトをちょっと加工します。

#! /opt/local/bin/ruby -Ku
#%%%{CotEditorXInput=AllText}%%%

require 'rubygems'
require 'simplenote'

EMAIL    = 'foo@bar.com'
PASSWORD = 'foo_bar_baz'

simplenote = SimpleNote.new
simplenote.login(EMAIL, PASSWORD)
simplenote.create_note(STDIN.read)

一行目で扱う文字コードを指定しています。CotEditorからはUTF-8でテキストが送られてくるので-Kuを指定。
二行目でCotEditorから引き渡されるテキストの範囲を指定しています。ここでは編集中の全テキストを渡すように指定*1
テキスト本体は標準入力で渡ってくるので、スクリプトの残りの部分は同じ内容です。


ここからはCotEditorにスクリプトを設定する話。
最初にスクリプトメニューの「スクリプトフォルダを開く」を選択してスクリプトを格納するフォルダを開きます。

開いたフォルダに上記の内容のファイルを、たとえば「send to Simplenote.rb」という名前で格納します。

次にスクリプトメニューの「スクリプトメニューを更新」を選択します。

スクリプトメニューに「send to Simplenote」が追加されているはずです。

ファイル名の付け方でキーボードショートカットを指定することもできます。詳しくはスクリプトフォルダに格納されている_aboutScriptFolder.rtfというファイルを参照してください。

CotEditorでテキストを入力。

スクリプトメニューから「send to Simplenote」を選択。

結果。

Simplenoteに送ることができました。



追記(というか書き忘れ):
CotEditorから使う場合は、実行権限を設定しておかないといけないです。

$ chmod +x send\ to\ Simplenote.rb 

*1:この意味の詳細はCotEditorのヘルプに記載されています:ヘルプメニューを選択してCotEditorヘルプが開いたら、索引>スクリプトメニュー>UNIX スクリプトとの連携