Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

 | 

2008-12-18 (木)

HTTP GETで取ってきてファイルに書く

| 14:46

http://d.hatena.ne.jp/m-hiyama/20080917/1221612241 で、JavaHTTP GETするジャンクプログラムを書いたけど、同じようなものをErlangで。

%% -*- coding: utf-8 -*-

%% @doc inetsを利用した便利機能群.
%% 今のところ「群」じゃないけどね ^^;
-module(inets_util).

-export([http_dump/2, http_dump/1]).

%% @type request_error() = term().
%% http:request/* が発生させるエラー.

%% @type file_error() = term().
%% file:*/* が発生させるエラー.

%% @type io_error() = term().
%% io:*/* が発生させるエラー.

%% @doc HTTP GET により取得したリソースをファイルに書き出す.
%% @spec (string(), string()) -> ok
%% @throws (request_error() | file_error() | io_error())
http_dump(URL, Filename) ->
  % confirm intes
  case whereis(inets_sup) of
    undefined ->
      inets:start();
    _ ->
      ok
  end,
  % do request
  case http:request(URL) of
    {ok, Data} ->
      write_data(Filename, Data);
    {error, Reason} ->
      throw(Reason)
  end.

%% @spec (string(), any()) -> ok
%% @throws (file_error() | io_error())
write_data(Filename, Data) ->
  {Status, Headers, Body} = Data,
  case file:open(Filename, [write]) of
    {ok, Dev} ->
      % io:fwrie/3 はokしか返さない.
      io:fwrite(Dev, "~p~n", [Status]),
      io:fwrite(Dev, "~p~n~n", [Headers]),
      io:fwrite(Dev, "~s", [Body]),
      file:close(Dev); % {error, Reason}を返すが、今回は無視
    {error, Reason} ->
      throw(Reason)
  end.

%% @equiv http_dump(URL, "http.dump")
%% @spec (string()) -> ok
%% @throws (request_error() | file_error() | io_error())
http_dump(URL) ->
  http_dump(URL, "http.dump").

RasadRasad2012/02/09 19:39So much info in so few words. Tosotly could learn a lot.

fttosrpfqrfttosrpfqr2012/02/09 22:04xtmx4I <a href="http://dcwmuvowvxrk.com/">dcwmuvowvxrk</a>

qbwziqzqbwziqz2012/02/11 03:45EuHBqE , [url=http://vmxmmwylocyl.com/]vmxmmwylocyl[/url], [link=http://ewgoxruwespg.com/]ewgoxruwespg[/link], http://oyqkypsxrner.com/

zygmbyzygmby2012/02/12 23:23Gr6C5f <a href="http://foeilrknewxy.com/">foeilrknewxy</a>

iigwhkksnsiigwhkksns2012/02/14 01:05eCy3ac , [url=http://boynrsvpwqyg.com/]boynrsvpwqyg[/url], [link=http://dbgndaxgwozh.com/]dbgndaxgwozh[/link], http://pqhcxmcmdrlj.com/

 |