Current section
Files
Jump to
Current section
Files
lib/aoc_helpers.ex
defmodule AocHelpers do
@moduledoc """
Documentation for `AocHelpers`.
"""
@doc """
Returns the input given the year and day
"""
@spec get_input(year :: number(), day :: number(), cookie :: String.t()) :: String.t()
def get_input(year, day, cookie \\ nil) do
get_input_request(year, day, cookie)
|> Map.get(:body)
end
@doc """
Returns the input HTTPoison request given the year and day
"""
@spec get_input_request(year :: number(), day :: number, cookie :: String.t()) ::
HTTPoison.Response.t()
def get_input_request(year, day, cookie \\ nil) do
{:ok, {{_protocol, 200, 'OK'}, headers, body}} =
:httpc.request(
:get,
{'https://adventofcode.com/#{year}/day/#{day}/input',
build_cookie(cookie)},
[],
[]
)
%{
headers: parse_headers(headers),
body: to_string(body)
}
end
defp parse_headers(headers, parsed \\ %{})
defp parse_headers([], parsed), do: parsed
defp parse_headers([{key, value} | rest], parsed) do
parse_headers(rest, Map.put(parsed, to_string(key), to_string(value)))
end
defp build_cookie(nil), do: System.fetch_env!("AOC_COOKIE") |> build_cookie()
defp build_cookie(cookie), do: [{'cookie', String.to_charlist("session=" <> cookie)}]
end