FreeBSDで受信したメールから情報を取り出す

2018年6月7日

元記事のGoogle Finance APIを使った株価の取得記事はAPI配信停止に伴い公開を中止しました。

株価の取得については本記事を、為替の取得についてはOpenExchangeRates.orgで為替情報を取得するをご覧ください。

Google Finance APIを使った株価の取得がうまく動かなくなったので別の手を考えました。そもそもそんな情報が欲しい人は証券口座のひとつも持っているだろうということで。。。

Monexのアラートメールを使う

どこでもいいんですが、たまたま持っているのがマネックス証券だったのでこれを使います。口座開設と維持はタダだから、他に手がなければ開いてみればいいんじゃないですか?

Monexの登録銘柄アラートメールというサービスが、引け後の任意の銘柄の情報を知らせてくれます。ここにTOPIX版ダウの犬で使う銘柄を登録します。

【ボード1】
          銘柄名           終値          前日比        騰落率
          始値             高値          安値          出来高
———————————————————————-
2914  JT                 終      *,*** 比        -** 率       -*.**%
東証      始         *,*** 高      *,*** 安      *,*** 出来  *,***,***
———————————————————————-

こんなフォーマットでメールが届くので、行頭が数字で始まる部分を抜き出してやると、証券コードと銘柄(略称)と終値が抜き出せますよ。

受信したメールを.forwardで転送する

FreeBSDやLinuxなどのunixでは.forwardファイルを使って受信したメールを処理することができます。ホームディレクトリに.forwardファイルがあると、そのユーザーに届いたメールはファイルの指示どおりに処理されます。

具体的には転送先アドレスを記述しておくと、そのアドレスにメールが転送されます。転送先は複数指定することができ、改行またはカンマで区切って指定します。

hogeに届いたメールの転送

以下のような.forwardファイルを用意しておくと、hogeというユーザーに届いたメールはhogeのメールボックスには残らず、fuga@mail.comとpiyo@mail.jpに転送されます。

fuga@mail.com
piyo@mail.jp

hogeにメールを残して転送

hogeのメールボックスにメールを残したまま転送したい場合は、バックスラッシュ付きでユーザー名を指定します。バックスラッシュを忘れると無限ループに陥るので注意。(実際には途中で止まるらしい)

\hoge
fuga@mail.com
piyo@mail.jp

受信したメールを.forwardで処理する

本来メールを転送する.forwardファイルですが、転送すべきテキストをパイプで受けていろいろな処理をすることができます。

多段のパイプも使えますが、今回はシェルスクリプトを使います。.forwardファイルにしろシェルスクリプトにしろ、パスが通っていないとうまく動かないので、nkfのように後からインストールしたコマンドはフルパスで指定するのを忘れずに。。。

#! /bin/sh
/usr/local/bin/nkf -w | grep -e '^[0-9]' | tr -d ',' | sed 's/ */,/g' | cut -d ',' -f 1,2,4 > price.list

Monexアラートメールのメールヘッダにはcharset=ISO-2022-JPとあるので、nkfを使ってutf-8に変換しておいた方が扱いやすい。これを/home/user/price.shなどとしてやって、.forwardファイルに書き込みます。

"| /home/user/price.sh"

こうしておくと、アラートメールを受信するたびに次のようなprice.listファイルが生成されるようになります。

2914,JT,****
4502,武田薬,****
7201,日産自,****
7203,トヨタ自,****
7751,キヤノン,****
8031,三井物産,****.*
8316,三井住友,****
8411,みずほ,***.*
8766,東京海上,****
9437,NTTドコモ,****

このデータを使えば、常に最新の情報でTOPIX版ダウの犬の計算ができるようになりますね。

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments