safer MR mapping
[Evergreen.git] / Open-ILS / src / extras / import / marc2are.pl
index 3391bc4..401a5db 100755 (executable)
@@ -13,7 +13,7 @@ use OpenSRF::Utils::SettingsClient;
 use OpenILS::Application::AppUtils;
 use OpenILS::Utils::Fieldmapper;
 use Digest::MD5 qw/md5_hex/;
-use JSON;
+use OpenSRF::Utils::JSON;
 use Data::Dumper;
 use Unicode::Normalize;
 
@@ -25,7 +25,7 @@ use MARC::Charset;
 
 MARC::Charset->ignore_errors(1);
 
-my ($utf8, $id_field, $count, $user, $password, $config, $marctype, $keyfile,  @files, @trash_fields) =
+my ($utf8, $id_field, $count, $user, $password, $config, $marctype, $keyfile,  @files, @trash_fields, $quiet) =
        (0, '998', 1, 'admin', 'open-ils', '/openils/conf/opensrf_core.xml', 'USMARC');
 
 GetOptions(
@@ -35,6 +35,7 @@ GetOptions(
        'password=s'    => \$password,
        'config=s'      => \$config,
        'file=s'        => \@files,
+       'quiet'         => \$quiet,
 );
 
 @files = @ARGV if (!@files);
@@ -60,12 +61,16 @@ my $rec;
 while ( try { $rec = $batch->next } otherwise { $rec = -1 } ) {
        next if ($rec == -1);
        my $id = $count;
+       my $_001 = $rec->field('001');
+       my $arn = $count;
+       $arn = $_001->data if ($_001);
 
        (my $xml = $rec->as_xml_record()) =~ s/\n//sog;
        $xml =~ s/^<\?xml.+\?\s*>//go;
        $xml =~ s/>\s+</></go;
        $xml =~ s/\p{Cc}//go;
-       $xml = entityize($xml);
+       $xml = entityize($xml,'D');
+       $xml =~ s/[\x00-\x1f]//go;
 
        my $bib = new Fieldmapper::authority::record_entry;
        $bib->id($id);
@@ -77,14 +82,14 @@ while ( try { $rec = $batch->next } otherwise { $rec = -1 } ) {
        $bib->editor($user);
        $bib->edit_date('now');
        $bib->arn_source('LEGACY');
-       $bib->arn_value($count);
+       $bib->arn_value($arn);
        $bib->last_xact_id('IMPORT-'.$starttime);
 
-       print JSON->perl2JSON($bib)."\n";
+       print OpenSRF::Utils::JSON->perl2JSON($bib)."\n";
 
        $count++;
 
-       if (!($count % 20)) {
+       if (!$quiet && !($count % 20)) {
                print STDERR "\r$count\t". $count / (time - $starttime);
        }
 }