aboutsummaryrefslogtreecommitdiff
path: root/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'aoc2023/build/packages/adglent/src/priv/aoc_client.gleam')
-rw-r--r--aoc2023/build/packages/adglent/src/priv/aoc_client.gleam37
1 files changed, 37 insertions, 0 deletions
diff --git a/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam
new file mode 100644
index 0000000..e18bafa
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam
@@ -0,0 +1,37 @@
+import gleam/result.{try}
+import gleam/httpc
+import gleam/http/request
+import gleam/int
+import gleam/string
+
+pub fn get_input(
+ year: String,
+ day: String,
+ session: String,
+) -> Result(String, String) {
+ let url = "https://adventofcode.com/" <> year <> "/day/" <> day <> "/input"
+ use request <- try(
+ request.to(url)
+ |> result.map_error(fn(error) {
+ "Could not create request for \"" <> url <> "\": " <> string.inspect(
+ error,
+ )
+ }),
+ )
+
+ // Send the HTTP request to the server
+ use response <- try(
+ request
+ |> request.prepend_header("Accept", "application/json")
+ |> request.prepend_header("Cookie", "session=" <> session <> ";")
+ |> httpc.send
+ |> result.map_error(fn(error) {
+ "Error when requesting \"" <> url <> "\": " <> string.inspect(error)
+ }),
+ )
+
+ case response.status {
+ status if status >= 200 && status < 300 -> Ok(response.body)
+ status -> Error(int.to_string(status) <> " - " <> response.body)
+ }
+}