exchange.el

[更新履歴] [経緯] [exchange.el説明] [連絡先]


更新履歴

2004年 1月28日
公開 (0.1)
2004年 1月29日
換算単位の追加と一部修正(筒井さんによる)
換算レートを切り出す正規表現を修正
0.1で誤っていた通貨コードを修正 (0.2)
2004年 1月31日
表示方式の追加
換算レートの表示を小数点表記に変更
prefix argument付きの際の質問を追加 (0.3)
2004年 5月16日
prefix argument付きの際の質問で通貨名を補完可能に修正 (0.4)

経緯

海外旅行を考えていた際、複数の全く異なる方面の候補地が挙がり、決定に際しては現地通貨との換算レートも少しは考えたいよね…という話をしていました。
そんな折り、筒井弘さんX-Exchangeによる

X-Exchange: 100PHP = 191.2192JPY
X-Exchange: 1EUR = 135.359439JPY
X-Exchange: 1USD = 106.49JPY

といったヘッダを拝見し、旅行の相談をしているメーリング・リストに是非こういった情報を付けたメールを送りたいとmail の header に X-Exchange を入れるを試そうとしました。
ところが、余りいじることの出来ない普段の環境にはwgetrubyもないため、これを簡単に使うことは出来ず、日常お世話になっているpollen.elのようにEmacs Lispだけで実現出来たら良いな…と数日思い、それならばほぼ生まれて初めてそれっぽいものを習作ということで自分で書いてみようと思い立ちました。


exchange.el説明

exchange.elとは?

exchange.elはウェブ上から通貨換算レートを取得し、必要な情報を読み出すためのものです。
電子メールやNetNews記事のヘッダに付加することを想定しています。

http://www.chimons.org/~kyo/emacs/exchange.elからダウンロード出来ます。

経緯に記した通り、筒井弘さんのX-Exchangeと全く同じようなものです。
また、喜多淳一郎さんのpollen.elをそっくり真似させて頂いています。
pollen.elや岡田健一さんweather.elやfortune.elと同様の働きで、通貨換算レートを切り出します。

インストール

APELが必要ですので事前にインストールしておいて下さい。

exchange.elはload-pathの通っているところにコピーするだけで動く筈です。
バイトコンパイルが必要ならば


emacs -q -batch -f batch-byte-compile exchange.el

等として作成されたexchange.elcをload-pathの通っているところにコピーして下さい。

準備

.emacsに以下を書き加えて下さい。


(autoload 'exchange-from-http "exchange" "Exchange" t)
(autoload 'exchange-insert-header "exchange" "Exchange" t)

\M-x exchange-from-httpを実行してアメリカドル(USD)と日本円(JPY)の換算レートが取得出来れば成功です。
例えば""1アメリカドル(USD) = 105.750000日本円(JPY)"のように表示される筈です。

通貨

\C-u \M-x exchange-from-httpと実行すると通貨を指定出来ます。

通貨名は、Yahoo!ファイナンスhttp://help.yahoo.co.jp/help/jp/fin/overseas/forex_01.htmlhttp://help.yahoo.co.jp/help/jp/fin/quote/forex/forex_01.htmlを参照し、空白を除いたものを指定して下さい。
具体的には、五十音順に

です。

例えば欧州ユーロ(EUR)とアメリカドル(USD)の換算レートを取得したい場合、"From: "に対して"欧州ユーロ"、"To: "に"アメリカドル"と指定して下さい。
0.4から、この通貨名の入力時に補完が効くようになりました。

また、換算単位を尋ねられますので、大抵の場合は"Unit: "に対して初期設定の"1"で良いと思われますが、状況に応じて大きな値を指定して下さい。

更に、表示方式を尋ねられますので、"Use long format? (y or n)"に対し、長い表示方式が良ければ"y"、短い表示方式が良ければ"n"を指定して下さい。
日本語による長い表示方式は(当然ですが)マルチバイト文字を含み、短い表示方式はASCIIのみを用いています。

使い方

Wanderlustで送信するメッセージにX-Exchange: フィールドを自動付加するには、例えば.wlで次のようにして下さい。


(add-hook 'wl-mail-setup-hook
          '(lambda ()
             (exchange-insert-header "アメリカドル" "日本円")
             (exchange-insert-header "欧州ユーロ" "アメリカドル")
             (exchange-insert-header "韓国ウォン" "日本円" 100)
             (exchange-insert-header "トルコリラ" "欧州ユーロ" 1000000 t)))

この例で、韓国ウォン(KRW)と日本円(JPY)の換算の際に用いている第三の設定値"100"は、1KRWをJPYに換算したのでは値が小さ過ぎて見辛いという向きのために、100KRWとJPYの換算レートを表示するためのものです。
省略時には"1"になります。換算する通貨や表示の趣味に合わせて設定して下さい。

また、トルコリラ(TRL)と欧州ユーロ(EUR)の換算の際に用いている第四の設定値"t"は、ASCIIのみによる短い表示方式を使うためのものです。
省略時にはマルチバイト文字を含む日本語の長い表示方式になります。ヘッダに日本語を含むのは…という趣味や送信先に合わせて設定して下さい。

Wanderlust以外のUser-Agentについては、wl-mail-setup-hookに相当するhookを使ってみて下さい。weather.elやfortune.elのREADMEに詳しく説明されています。
Mewのmew-draft-mode-hookやmh-eのmh-letter-mode-hook等、対応するhookがあると思います。

また、例えばWanderlustでは、wl-draft-config-alistwl-template-alistを使うことで、複雑な設定も可能です。
相手に応じた通貨の換算レートを付加したり、相手の環境に応じて表示方式を変えたりしてみて下さい。

カスタマイズ

以下の変数を変更することでカスタマイズが可能です。

exchange-from
exchange-from-httpの呼び出しで、引数を省略した場合の値(通貨)です。
初期設定は"アメリカドル"です。
exchange-to
exchange-from-httpの呼び出しで、引数を省略した場合の値(通貨)です。
初期設定は"日本円"です。
exchange-unit
exchange-from-httpの呼び出しで、引数を省略した場合のexchange-fromの単位です。
初期設定は"1"です。
exchange-short
exchange-from-httpの呼び出しで、この値が"nil"だと表示方式に長いexchange-messageが、"t"だと短いexchange-short-messageが用いられます。
初期設定は"nil"です。
exchange-message
exchange-from-httpが返す文字列のフォーマットの内、長い表示方式を指定出来ます。
%sと%fを指定の順序で六つ含めなければなりません。最初の%sはexchange-fromの通貨の値、二番目の%sはexchange-fromの通貨、三番目の%sはその通貨コード、四番目の%fは換算レート、五番目の%sはexchange-toの通貨、六番目の%sはその通貨コードです。
初期設定は"%s%s\(%s\) = %f%s\(%s\)"で、通貨コードの部分に日本語が用いられています。
具体的には"1アメリカドル(USD) = 105.750000日本円(JPY)"のようになります。
exchange-short-message
exchange-from-httpが返す文字列のフォーマットの内、短い表示方式を指定出来ます。
%sと%fを指定の順序で四つ含めなければなりません。最初の%sはexchange-fromの通貨の値、二番目の%sはexchange-fromの通貨コード、三番目の%fは換算レート、四番目の%sはexchange-toの通貨コードです。
初期設定は"%s%s = %f%s"で、ASCIIのみが用いられています。
具体的には"1USD = 105.750000JPY"のようになります。
筒井さんオリジナルのものと同様の表示方式です。
http-fetch-timeout
換算レート情報取得時のtimeoutまでの時間を秒単位で指定します。
初期設定は"20"秒です。
http-fetch-proxy-server
必要な場合にproxyを設定します。http-fetch-proxy-portも設定する必要があります。
http-fetch-proxy-port
proxy serverのport番号です。

必要に応じて\C-u付きで呼び出せば対話的に変更出来ますので、しばしば換算レートを知りたい通貨に合わせた基本的な設定は.emacsに書いてしまうと良いかも知れません。


;; for exchange.el
(autoload 'exchange-from-http "exchange" "Exchange" t)
(autoload 'exchange-insert-header "exchange" "Exchange" t)
;(setq exchange-from "アメリカドル")      ; exchange-fromの通貨
;(setq exchange-to "日本円")              ; exchange-toの通貨
;(setq exchange-unit 100)                 ; exchange-fromの通貨の単位
                                          ;   換算レートを見て必要に応じて大きく
;(setq exchange-short nil)                ; 表示方式の切り替え
                                          ;   tで日本語の長い表示方法
                                          ;   nilでASCIIの短い表示方法

謝辞

excite.elのアイディアと内容の大半を筒井弘さんから頂戴しました。また、快くこの公開をお許し下さいました。どうも有り難うございます。
公開後、更にパッチを頂きました。重ねて御礼申し上げます。

習作ということで、コードの大半を喜多淳一郎さんのpollen.el及び新堂安孝さんのpollen.el.diffから借用しました。こちらも快くお許し頂きました。本当に有り難うございます。

友人の藤繁航さんには、通貨名の補完用のパッチと動作確認の連絡を頂きました。有り難うございます。

備考

exchange.elはGPLです。

exchange.elは通貨の換算レートを取得しますが、取得元と同様、その内容の正確性及び安全性を保障するものではありません。
当該情報に基づいて被ったいかなる損害についても、作者は一切の責任を負いかねます。


連絡先

Emacs 20.7.1とEmacs 21.2.1 / 21.3.1とEmacs 22.0.50とMeadow-2.00pre1で動作確認がされています。
proxy環境でも動作しているとのことです。
他の環境で動作確認が出来た方がいらっしゃいましたら是非ご連絡ください

殆ど真似させて頂いた上にほぼ初めてこの手のものを作ってみたので、宜しければアドバイスなど頂ければ幸いです。


Emacsへ戻る


Copyright(C) 2004,2005, MATSUURA, Kyo. All rights reserved.
kyo@chimons.org