1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
const std = @import("std");
pub fn main() !void {
std.debug.print("Downloading input from adventofcode.com\n", .{});
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
const args = try std.process.argsAlloc(allocator);
if (args.len != 3) return error.InvalidArguments;
const day = try std.fmt.parseInt(u32, args[1], 10);
const output_file_path = args[2];
var output_file = try std.fs.cwd().createFile(output_file_path, .{});
defer output_file.close();
const url = try std.fmt.allocPrint(allocator, "https://adventofcode.com/2024/day/{}/input", .{day});
defer allocator.free(url);
const session_cookie_header = try std.fmt.allocPrint(allocator, "session={s}", .{
std.posix.getenv("AOC_SESSION") orelse return error.MissingAocSession,
});
defer allocator.free(session_cookie_header);
var response = std.ArrayList(u8).init(allocator);
var client = std.http.Client{ .allocator = allocator };
const result = try client.fetch(.{
.location = .{ .url = url },
.response_storage = .{ .dynamic = &response },
.extra_headers = &[_]std.http.Header{
.{ .name = "Cookie", .value = session_cookie_header },
},
});
if (result.status != .ok) return error.InvalidStatusCode;
try output_file.writeAll(response.items);
return std.process.cleanExit();
}
|