projects
/
Biblio-Z3950.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
allocate session just once
[Biblio-Z3950.git]
/
Aleph.pm
diff --git
a/Aleph.pm
b/Aleph.pm
index
d478aae
..
6a3cf3c
100644
(file)
--- a/
Aleph.pm
+++ b/
Aleph.pm
@@
-59,13
+59,16
@@
sub usemap {{
# 1016 => '',
}};
# 1016 => '',
}};
+our $session_id;
sub search {
my ( $self, $query ) = @_;
die "need query" unless defined $query;
sub search {
my ( $self, $query ) = @_;
die "need query" unless defined $query;
- my $url = 'http://161.53.240.197:8991/F?RN=' . rand(1000000000);
+ $session_id ||= int rand(1000000000);
+ # FIXME allocate session just once
+ my $url = 'http://161.53.240.197:8991/F?RN=' . $session_id;
# fake JavaScript code on page which creates random session
diag "get $url";
# fake JavaScript code on page which creates random session
diag "get $url";
@@
-77,11
+80,14
@@
diag "advanced search";
$mech->follow_link( url_regex => qr/find-c/ );
$mech->follow_link( url_regex => qr/find-c/ );
-diag "submit search $query";
+diag "submit search [$query] on ", $self->{database};
+
+ $self->save_content;
$mech->submit_form(
fields => {
'ccl_term' => $query,
$mech->submit_form(
fields => {
'ccl_term' => $query,
+ 'local_base' => $self->{database},
},
);
},
);
@@
-131,19
+137,37
@@
warn "parse $nr";
sub field {
my ( $f, $v ) = @_;
$v =~ s/\Q \E/ /gs;
sub field {
my ( $f, $v ) = @_;
$v =~ s/\Q \E/ /gs;
-
#
warn "## $f\t$v\n";
+warn "## $f\t$v\n";
$hash->{$f} = $v;
$hash->{$f} = $v;
+
+ if ( $f eq 'LDR' ) {
+ $marc->leader( $v );
+ return;
+ }
+
+ if ( $f =~ m/\D/ ) {
+ warn "$f not numeric!";
+ return;
+ }
+
+ if ( $v !~ s/^\|// ) { # no subfields
+ $marc->add_fields( $f, $v );
+warn "## ++ ", dump( $f, $v );
+ return;
+ }
+
my ($i1,$i2) = (' ',' ');
($i1,$i2) = ($2,$3) if $f =~ s/^(...)(.)?(.)?/$1/;
my @sf = split(/\|/, $v);
my ($i1,$i2) = (' ',' ');
($i1,$i2) = ($2,$3) if $f =~ s/^(...)(.)?(.)?/$1/;
my @sf = split(/\|/, $v);
- shift @sf;
@sf = map { s/^(\w)\s+//; { $1 => $_ } } @sf;
#warn "## sf = ", dump(@sf);
@sf = map { s/^(\w)\s+//; { $1 => $_ } } @sf;
#warn "## sf = ", dump(@sf);
- $marc->add_fields( $f, $i1, $i2, @sf ) if $f =~ m/^\d+$/;
+ $marc->add_fields( $f, $i1, $i2, @sf );
+warn "## ++ ", dump( $f, $i1, $i2, @sf );
}
$html =~ s|<tr>\s*<td class=td1 id=bold[^>]*>(.+?)</td>\s*<td class=td1>(.+?)</td>|field($1,$2)|ges;
}
$html =~ s|<tr>\s*<td class=td1 id=bold[^>]*>(.+?)</td>\s*<td class=td1>(.+?)</td>|field($1,$2)|ges;
-# diag "# hash ",dump($hash);
+ diag "# hash ",dump($hash);
+ diag "# marc ", $marc->as_formatted;
my $id = $hash->{SYS} || die "no SYS";
my $id = $hash->{SYS} || die "no SYS";