defmodule ElixCodigosBancos do @moduledoc """ `ElixCodigosBancos` is a lib that helps you to get brazilian's offset codes. """ require Logger alias ElixCodigosBancos.Banco @doc """ Busca as informacoes do banco de acordo com o codigo """ def get_banco_by_codigo(codigo) when is_bitstring(codigo) do case HTTPoison.get( "https://www.codigobanco.com/", %{"User-Agent" => "elixcodigosbancos/1.0.1"} ) do {:ok, %{body: raw_body, status_code: _code}} -> html = raw_body {:ok, document} = Floki.parse_document(html) banco = document |> Floki.find("tbody") |> Floki.find("tr") |> Enum.map(fn {_chave, _valor1, valor2} -> %Banco{ codigo: Enum.at(valor2, 0) |> Floki.text(), nome: Enum.at(valor2, 1) |> Floki.text(), site: Enum.at(valor2, 2) |> Floki.text() } end) |> Enum.filter(fn x -> x.codigo == codigo end) banco {:error, %HTTPoison.Error{reason: reason}} -> Logger.error(inspect(reason)) end end @doc """ Busca todos os bancos """ def get_bancos() do case HTTPoison.get( "https://www.codigobanco.com/", %{"User-Agent" => "elixcodigosbancos/1.0.1"} ) do {:ok, %{body: raw_body, status_code: _code}} -> html = raw_body {:ok, document} = Floki.parse_document(html) bancos = document |> Floki.find("tbody") |> Floki.find("tr") |> Enum.map(fn {_chave, _valor1, valor2} -> %Banco{ codigo: Enum.at(valor2, 0) |> Floki.text(), nome: Enum.at(valor2, 1) |> Floki.text(), site: Enum.at(valor2, 2) |> Floki.text() } end) bancos {:error, %HTTPoison.Error{reason: reason}} -> Logger.error(inspect(reason)) end end @doc """ Busca as informacoes do banco de acordo com o nome. Os nomes sao case sensitives """ def get_banco_by_nome(nome) when is_bitstring(nome) do case HTTPoison.get( "https://www.codigobanco.com/", %{"User-Agent" => "elixcodigosbancos/1.0.1"} ) do {:ok, %{body: raw_body, status_code: _code}} -> html = raw_body {:ok, document} = Floki.parse_document(html) banco = document |> Floki.find("tbody") |> Floki.find("tr") |> Enum.map(fn {_chave, _valor1, valor2} -> %Banco{ nome: Enum.at(valor2, 1) |> Floki.text(), codigo: Enum.at(valor2, 0) |> Floki.text(), site: Enum.at(valor2, 2) |> Floki.text() } end) |> Enum.filter(fn x -> String.contains?(x.nome, nome) end) banco {:error, %HTTPoison.Error{reason: reason}} -> Logger.error(inspect(reason)) end end end