]> www.fi.muni.cz Git - aoc.git/blob - lib/Y/AoC/UA.pm
Day 25: shortened version
[aoc.git] / lib / Y / AoC / UA.pm
1 package Y::AoC::UA;
2
3 use v5.36;
4
5 use Mojo::Base -signatures;
6 use Mojo::UserAgent;
7 use Mojo::DOM;
8 use Mojo::Util qw(dumper);
9 use Y::AoC qw(white red grey);
10
11 our $user_agent = 'kas@yenya.net https://www.fi.muni.cz/~kas/git/aoc.git';
12 our $cache_dir = '/home/kas/aoc/cache';
13 our $cookie;
14
15 sub request($url, $args) {
16         chomp($cookie //= Mojo::File->new("$cache_dir/cookie")->slurp);
17
18         my ($cache, $cachefile);
19         if ($args->{cache_to}) {
20                 $cachefile = $cache_dir . '/' . $args->{cache_to};
21                 $cache = Mojo::File->new("$cachefile");
22
23                 if (defined $args->{max_age}) {
24                         $cache->remove
25                                 if $cache->stat
26                                 && time - $cache->stat->mtime
27                                         > $args->{max_age};
28                 }
29
30                 if ($cache->stat) {
31                         say grey('cached'),
32                                 " response from $cachefile";
33                         return $args->{body}
34                                 ? $cache->slurp
35                                 : Mojo::DOM->new($cache->slurp);
36                 }
37         }
38
39         my $res;
40         my %hdrs = (
41                 Cookie       => $cookie,
42                 'User-Agent' => $user_agent,
43         );
44         my $ua = Mojo::UserAgent->new;
45         if ($args->{form}) {
46                 $res = $ua->post($url => \%hdrs => form => $args->{form})
47                         ->result;
48         } else {
49                 $res = $ua->get($url => \%hdrs)->result;
50         }
51
52         if (!$res->is_success) {
53                 say "$url\n", dumper \%hdrs;
54                 say $res->message;
55                 say $res->headers->to_string;
56                 say "body:\n",  $res->body;
57                 die red("http request failed");
58         }
59
60         if ($cache) {
61                 $cache->spew($res->body);
62                 # say "Stored response to $cachefile";
63         }
64         return $args->{body} ? $res->body : $res->dom;
65 }
66
67 sub cache_del($file) {
68         my $f = Mojo::File->new("$cache_dir/$file");
69         return if !$f->stat;
70         $f->move_to("$cache_dir/old-$file");
71 }
72
73 sub is_cached($file) { Mojo::File->new("$cache_dir/$file")->stat; }
74
75 1;
76 __END__
77 package Y::AoC::UA;
78
79 sub new($class, $year, $day) {
80         eval 'require
81 }
82
83 sub get($ua) {
84 1;