Current section
Files
Jump to
Current section
Files
lib/overpass_api.ex
defmodule Overpass.API do
require Logger
@url Application.get_env(:overpass, :url)
@doc """
Querys the OverpassAPI with the given query (xml or overpass ql).
Returns a tuple `{:ok, {:xml, body}}` or `{:ok, {:json, body}}` on success or `{:error, error}` on error.
"""
def query(query) do
Logger.debug("Query: #{query}")
HTTPoison.post(@url, query)
|> process_response
end
defp process_response({:ok, %HTTPoison.Response{status_code: 200, body: body, headers: headers}}) do
Logger.debug("status_code: 200")
%{"Content-Type" => content_type} = Enum.into(headers, %{})
case content_type do
"application/osm3s+xml" -> {:ok, {:xml, body}}
"application/json" -> {:ok, {:json, body}}
_ -> {:error, "Unsuported Content-Type"}
end
end
defp process_response({:ok, %HTTPoison.Response{status_code: code, body: _body, headers: _headers}}) do
Logger.error("status_code: #{code}")
{:error, "status_code: #{code}"}
end
defp process_response({:error, error}) do
Logger.error(error)
{:error, error}
end
end