無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

並列HTTPダウンローダ

Erlang クエックブックを眺めていると、HTTPでデータを取得するサンプルがありました。httpモジュールを使うと簡単にできそう。ということでHTTPダウンローダを作ってみました。

仕様

せっかくなので複数プロセスで並列取得するようにしてみます。

  • 引数で取得するURLの配列を受け取る。
  • URLごとにプロセスを起動し、並列にHTTPでデータをダウンロード。
  • 取得したファイルをカレントディレクトリに「<連番>.html」の名前で保存する。

実装

Erlang クエックブックを参考にさくっと実装。エラー処理をやってないとはいえ、かなりシンプルです。

-module(dl).
-export([dl/1, dl0/2]).

% 与えられたURLのデータをカレントディレクトリに保存する。
dl(List) -> dl(List, 1).

dl([], _) -> ok;
dl([First|List], I) ->
  spawn( dl, dl0, [First, I] ),
  dl(List, I+1).

dl0( URL, I) ->
  File = integer_to_list(I) ++ ".html",
  io:format("download start. " ++ URL ++ "~n", []),
  {ok, {Status, Header, Body}} = http:request(URL),
  file:write_file( File, Body ),
  io:format("complete . " ++ URL ++ " -> " ++ File ++ "~n", []).

実行してみます。

3> dl:dl(["http://d.hatena.ne.jp/unageanu/","http://www.erlang.org","http://goo
le.co.jp"]).
download start. http://d.hatena.ne.jp/unageanu/
download start. http://www.erlang.org
download start. http://google.co.jp
ok
4> complete . http://www.erlang.org -> 2.html
4> complete . http://d.hatena.ne.jp/unageanu/ -> 1.html
4> complete . http://google.co.jp -> 3.html

ちゃんととれてきました!

補足:プロキシ設定について

HTTPで接続する際にプロキシを利用するには、「http:set_options(Options)」で設定する必要があります。

http:set_options([{proxy,{{"<プロキシホスト>", <プロキシポート>},["プロキシを使用しないホストの指定"]}}]).

例)

http:set_options([{proxy,{{"hogehoge.com", 80},["*.hogehoge.com"]}}]).

"プロキシを使用しないホストの指定"を省略するとリクエスト送付時にエラーになったのでご注意。