diff --git a/lib/PrimoServices/Dispatcher.pm b/lib/PrimoServices/Dispatcher.pm index 9a4a298..b01380e 100644 --- a/lib/PrimoServices/Dispatcher.pm +++ b/lib/PrimoServices/Dispatcher.pm @@ -20,7 +20,6 @@ my $uid = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); my $cache = CHI->new( namespace => __PACKAGE__, driver => config->{caching}{chi_driver}, - #driver => 'Null', root_dir => config->{caching}{chi_root_dir} . '_' . $uid, depth => config->{caching}{chi_depth}, expires_in => config->{caching}{default_expires_in}, @@ -208,7 +207,7 @@ sub request_webservices { if ( $id =~ m { # Primo Central records are prefixed by 'TN_' ^TN_}sxm ) { - push @items, { id => $id, primoStatus => 'Not a local record' }; + push @items, { id => $id, primoStatus => 'Not a local record', error=> '0' }; next; } diff --git a/lib/PrimoServices/Parsers.pm b/lib/PrimoServices/Parsers.pm index ffe86fd..63d188d 100644 --- a/lib/PrimoServices/Parsers.pm +++ b/lib/PrimoServices/Parsers.pm @@ -40,25 +40,32 @@ sub parse_record { $json = JSON::XS->new->utf8->decode($$content_ref); $values{id} = $id; - $values{primoStatus} = 'OK'; - $values{metadata}{isbn} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{isbn}); - $values{metadata}{'@isbn'} = get_as_array($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{isbn}); - $values{metadata}{issn} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{issn}); - $values{metadata}{'@issn'} = get_as_array($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{issn}); - - $values{delcategory} = get_as_array($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{delivery}{delcategory}); - @{$values{delcategory}} = List::MoreUtils::apply { s/(^\$\$V|\$\$O.*$)//g } @{$values{delcategory}} if @{$values{delcategory}}[0]; - @{$values{delcategory}} = List::MoreUtils::uniq @{$values{delcategory}} if @{$values{delcategory}}[1]; - - $values{type} = $json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{display}{type}; - $values{availability} = $json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{LIBRARIES}; - $values{metadata}{date} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{date}); - $values{metadata}{volume} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{volume}); - $values{metadata}{issue} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{issue}); - $values{metadata}{issue} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{spage}); - - $values{metadata}{atitle} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{atitle}); + if ( $json->{SEGMENTS}{JAGROOT}{RESULT}{ERROR}{'@MESSAGE'} ) { + $values{primoStatus} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{ERROR}{'@MESSAGE'}); + $values{error} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{ERROR}{'@CODE'}); + } + else { + $values{primoStatus} = 'OK'; + + $values{metadata}{isbn} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{isbn}); + $values{metadata}{'@isbn'} = get_as_array($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{isbn}); + $values{metadata}{issn} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{issn}); + $values{metadata}{'@issn'} = get_as_array($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{issn}); + + $values{delcategory} = get_as_array($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{delivery}{delcategory}); + @{$values{delcategory}} = List::MoreUtils::apply { s/(^\$\$V|\$\$O.*$)//g } @{$values{delcategory}} if @{$values{delcategory}}[0]; + @{$values{delcategory}} = List::MoreUtils::uniq @{$values{delcategory}} if @{$values{delcategory}}[1]; + + $values{type} = $json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{display}{type}; + $values{availability} = $json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{LIBRARIES}; + $values{metadata}{date} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{date}); + $values{metadata}{volume} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{volume}); + $values{metadata}{issue} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{issue}); + $values{metadata}{issue} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{spage}); + + $values{metadata}{atitle} = get_as_scalar($json->{SEGMENTS}{JAGROOT}{RESULT}{DOCSET}{DOC}{PrimoNMBib}{record}{addata}{atitle}); + } } catch { # JSON was malformed so we cannot tell the number of hits @@ -248,7 +255,8 @@ sub parse_rsi { }sxmi ) { # Get SFX Object ID - my $sfx_object_id = $1 if ( $$content_ref =~ m{ + my $sfx_object_id; + $sfx_object_id = $1 if ( $$content_ref =~ m{ (\d+?) }sxmi );