5 use lib '/openils/lib/perl5/';
8 #use OpenILS::Utils::Fieldmapper;
9 #use OpenSRF::Utils::SettingsClient;
11 #OpenSRF::System->bootstrap_client(config_file =>
12 #'/openils/conf/bootstrap.conf');
13 #Fieldmapper->import(IDL =>
14 # OpenSRF::Utils::SettingsClient->new->config_value("IDL"));
16 # # do this after bootstrapping/importing IDL
17 # require OpenILS::Application::Search;
19 # my $meth = OpenSRF::Application->method_lookup(
20 # 'open-ils.search.biblio.metarecord.mods_slim.retrieve');
21 # my @data = $meth->run(1);
22 # my $mods = shift @data;
23 # print "Got mvr: " . $mods->title . "\n";
28 use OpenSRF::Application;
29 use OpenSRF::EX qw/:try/;
30 use OpenSRF::AppSession;
31 use OpenSRF::MultiSession;
32 use OpenSRF::Utils::SettingsClient;
33 use OpenILS::Application::AppUtils;
34 use OpenILS::Utils::Fieldmapper;
35 use Digest::MD5 qw/md5_hex/;
39 use Time::HiRes qw/time/;
44 use UNIVERSAL::require;
46 MARC::Charset->ignore_errors(1);
48 my ($id_field, $count, $user, $password, $config, $keyfile, @files) =
49 ('998', 1, 'admin', 'open-ils', '/openils/conf/bootstrap.conf');
52 'startid=i' => \$count,
53 'idfield=s' => \$id_field,
55 'password=s' => \$password,
56 'keyfile=s' => \$keyfile,
57 'config=s' => \$config,
61 @files = @ARGV if (!@files);
76 OpenSRF::System->bootstrap_client( config_file => $config );
77 Fieldmapper->import(IDL => OpenSRF::Utils::SettingsClient->new->config_value("IDL"));
79 $user = OpenILS::Application::AppUtils->check_user_session( login($user,$password) )->id;
83 open F, $keyfile or die "Couldn't open key file $keyfile";
85 if ( /^(\d+)\|(\S+)/o ) {
91 select STDERR; $| = 1;
92 select STDOUT; $| = 1;
94 my $batch = new MARC::Batch ( 'USMARC', @files );
96 $batch->warnings_off();
99 while ( my $rec = $batch->next ) {
101 my $id = $rec->subfield($id_field => 'a') || $count;
102 if ($id =~ /(\d+)/o) {
107 if (my $tcn = $keymap{$id}) {
108 $rec->delete_field( $_ ) for ($rec->field('035'));
109 $rec->append_fields( MARC::Field->new( '035', '', '', 'a', $tcn ) );
116 $rec = preprocess($rec, $id);
122 my $tcn_value = $rec->subfield('039' => 'a');
123 my $tcn_source = $rec->subfield('039' => 'b');
125 (my $xml = $rec->as_xml_record()) =~ s/\n//sog;
126 $xml =~ s/^<\?xml.+\?\s*>//go;
127 $xml =~ s/>\s+</></go;
129 my $bib = new Fieldmapper::biblio::record_entry;
134 $bib->creator($user);
135 $bib->create_date('now');
137 $bib->edit_date('now');
138 $bib->tcn_source($tcn_source);
139 $bib->tcn_value($tcn_value);
140 $bib->last_xact_id('IMPORT-'.$starttime);
142 print JSON->perl2JSON($bib)."\n";
146 if (!($count % 20)) {
147 print STDERR "\r$count\t". $count / (time - $starttime);
154 my ($id, $source, $value);
157 my $f = $rec->field('001');
158 $id = $f->data if ($f);
162 my $f = $rec->field('000');
163 $id = 'g'.$f->data if ($f);
168 my $f = $rec->field('020');
169 $id = $f->subfield('a') if ($f);
174 my $f = $rec->field('022');
175 $id = $f->subfield('a') if ($f);
180 my $f = $rec->field('010');
181 $id = $f->subfield('a') if ($f);
186 my $f = $rec->field('035');
187 $id = $f->subfield('a') if ($f);
193 warn "\n !!! Record with no TCN : $count\n".$rec->as_formatted;
199 $id =~ s/(\S+)$/$1/o;
201 $id = $source.$id if ($source);
203 ($source, $value) = $id =~ /^(.)(.+)$/o;
204 if ($id =~ /^o(\d+)$/o) {
209 my $tcn = MARC::Field->new(
213 'b', do { $source_map{$source} || 'System' },
216 $rec->delete_field($_) for ($rec->field('035','948','998'));
217 $rec->append_fields($tcn);
223 my( $username, $password, $type ) = @_;
227 my $seed = OpenILS::Application::AppUtils->simplereq(
229 'open-ils.auth.authenticate.init',
233 die("No auth seed. Couldn't talk to the auth server") unless $seed;
235 my $response = OpenILS::Application::AppUtils->simplereq(
237 'open-ils.auth.authenticate.complete',
238 { username => $username,
239 password => md5_hex($seed . md5_hex($password)),
242 die("No auth response returned on login.") unless $response;
244 my $authtime = $response->{payload}->{authtime};
245 my $authtoken = $response->{payload}->{authtoken};
247 die("Login failed for user $username!") unless $authtoken;