aocinit

Perl utility to initialize directories and files for the Advent of Code
git clone git://git.samirparikh.com/aocinit
Log | Files | Refs | README

commit 96d13f871076a65c6580ee6cf9f1e6aadb593a39
parent 6f5a2e4f85fc5cb2113a837bb63ea7d7f1c50eb5
Author: Samir Parikh <noreply@samirparikh.com>
Date:   Tue, 20 Dec 2022 16:00:58 +0000

get all initial functionaltiy working

Diffstat:
Maocinit | 59++++++++++++++++++++++++++++++++++++++++++++---------------
1 file changed, 44 insertions(+), 15 deletions(-)

diff --git a/aocinit b/aocinit @@ -16,13 +16,13 @@ use Mojo::UserAgent; my $AOC_FIRST_YEAR = 15; # first event was in 2015 my $HOME = File::HomeDir->my_home; +my $DOMAIN = 'adventofcode.com'; # # User-defined constants ##################################################### my $PATH_FROM_HOME = "programs"; my $DIR_PREFIX = "zaoc_20"; -# store your browser cookie session ID in the environment variable -# `SESSIONID`: +# store your browser cookie session ID in the environment variable `SESSIONID`: # $ export SESSIONID="8374....907d" ############################################################################## # @@ -52,7 +52,8 @@ sub create_year_directory { say "$year_directory already exists"; } else { say "creating $year_directory..."; - mkdir $year_directory, 0755 or die "Cannot create directory $year_directory: $!"; + mkdir $year_directory, 0755 or + die "Cannot create directory $year_directory: $!"; } } @@ -62,13 +63,13 @@ sub create_day_subdirectory { say "$day_subdir already exists."; } else { say "creating $day_subdir..."; - mkdir $day_subdir, 0755 or die "Cannot create directory $day_subdir: $!"; + mkdir $day_subdir, 0755 or + die "Cannot create directory $day_subdir: $!"; } } sub read_boilerplate { my ( $year, $day ) = @_; - say "received $year and $day"; ( my $boilerplate = qq[ #!/usr/local/bin/perl # day 20$year-$day @@ -86,24 +87,52 @@ sub read_boilerplate { sub create_boilerplate_file { my ( $day_file, $boilerplate ) = @_; + say "creating boilerplate file..."; open my $bp_file, '>', $day_file; say $bp_file $boilerplate; close $bp_file; } +sub download_input { + my ( $year, $day, $day_subdir ) = @_; + $day =~ s/^0//; # remove leading 0 + my $ua = Mojo::UserAgent->new; + my $url = "https://$DOMAIN/20$year/day/$day/input"; + $ua->cookie_jar->add( + Mojo::Cookie::Response->new( + name => 'session', + value => $ENV{SESSIONID}, + domain => $DOMAIN, + path => '/' + ) + ); + + my $res = $ua->get( $url )->result; + if ($res->is_success) { + say "downloading input file..."; + my $filename = catfile( $day_subdir, 'input' ); + open my $input_fh, '>', $filename; + say $input_fh $res->body; + close $input_fh; + } + elsif ($res->is_error) { + say "unable to dowload input file.\n", $res->message; + } + elsif ($res->code == 301) { + say "input file not found.\n", $res->headers->location; + } + else { + say 'unexpected error encountered while downloading input file.'; + } +} + my ( $year, $day ) = process_arguments( \@ARGV ); my $year_directory = "$HOME/$PATH_FROM_HOME/$DIR_PREFIX$year"; my $day_subdir = catfile( $year_directory, "day" . $day ); my $day_file = catfile( $day_subdir, "day". $day . ".pl" ); my $boilerplate = read_boilerplate( $year, $day ); -create_year_directory ( $year_directory ); -create_day_subdirectory( $day_subdir ); -create_boilerplate_file( $day_file, $boilerplate ); - -open my $secret_fh, '<', '/home/compiler/programs/aoc_download/secret'; -chomp( my $secret = <$secret_fh> ); -close $secret_fh; -say $secret; - -say $ENV{SESSIONID}; +create_year_directory ( $year_directory ); +create_day_subdirectory( $day_subdir ); +create_boilerplate_file( $day_file, $boilerplate ); +download_input ( $year, $day, $day_subdir );