use MARC::Record;
use Data::Dump qw/dump/;
use DBI;
+use utf8;
use base 'Scraper';
my $dbname = 'bibliografija';
-my $dbh = DBI->connect("dbi:Pg:dbname=$dbname", '', '', {AutoCommit => 0});
-
sub search {
my ( $self, $query ) = @_;
+ utf8::decode( $query );
+ warn "QUERY",dump( $query );
+
die "need query" unless defined $query;
my $tsquery = join(' & ', split(/\s+/,$query) );
+ my $table = lc $self->{database};
+ $table =~ s/^crosbi-//g;
+
my $sql = qq{
select *
-from casopis
+from $table
inner join rad_ustanova using (id)
left outer join rad_napomena using (id)
left outer join rad_projekt using (id)
left outer join rad_godina using (id)
-where sifra = ? and (
+left outer join rad_podrucje using (id)
+left outer join url using (id)
+where rad_ustanova.sifra = ? and (
fti_au @@ to_tsquery(?)
or fti_pr @@ to_tsquery(?)
)
};
- my $sth = $dbh->prepare( $sql );
+ my $dbh = DBI->connect_cached("dbi:Pg:dbname=$dbname", '', '', {AutoCommit => 0});
warn "XXX SQL = ",$sql;
-#-- and naslov like ?
+ my $sth = $dbh->prepare( $sql );
$sth->execute(
130, # FIXME ustanova
my $id = $row->{id} || die "no id";
my $marc = MARC::Record->new;
- $marc->encoding('utf-8');
+ $marc->encoding('UTF-8');
my $leader = $marc->leader;
+# /srv/webpac2/conf/crosbi/2016-12-12/casopis-dbi2marc.pl
+
## LDR 05 - n - new
## LDR 06 - a - language material
## LDR 07 - a - monographic component part
- $leader =~ s/^(....).../$1naa/;
+ $leader =~ s/^(....)...(.+)/$1naa$2/;
## LDR 17 - Encoding level ; 7 - minimal level, u - unknown
## LDR 18 - i = isbd ; u = unknown
- $leader =~ s/^(.{17})/$1uu/;
+ $leader =~ s/^(.{17})..(.+)/$1uu$2/;
$marc->leader( $leader );
warn "# leader [$leader]";
$marc->add_fields('008', $f008); # FIXME - mglavica check
-# /srv/webpac2/conf/crosbi/2016-12-12/casopis-dbi2marc.pl
+
+ if ( my $doi = $row->{doi} ) {
+
+ $marc->add_fields('024','7',' ',
+ 2 => 'doi',
+ a => $doi,
+ );
+
+ }
+
+### 035$
+
+## marc 035a - System Number
+## polje moze sadrzavati slova i razmake
+## moguc problem u pretrazivanju ako ima zagrade, kako bi trebalo po standardu
+
+ $marc->add_fields('035',' ',' ',
+ a => join('', '(CROSBI)', $row->{id})
+ );
+
+### 040
+## za sve je isti
+
+ $marc->add_fields('040',' ',' ',
+ 'a' => 'HR-ZaFF',
+ 'b' => 'hrv',
+ 'c' => 'HR-ZaFF',
+ 'e' => 'ppiak'
+ );
+
+### 041 - indikatori
+# i1=0 - Item not a translation/does not include a translation
+# i1=1 - Item is or includes a translation
+# i1=' ' - No information provided
+
+### 041
+# ponovljivo potpolje (041a) - marc_repeatable_subfield
+# koristi se kad ima vise od jednog jezika, ili kad se radi o prijevodu
+
+ $marc->add_fields('041',' ',' ', map {
+ ( a => lc($_) )
+ } split(/-/, $row->{jezik}));
+
+
+### 080
+### 245 indikatori
+## i1 = 0 zza anonimne publikacije, i1 = 1 ako postoji 700 ili 710
+## i2 = pretpostavlja se na temelju clana na pocetku naslova i jezika
my ( $first_author, $authors ) = split(/ ;\s*/,$row->{autori});
'a' => $row->{title}
);
+ sub page_range {
+ my ( $prefix, $from, $to ) = @_;
+ my $out;
+ if ( $from ) {
+ $out = $prefix . $from;
+ $out .= '-' . $to if $to;
+ }
+ return $out;
+ }
+
$marc->add_fields(300,' ',' ',
- a => join(' ', $row->{stranica_prva}, $row->{stranica_zadnja}),
+ a => page_range('',$row->{stranica_prva},$row->{stranica_zadnja}),
f => 'str.'
);
a => substr($row->{sazetak}, 0, 9999)
);
+
+ if ( $row->{rad_projekt} ) {
+ $marc->add_fields(536,' ',' ',
+ a => 'Projekt MZOS',
+ f => 'projekt',
+ );
+ }
+
+ $marc->add_fields(546,' ',' ',
+ a => $row->{jezik}
+ );
+
+ $marc->add_fields(690,' ',' ',
+ a => $row->{sifra}
+ );
+
+
+ $marc->add_fields(693,' ',' ',
+ a => $row->{kljucne_rijeci},
+ 1 => 'hrv',
+ 2 => 'crosbi',
+ );
+ $marc->add_fields(693,' ',' ',
+ a => $row->{key_words},
+ 1 => 'eng',
+ 2 => 'crosbi',
+ );
+
+ if ( $row->{autori} =~ m/ ; / ) {
+ my @a = split(/ ; /, $row->{autori});
+ shift @a; # skip first
+ $marc->add_fields(700,'1',' ',
+ a => $_,
+ 4 => 'aut'
+ ) foreach @a;
+ }
+
+ $marc->add_fields(773,'0',' ',
+ t => $row->{casopis},
+ x => $row->{issn},
+ g => "$row->{volumen} ($row->{godina}), $row->{broj} ;" . page_range(' str. ',$row->{stranica_prva}, $row->{stranica_zadnja}),
+ );
+
+ if ( my $file = $row->{datoteka} ) {
+ $marc->add_fields(856,' ',' ',
+ u => "http://bib.irb.hr/datoteka/$file",
+ );
+ };
+
+ foreach my $name (qw( openurl url )) {
+ next if ! $row->{$name};
+ $marc->add_fields(856,' ',' ',
+ u => $row->{$name},
+ );
+ }
+
+ my @f942 = (
+ c => 'CLA'
+ );
+ if ( $row->{status_rada} ) {
+ push @f942, (
+ f => 1,
+ g => $row->{status_rada}
+ );
+ }
+ push @f942, t => '1.01' if $row->{kategorija} =~ m/Znanstveni/;
+ push @f942, t => '1.04' if $row->{kategorija} =~ m/Strucni/;
+
+ $marc->add_fields(942,' ',' ',
+ @f942,
+ u => '1',
+ z => join(' - ', $row->{kategorija}, $row->{vrsta_rada}),
+ );
+
=for later
$marc->add_fields(999,' ',' ',
a => $row->{}