Current section

Files

Jump to
wykop_api lib wykop_api.ex
Raw

lib/wykop_api.ex

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