Current section
Files
Jump to
Current section
Files
lib/bank/fio/transparent_account.ex
defmodule Banking.Fio.TransparentAccount do
@moduledoc """
FIO Banka - transparent account.
"""
@public_accounts_url "https://www.fio.cz/bankovni-sluzby/bankovni-ucty/transparentni-ucet/vypis-transparentnich-uctu"
@doc """
Fetch links to all transparent accounts.
## Examples
iex> Banking.Fio.TransparentAccount.fetch_all
[%{account: "2600088789",
link: "https://www.fio.cz/ib2/transparent?a=2600088789",
name: "A centrum - Váš průvodce těhotenstvím a rodičovstvím, o. p. s.",
url: "http://www.acentrum.eu/"},
%{account: "2800396030",
link: "https://www.fio.cz/ib2/transparent?a=2800396030",
name: "AA - anonymní alkoholici o.s.", url: nil},
%{account: "2801230649",
link: "https://www.fio.cz/ib2/transparent?a=2801230649", ...},
%{account: "2101191407", ...}, %{...}, ...]
"""
def fetch_all do
case HTTPoison.get(@public_accounts_url) do
{:ok, res} ->
last = Floki.find(:iconv.convert("windows-1250", "utf-8", res.body), "div.paginator a")
|> List.last
{_, href, childs} = last
{_, link} = List.first(href)
{last_offset, _} = Regex.run(~r/.*offset=(\d+)/, link)
|> List.last
|> Integer.parse
{last_page, _} = Floki.text(childs)
|> Integer.parse
per_page = round(last_offset / (last_page - 1))
1..(last_page)
|> Enum.map(fn(a) -> "https://www.fio.cz/bankovni-sluzby/bankovni-ucty/transparentni-ucet/vypis-transparentnich-uctu?offset=#{(a - 1) * per_page}" end)
|> Enum.map(&Banking.Fio.TransparentAccount.fetch/1)
|> List.flatten
_ -> []
end
end
@doc """
Fetch links to transparent accounts on specified page.
## Examples
iex> Banking.Fio.TransparentAccount.fetch("https://www.fio.cz/bankovni-sluzby/bankovni-ucty/transparentni-ucet/vypis-transparentnich-uctu")
[%{account: "2600088789",
link: "https://www.fio.cz/ib2/transparent?a=2600088789",
name: "A centrum - Váš průvodce těhotenstvím a rodičovstvím, o. p. s.",
url: "http://www.acentrum.eu/"},
%{account: "2800396030",
link: "https://www.fio.cz/ib2/transparent?a=2800396030",
name: "AA - anonymní alkoholici o.s.", url: nil},
%{account: "2801230649",
link: "https://www.fio.cz/ib2/transparent?a=2801230649", ...},
%{account: "2101191407", ...}, %{...}, ...]
"""
def fetch(url) do
case HTTPoison.get(url) do
{:ok, res} ->
Floki.find(:iconv.convert("windows-1250", "utf-8", res.body), "table.tbl2.tbl-sazby tbody tr")
|> Enum.map(fn({_, _, e}) ->
first = Enum.fetch!(e, 0)
url = Floki.find(first, "a")
|> Floki.attribute("href")
|> List.first
account = Floki.text(Enum.fetch!(e, 1))
%{
name: Floki.text(first),
account: account,
url: url,
link: "https://www.fio.cz/ib2/transparent?a=#{account}"
}
end)
_ -> []
end
end
end