--- trunk/bin/isi-download-results.pl 2010/04/18 11:04:49 1332 +++ trunk/bin/isi-download-results.pl 2010/06/05 15:49:59 1335 @@ -12,24 +12,24 @@ # http://images.isiknowledge.com/WOK46/help/WOS/h_advanced_examples.html our $q = 'AD=Croatia'; +$q = 'CA=BRATKO, D'; + my $range_size = 500; my $overlap = 3; # between previous and this range -my $skip_results = 0; + +my $results = 0; +my $citations = 0; + my $cites_by_year = 0; my $max_cites = 5000; # ISI limit to get cites -if ( 0 ) { - $q = 'TS=psychology AND AD=Croatia'; - $range_size = 50; - $overlap = 0; - $max_cites = 50; -} - $q = unac_string( 'utf-8', join(' ', @ARGV) ) if @ARGV; +warn "QUERY: $q\n"; + our $mech = WWW::Mechanize->new( - autocheck => 1, + autocheck => 0, # it dies in reference download with it! cookie_jar => undef, ); @@ -211,21 +211,78 @@ return $years; } -search; -years; -get_results unless $skip_results; +if ( $results ) { + search; + years; + get_results; +} +if ( $citations ) { -citations; + citations; + years unless @ranges; -do { - my $part; - if ( @ranges ) { - $part .= $ranges[0]->[0] . '.'; - search; - citations; - } - $part .= 'citing'; - get_results $part; -} while ( @ranges ); + do { + my $part; + if ( @ranges ) { + $part .= $ranges[0]->[0] . '.'; + search; + citations; + } + $part .= 'citing'; + get_results $part; + } while ( @ranges ); + +} + +if ( $q =~ m{CA=(.+)} ) { + + my $CA = $1; + + warn "# citated reference search"; + $mech->follow_link( url_regex => qr/CitedReferenceSearch/ ); + save_mech; + + + $mech->submit_form( + form_name => 'WOS_CitedReferenceSearch_input_form', + fields => { + 'value(input1)' => $CA, + }, + ); + + my $page = 1; + my $records = $1 if $mech->content =~ m/(\d+)\s+records/; + warn "# found $records records\n"; + my $last_span = 'fake'; + + while (1) { + save_mech "/tmp/isi.$q.citedref.$page"; + + $page++; + + $mech->submit_form( + form_name => 'summary_navigation', + fields => { + 'page' => $page, + }, + ); + + $mech->form_name( 'summary_navigation' ); + last if $mech->value('page') < $page; + + if ( $mech->content =~ m/(\d+\s*-\s*(\d+))/ ) { + warn "span: $1\n"; + last if $2 == $records; + last if $1 == $last_span; + $last_span = $1; + } elsif ( $page > 5 ) { + warn "ARTIFICALLY LIMITED TO 5 PAGES WITHOUT VALID SPAN!"; + last; + } + + } + +} +warn "OVER\n";