Ankiのカードをブラウザから追加したかった。

決して後退しない学習ーAnkiを使うとどうして一生忘れないのか? 読書猿Classic: between / beyond readers

Ankiの記事を見たので便乗。
最近Ankiを使い始めてて、効果のほどはまだ分からないけどまあ楽しく使っている。用途としては英単語を覚えるのがメイン。んでWebを見ていて知らない英単語があると、調べては手作業で追加していたのだけど、これがだるいなーと思ったので自動化した。ブラウザ上で単語を範囲選択、右クリックのメニューからAnkiへの単語追加コマンドを実行するだけで、追加がすむ様になった。ただしMacに限る。仕組みに使ったパーツは、

  • 辞書引きプログラム

false-git/dict · GitHub
コマンドラインからMac標準の辞書を引くプログラム。コンパイルして~/dict/dictに設置。

  • Run External Commands

Anki - friendly, intelligent flashcards
ソケットを使って外部からAnkiへの単語追加を可能にするAnkiのaddon。追加情報の書かれたxmlへのpathを入力とする。インストールするだけ。

単語を標準入力から受け取って、辞書引きプログラムで調べて、xmlつくって、上記addonにわたすスクリプト。どっか適当なところに保存。

require 'socket'

word = ARGF.read
tmp = `dict/dict #{word}`
res = tmp.lines.to_a[2,20].join

unless res.empty?
  open("/tmp/anki.xml", "w"){|f|
    xml = "<command name='add-notes' version='1.0'>                                                     
  <models>                                                                                              
  </models>                                                                                             
  <notes>                                                                                               
    <note>                                                                                              
      <model>Basic</model>                                                                              
      <tags>                                                                                            
      </tags>                                                                                           
      <fields>                                                                                          
        <field>                                                                                         
            <name>Front</name>                                                                          
            <content>#{word}</content>                                                                  
        </field>                                                                                        
        <field>                                                                                         
            <name>Back</name>                                                                           
            <content>#{res}</content>                                                                   
        </field>                                                                                        
      </fields>                                                                                         
    </note>                                                                                             
  </notes>                                                                                              
</command>                                                                                              
"

    f.write(xml)
  }
  s = TCPSocket.new("localhost", 49666)
  s.write('/tmp/anki.xml')
  s.close
end

以上を準備した後、範囲選択した単語を自作スクリプトに渡す様に設定。使用方法はここを参考にした。Mac を使っているなら必ず使うべき2つの機能 "Automator" と "サービス" - kurainの壺

これで単語登録が楽になった。