Packages

This package is used for learning purposes on how to use 'mix' and 'hex' for sharing elixir code. Do NOT waste your time here. The License is MIT, but the project uses a private api.

Current section

Files

Jump to
cape lib Arpas REST Esri Api.ex
Raw

lib/Arpas/REST/Esri/Api.ex

defmodule Arpas.REST.Esri.Api do
@moduledoc ~S'''
Utilita per accedere ad AGOL(Arcgis online) tramite api rest
'''
alias Arpas.REST.Esri.Env
alias Cape.Generico, as: Gen
def users do
[:no_token, :alai, :idro]
end
@doc """
Restituisce token per accedere ad AGOL
:idro
:alai
"""
def token(:idro), do: token(Env.id_idro(), Env.secret_idro())
def token(:alai), do: token(Env.id(), Env.secret())
def token(), do: token(:idro)
def token(id, secret) do
url = Env.token_url()
expiration = "21600"
payload =
"client_id=#{id}&client_secret=#{secret}&grant_type=client_credentials&expiration=#{expiration}"
case Gen.post(url, payload) do
{:error, reason} ->
IO.inspect(reason)
{:error, reason}
my_token ->
IO.inspect(my_token, label: "my_token")
adesso = DateTime.now!("Etc/UTC")
finisce = my_token["expires_in"]
IO.puts(finisce)
scadenza = DateTime.add(adesso, finisce, :second)
my_token = Map.put(my_token, "log_now", adesso)
Map.put(my_token, "scade", scadenza)
end
end
def get_access_token(log_as \\ :idro) do
token(log_as)
|> Map.get("access_token")
end
def add_token(log_as) do
case log_as do
:no_token ->
""
_user ->
user_token = get_access_token(log_as)
"token=#{user_token}"
end
end
def query_all(log_as \\ :no_token) do
access = add_token(log_as)
"/query?where=1=1&outfields=*&f=json&#{access}"
end
def query_feature_info(log_as \\ :no_token, url) do
access = add_token(log_as)
url = url <> "?f=json&#{access}"
IO.inspect(url, label: "url")
Gen.get(url)
end
def layers(log_as \\ :idro, url \\ Env.services()) do
access = get_access_token(log_as)
url = url <> "?token=#{access}&f=json"
IO.inspect(url, label: "url")
Gen.get(url)
end
def terzo do
{:ok, res} = layers()
servizi = Map.get(res, "services")
tl(servizi) |> tl |> hd
end
end