#!/usr/bin/perl binmode STDOUT, ":utf8"; use warnings; use strict; use JSON; my $THREAD_NO; my $URL_PREFIX; my $FN; my $OUT_DIR; my %jh; my @a1; $URL_PREFIX = "https://lainchan.org/lit/src/"; $THREAD_NO = 4953; $FN = "$THREAD_NO.json"; $OUT_DIR = "./dl/"; # Read JSON with list of files open FILE, "<", $FN or die "could not open file"; do{ my $json_str; local $/=undef; $json_str = ; chomp $json_str; %jh = %{JSON->new()->decode($json_str)}; }; close FILE; # anonymous function that returns a list # of tuples of the below form: # (file_name, file_url) @a1 = sub{ my @a0; my @a2; my $f1; # filters for file types we # dont want to downloads sub f1 { return $_[0]->{"ext"} && !($_[0]->{"ext"} =~ /jpe?g/); } sub f2 { return !($_[0]->{"ext"} =~ /png/); } sub f3 { return !($_[0]->{"ext"} =~ /gif/); } sub f4 { return !($_[0]->{"ext"} =~ /webm/); } sub f0 { return f1($_[0]) && f2($_[0]) && f3($_[0]) && f4($_[0]) } # create an array of files # that meet our file ext requirement @a0 = grep {f0($_)} @{$jh{"posts"}}; # do the same filter on the # extra_files attribute @a2 = grep { f0($_) } map { @{$_->{"extra_files"}} } grep { $_->{"extra_files"} } @{$jh{"posts"}}; # Return our tuple return map { [ sprintf("%s%s", $_->{"filename"}, $_->{"ext"}), # file_name sprintf("%s%s%s", $URL_PREFIX, $_->{"tim"}, $_->{"ext"}) # file_url ] } (@a0, @a2); }->(); # Print a list of wget commands from our tuples for my $i1 (@a1){ printf("wget -N %s -O '%s%s'\n", scalar $i1->[1], $OUT_DIR, scalar $i1->[0]); }