Konvertere fra Z39.50 til JSON
Fra Biblab
PHP-skript for å konvertere data hentet med Z39.50 til JSON-format.
Krever PHP5 og PHP/YAZ -- for BIBSYS, bruktes for å danne autofullføringsdata av forfatter-/titteldata fra BIBSYS:
RPN-spørringen søker bare i tittel og forfatter. Ikke særlig avansert regulært uttrykk, men det forsåvidt funker for testing. Bedre å identifisere hvilken MARC-felt dataene kommer fra slik at disse kan brukes senere (krever XPath).
if ($data){
$autocomplete=array();
$query='@or @attr 1=1003 @attr 4=1 {' . iconv("UTF-8", "ISO-8859-1", $data) . '?} @attr 4=2 @attr 4=1 {' . iconv("UTF-8", "ISO-8859-1", $data) . '}';
$host="z3950.bibsys.no:2100/BIBSYS";
$options["piggyback"]=0;
$id=yaz_connect($host, $options);
yaz_syntax($id, "marc21");
yaz_range($id, 1, 5);
yaz_search($id, "rpn", $query);
yaz_wait();
$myKey=0;
for ($p = 1; $p <= 5; $p++)
{
$rec = yaz_record($id, $p, "xml; marc-8");
if (empty($rec)) continue;
$rec=utf8_encode(htmlspecialchars_decode($rec));
$match_pattern='/"a">('.$data.'.*?)[<|\/|:]/i';
preg_match($match_pattern,strtolower($rec),$matches);
if (empty($matches[1])) continue;
$matches[1]=html_entity_decode(trim(str_replace(''','\,$matches[1])));
if (in_array($matches[1],$autocomplete)) continue;
$autocomplete[$myKey]=$matches[1];
$myKey++;
}
header('Content-type: application/json');
echo(json_encode($autocomplete));
}