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