From 07517ae563097e04e91ea3fae2c2ca1cf2309b86 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Mon, 16 Dec 2019 20:48:17 +0000 Subject: [PATCH] Użycie API REST do pobierania danych z Biblioteki Narodowej --- includes/MARC21.php | 10 ++-- includes/ibd_BN.php | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 105 insertions(+), 9 deletions(-) diff --git a/includes/MARC21.php b/includes/MARC21.php index 3205a64..fc2163f 100644 --- a/includes/MARC21.php +++ b/includes/MARC21.php @@ -136,10 +136,10 @@ return array( 'tytul' => trim($MARC['245'][0]['a'], '().,\\/"\' '), 'autor' => trim($MARC['100'][0]['a'], '().,\\/"\' '), - 'rok' => trim($MARC['260'][0]['c'], '().,\\/"\' '), - 'miejsce' => trim($MARC['260'][0]['a'], '().,\\/"\' '), - 'wydawnictwo' => trim($MARC['260'][0]['b'], '().,\\/"\' '), - 'wydanie' => trim($MARC['250'][0]['a'], '().,\\/"\' '), + 'rok' => trim($MARC['260'][0]['c'], '[]().,:\\/"\' '), + 'miejsce' => trim($MARC['260'][0]['a'], '[]().,:\\/"\' '), + 'wydawnictwo' => trim($MARC['260'][0]['b'], '[]().,:\\/"\' '), + 'wydanie' => trim($MARC['250'][0]['a'], '[]().,:\\/"\' '), 'jezyk' => $MARC['041'][0]['a'], 'ISBN' => $ISBN, 'ISSN' => $ISSN, @@ -183,4 +183,4 @@ )); } } -?> \ No newline at end of file +?> diff --git a/includes/ibd_BN.php b/includes/ibd_BN.php index ae71c7f..62e5d4f 100644 --- a/includes/ibd_BN.php +++ b/includes/ibd_BN.php @@ -1,7 +1,103 @@ <?php -class ibd_BN extends YAZ_ibd { - function __construct() { - parent::__construct('Biblioteka Narodowa', 'eu.alma.exlibrisgroup.com:1921/48OMNIS_NLOP'); +class ibd_BN implements ibd_module { + public $url = 'http://data.bn.org.pl/api/bibs.json'; + public $limit = 20; + + function szukaj_info($tytul=NULL, $autor=NULL, $wydawnictwo=NULL) { + $params = []; + if(!empty($tytul)) { + $params['title'] = $tytul; + } + if(!empty($autor)) { + $params['author'] = $author; + } + if(!empty($wydawnictwo)) { + $params['publisher'] = $wydawnictwo; + } + return $this->query($params); + } + + function szukaj_ISBN($ISBN) { + $result = $this->query(array( + 'isbnIssn' => $ISBN, + )); + if(substr($ISBN, 0, 3) == '978') { + $result = array_merge( + $result, + $this->query(array( + 'isbnIssn' => convert::ISBN13_to_ISBN10( $ISBN ), + )) + ); + } + return $result; + } + + function szukaj_ISSN($ISSN) { + $result = $this->query(array( + 'isbnIssn' => $ISSN, + )); + if(substr($ISSN, 0, 3) == '977') { + $result = array_merge( + $result, + $this->query(array( + 'isbnIssn' => convert::ISSN13_to_ISSN8( $ISSN ) + )) + ); + } + return $result; + } + + protected function query($params) { + $params['limit'] = $limit; + $result = file_get_contents($this->url . '?' . http_build_query($params)); + $result = json_decode($result, TRUE); + return $this->extractArrays($result); + + } + + protected function convertSubfields($values) { + $result = array(); + if(!isset($values['subfields'])) { + return array(); + } + if(isset($values['ind1'])) { + $result['f0'] = $values['ind1']; + } + if(isset($values['ind2'])) { + $result['f1'] = $values['ind2']; + } + foreach($values['subfields'] as $subfield) { + foreach($subfield as $name => $value) { + $result[$name] = $value; + } + } + return $result; + } + + protected function convert($entry) { + $marc = array(); + if(!isset($entry['marc'])) return NULL; + if(!isset($entry['marc']['fields'])) return NULL; + foreach($entry['marc']['fields'] as $fields) { + foreach($fields as $field => $values) { + if(!isset($marc[$field])) { + $marc[$field] = array(); + } + $marc[$field][] = $this->convertSubfields($values); + } + } + return $marc; + } + + protected function extractArrays($result) { + if(!$result) return array(); + if(!$result['bibs']) return array(); + + $return = array(); + foreach($result['bibs'] as $bib) { + $marc = $this->convert($bib); + $return[] = MARC21::to_array($marc); + } + return $return; } } -?> -- Gitblit v1.9.1