defmodule WykopAPI do @moduledoc """ """ @doc false def get_api_url, do: "http://a.wykop.pl/" @doc """ Returns map as formatted string `"key1,val1,key2,map2"`. Keys have to be ordered alfabetically. """ def param_api(map \\ %{}) do Map.merge(%{appkey: get_app_key}, map) |> Enum.reduce("", fn {k,v}, acc -> acc <> ",#{Atom.to_string k},#{v}" end) |> String.lstrip(?,) end def get!(url) do HTTPoison.get!(url, [{"apisign", sign(url)}]) |> Map.get(:body) end def sign(url, post \\ "") do md5(get_secret <> url <> post) end def sign(app_key, login, token) do md5(get_secret <> app_key <> login <> token) end def get_secret do conf = Application.get_env :wykop_api, :app conf[:secret] end def get_app_key do conf = Application.get_env :wykop_api, :app conf[:app_key] end defp md5(s) do :crypto.hash(:md5, s) |> :erlang.bitstring_to_list |> Enum.map(&(:io_lib.format("~2.16.0b", [&1]))) |> List.flatten |> :erlang.list_to_bitstring end end