Konvertere fra Z39.50 til JSON

Fra Biblab

Gå til: navigasjon, søk

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('&apos;','\,$matches[1])));
          if (in_array($matches[1],$autocomplete)) continue;
          $autocomplete[$myKey]=$matches[1];
          $myKey++;
      }
 header('Content-type: application/json');
 echo(json_encode($autocomplete));
}
Personlige verktøy