X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=get_sgf;h=f978b81ed5c4a1321158bb88df40a98b58e37ab1;hb=dcce90e77c92202b5fadca48de6fd1cefc41ff79;hp=a33eddfd1ecad6ab75f955868dfea023ce8d840e;hpb=a4903066dd40675c65e20b4f57343bf6ce599bc2;p=bin.git diff --git a/get_sgf b/get_sgf index a33eddf..f978b81 100755 --- a/get_sgf +++ b/get_sgf @@ -63,12 +63,26 @@ Display this manual. use vars qw($DEBUG); +use IO::File; +use WWW::Mechanize; +use File::Temp qw(tempdir); +use Cwd; +use URI; + my %options = (debug => 0, help => 0, man => 0, - ); - -GetOptions(\%options,'debug|d+','help|h|?','man|m'); + figures => '%100', + mode => 'ps', + paper => 'letter', + scale => '420', + ); + +GetOptions(\%options, + 'figures=s','mode=s','extra=s', + 'username=s','password=s', + 'paper=s','scale=s', + 'debug|d+','help|h|?','man|m'); pod2usage() if $options{help}; pod2usage({verbose=>2}) if $options{man}; @@ -76,6 +90,63 @@ pod2usage({verbose=>2}) if $options{man}; $DEBUG = $options{debug}; - +if (-r "$ENV{HOME}/.get_sgf") { + my $sgf_fh = IO::File->new("$ENV{HOME}/.get_sgf") or + die "Unable to open .get_sgf for reading"; + local $/; + my $sgf_file = <$sgf_fh>; + ($options{username},$options{password}) = $sgf_file =~ /^(\w+)\:(\w+)$/; + close $sgf_fh; +} + +my $olddir = getcwd(); + +#my $tmpdir = tempdir(CLEANUP=>1); +#chdir($tmpdir); + +# /games/japan/titles/kisei/31/game-01.sgf + + +my $m = WWW::Mechanize->new(); +$m->credentials($options{username},$options{password}); +my $base = 'http://gobase.org/online/sgf2misc/?fname=/games/japan/titles/kisei/31/game-01.sgf'; +for my $url (@ARGV) { + # strip of leading stuff + $url =~ s/[^=]+=//; + $url =~ s{(?:http://)?(?:gobase\.org)?}{}; + $url = qq(/$url) unless $url =~ m{^/}; + my $fname = $url; + my $uri = URI->new($base); + $uri->query_form(mode => $options{mode}, + fname => $fname, + ); + $m->get("http://gobase.org$fname"); + $m->save_content('temp.sgf'); + $m->get($uri->as_string); + $m->follow_link(text_regex=>qr/PostScript/); + $m->form_number(2); + $m->select('scale',$options{scale}); + $m->field('fig',$options{figures}); + $m->select('paper',$options{paper}); + $m->submit(); + my $content; + my $state; + my $sleep; + VALID_LOOP: { + do { + $state = $m->clone; + $m->follow_link(url_regex=>qr/\.ps\.gz/); + if ($m->content =~ /^\%\!PS/){ + $m->save_content('temp.ps'); + last VALID_LOOP; + } + $sleep = 240+int(rand()*120); + print STDERR "Failure to download content, waiting $sleep seconds\n"; + $m = $state; + } while (sleep $sleep); + } + system('gzip','temp.ps'); + system("$ENV{HOME}/bin/sgf_rename",'temp.sgf'); +} __END__