I am trying to use HTTPoison to get some data from an API, but I’m getting an error which I’m not able to resolve. My project currently looks like this:
defmodule EnergyZeroViewer do
def execute do
data = get_data()
table = create_table(data)
IO.puts(table)
end
defp get_data do
# https://api.energyzero.nl/v1/energyprices
# ?fromDate=2023-01-25T23%3A00%3A00.000Z
# &tillDate=2023-01-26T22%3A59%3A59.999Z
# &interval=4
# &usageType=1
# &inclBtw=true
fromDate = DateTime.new!(Date.utc_today(), ~T[00:00:00], "Etc/UTC") |> DateTime.to_iso8601()
tillDate = DateTime.new!(Date.utc_today(), ~T[23:59:59], "Etc/UTC") |> DateTime.to_iso8601()
default_parameters = %{
fromDate: fromDate,
tillDate: tillDate,
interval: 4,
usageType: 1,
inclBtw: true
}
energy_url = "https://api.energyzero.nl/v1/energyprices"
result = HTTPoison.get!(energy_url, [], params: default_parameters)
JSON.decode!(result.body)
end
defp create_table(energy_data) do
{:ok, fromDate, _} = Map.get(energy_data, "fromDate") |> DateTime.from_iso8601()
title = "#{Calendar.strftime(fromDate, "%d %B %Y")}"
header = ["price", "time"]
data = Map.get(energy_data, "Prices")
rows =
Enum.map(data, fn data_point ->
price = Map.get(data_point, "price")
{:ok, time, _} = Map.get(data_point, "readingDate") |> DateTime.from_iso8601()
[
time.hour,
price |> Float.round(2)
]
end)
TableRex.quick_render!(rows, header, title)
end
end
EnergyZeroViewer.execute()
The EnergyZeroViewer.execute()
call outside the module is giving me the following error:
== Compilation error in file lib/energy_zero_viewer.ex ==
** (ArgumentError) errors were found at the given arguments:
* 1st argument: the table identifier does not refer to an existing ETS table
(stdlib 4.2) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
(hackney 1.18.1) /home/sylvester/Code/ElixirProjects/energy_zero_viewer/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0
(hackney 1.18.1) /home/sylvester/Code/ElixirProjects/energy_zero_viewer/deps/hackney/src/hackney_connect.erl:75: :hackney_connect.create_connection/5
(hackney 1.18.1) /home/sylvester/Code/ElixirProjects/energy_zero_viewer/deps/hackney/src/hackney_connect.erl:44: :hackney_connect.connect/5
(hackney 1.18.1) /home/sylvester/Code/ElixirProjects/energy_zero_viewer/deps/hackney/src/hackney.erl:335: :hackney.request/5
(httpoison 1.8.2) lib/httpoison/base.ex:846: HTTPoison.Base.request/6
(httpoison 1.8.2) lib/httpoison.ex:258: HTTPoison.request!/5
lib/energy_zero_viewer.ex:29: EnergyZeroViewer.get_data/0
However, when I run this function manually in IEX it works without any errors. What am I doing wrong here?