5 use Mojo::Base -signatures;
8 use Mojo::Util qw(dumper);
9 use Y::AoC qw(white red grey);
11 our $user_agent = 'kas@yenya.net https://www.fi.muni.cz/~kas/git/aoc.git';
12 our $cache_dir = '/home/kas/aoc/cache';
15 sub request($url, $args) {
16 chomp($cookie //= Mojo::File->new("$cache_dir/cookie")->slurp);
18 my ($cache, $cachefile);
19 if ($args->{cache_to}) {
20 $cachefile = $cache_dir . '/' . $args->{cache_to};
21 $cache = Mojo::File->new("$cachefile");
23 if (defined $args->{max_age}) {
26 && time - $cache->stat->mtime
32 " response from $cachefile";
35 : Mojo::DOM->new($cache->slurp);
42 'User-Agent' => $user_agent,
44 my $ua = Mojo::UserAgent->new;
46 $res = $ua->post($url => \%hdrs => form => $args->{form})
49 $res = $ua->get($url => \%hdrs)->result;
52 if (!$res->is_success) {
53 say "$url\n", dumper \%hdrs;
55 say $res->headers->to_string;
56 say "body:\n", $res->body;
57 die red("http request failed");
61 $cache->spew($res->body);
62 # say "Stored response to $cachefile";
64 return $args->{body} ? $res->body : $res->dom;
67 sub cache_del($file) {
68 my $f = Mojo::File->new("$cache_dir/$file");
70 $f->move_to("$cache_dir/old-$file");
73 sub is_cached($file) { Mojo::File->new("$cache_dir/$file")->stat; }
79 sub new($class, $year, $day) {