finish conversion to marc
[ferlib2koha.git] / zavrsni-radovi / json2marc.pl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5 use autodie;
6 use utf8;
7
8 use JSON;
9 use Data::Dump qw(dump);
10 use MARC::Record;
11
12 open(my $json, '<', 'report_62836_1046_ZavrsniRadovi.json');
13 {
14         local $/;
15         undef $/;
16         my $data = <$json>;
17         close($json);
18         $json = decode_json($data);
19 }
20 #warn dump($json->[0]);
21
22 open(my $marc_fh, '>:utf8', 'radovi.marc');
23
24 my $stat;
25
26 my $udk;
27 while(<DATA>) {
28         chomp;
29         my ($smjer,$udk_broj) = split(/\t+/,$_,2);
30         $udk->{$smjer} = $udk_broj;
31 }
32 warn "# udk = ",dump($udk);
33
34 foreach my $rad ( @$json ) {
35
36         print dump($rad), "\n";
37
38         if ( ! $rad->{naslovhr} ) {
39                 $stat->{no_naslovhr}++;
40                 next;
41         }
42         $stat->{radova}++;
43
44         my $marc = MARC::Record->new;
45         $marc->encoding( 'UTF-8' );
46
47         my $year = $1 if $rad->{datumzavrsetka} =~ m/^(\d{4})/;
48         my $jezik = substr($rad->{jezikrada},0,3);
49
50         $marc->add_fields(
51                 grep { ref($_) eq 'ARRAY' }
52                 [ '003', 'HR-ZaFER' ],
53                 [ '008', '160221s'.$year.'    ci ||||| m||| 00| 0 '.$jezik.' d' ],
54                 [ '035', ' ', ' ', a => '(HR-ZaFER)' . 'rbrzad' . $rad->{rbrzad} ],
55                 [ '040', ' ', ' ', a => 'HR-ZaFER', b => 'hrv', c => 'HR-ZaFER', e => 'ppiak' ],
56                 #[ '080', ' ', ' ', a => $udk->{ $rad->{smjer} } ],
57                 #[ '100', '1', '#', a => $rad->{prezime} . ', ' . $rad->{ime}, g => 'JMBAG:' . $rad->{jmbag} ],
58                 [ '100', '1', '#', a => $rad->{prezime} . ', ' . $rad->{ime} ],
59                 [ '245', '1', '0', 
60                         a => $rad->{naslovhr} . ' :', 
61                         b => 
62                                 $rad->{studij} =~ m/^preddiplomski/ ? 'završni rad /' :
63                                 $rad->{studij} =~ m/^diplomski/ ? 'diplomski rad /' : '',
64                         c => $rad->{ime} . ' ' . $rad->{prezime} . '.'
65                 ],
66                 [ '246', '1', ' '
67                 #       $rad->{nasloven} =~ m/The / ? 4 :
68                 #       $rad->{nasloven} =~ m/A /   ? 2 : '0' # FIXME?
69                         , a => $rad->{nasloven}, i => 'Naslov na engleskom: '
70                 ], 
71                 [ '260', ' ', ' ', a => 'Zagreb,', b => substr($rad->{ime},0,1) . '. ' . $rad->{prezime} . ',', c => substr($rad->{datumzavrsetka},0,4) . '.' ],
72                 $rad->{'brojstranica'} ? [ '300', '#', '#', a => $rad->{'brojstranica'} . ' str. ;', c => '30 cm' ] : '',
73                 [ '502', '#', '#', b => $rad->{studij} . ' studij', c => 'Fakultet elektrotehnike i računarstva u Zagrebu', g => 'smjer: ' . $rad->{smjer} . ', ' . 'šifra smjera: ' . $rad->{sifsmjer} . ', ' . 'datum predaje: ' . $rad->{datumpredaje} . ', ' . 'datum završetka: ' . $rad->{datumzavrsetka} ],
74                 $rad->{sazetakhr} ? [ '520', '3', '#', a => 'Sažetak na hrvatskom: ' . $rad->{sazetakhr} ] : '',
75                 $rad->{sazetaken} ? [ '520', '3', '#', a => 'Sažetak na engleskom: ' . $rad->{sazetaken} ] : '',
76                 $rad->{keywords}  ? [ '653', ' ', '1', map { ( a => $_ ) } split(/;\s*/, $rad->{keywords}  ) ] : '',
77                 $rad->{keywords_en} ? [ '653', ' ', '1', map { ( a => $_ ) } split(/;\s*/, $rad->{keywords_en}) ] : '',
78                 #[ '700', '1', '#', a => $rad->{prezmentor} . ', ' . $rad->{imementor}, 4 => 'ths', g => 'ID:' . $rad->{oznmentor} ],
79                 [ '700', '1', '#', a => $rad->{prezmentor} . ', ' . $rad->{imementor}, 4 => 'ths' ],
80                 $rad->{prezmentor2} ? [ '700', '1', '#', a => $rad->{prezmentor2} . ', ' . $rad->{imementor2}, 4 => 'ths', g => 'ID:' . $rad->{oznmentor2} ] : '',
81                 [ '942', ' ', ' ',
82                         c =>
83                                 $rad->{studij} =~ m/^preddiplomski/ ? 'Z' :
84                                 $rad->{studij} =~ m/^diplomski/ ? 'Y' : ''
85                 ],      
86                 [ '952', ' ', ' ', 
87                         a => 'SRE', b => 'SRE', c => 'KF', 
88                         y =>
89                                 $rad->{studij} =~ m/^preddiplomski/ ? 'Z' :
90                                 $rad->{studij} =~ m/^diplomski/ ? 'Y' : ''
91                 ]
92
93         );
94
95         print $marc_fh $marc->as_usmarc;
96
97         print $marc->as_formatted, "\n\n"; # FIXME
98
99 #       last if $stat->{radova} == 10; # FIXME
100 }
101
102 print "# stat = ",dump($stat);
103
104 =for import
105
106 ($recordid, $biblioitemnumber) = AddBiblio($marc_record, $framework);
107
108 =cut
109
110 __DATA__
111 Automatika                                                              681.5
112 Elektroenergetika                                               631.31  
113 Elektroničko i računalno inženjerstvo        621.37+621.391+004.02/.05
114 Elektronika                                                             621.38
115 Elektrotehnički sustavi i tehnologija  621.3
116 Obradba informacija                                             004.7/.9+621.397
117 Programsko inženjerstvo i informacijski sustavi                004.4+004.6/.7
118 Računalno inženjerstvo                                        004.4/.5+004.03/.05
119 Računarska znanost                                             004.2/.3+004.45+004.8/.9
120 Radiokomunikacijske tehnologije                 621.396
121 Telekomunikacije i informatika                  621.391/.396