Packages

Real time conversion for currencies

Current section

Files

Jump to
xe lib xe.ex
Raw

lib/xe.ex

defmodule Xe do
def fetch({from, to}) do
url(from, to)
|> HTTPoison.get
|> handle_response
end
def url(from, to) do
"http://www.xe.com/currencyconverter/convert/?From=#{from}&To=#{to}"
end
def handle_response({:ok, %HTTPoison.Response{status_code: 200, body: body}}) do
body
|> Floki.find(".uccRes")
|> parse_res
end
def parse_res([head, _ | tail]), do: {:error, [nil, nil]}
def parse_res([head | []]) do
case head do
{"tr", _, tds} -> {:ok, fetch_values(tds) }
_ -> {:error, [nil, nil]}
end
end
def fetch_values(tds) do
tds
|> Enum.map(&fetch_value_from_td(&1))
|> Enum.reject(fn(x) -> is_nil(x) end)
end
def fetch_value_from_td(td) do
case td do
{"td", _, ["="]} -> nil
{"td", _, values} -> List.first(values)
end
end
end