Update 04_4_download_der_metadaten.md
This commit is contained in:
parent
b8ffb105a6
commit
f4adbc3eb5
|
@ -1,11 +1,27 @@
|
||||||
# 4.4 Download der Metadaten
|
# 4.4 Download der Metadaten
|
||||||
|
|
||||||
## Aufgabe 1: Shell-Script zum Download der Metadaten schreiben
|
## Aufgabe 1: 100 PPNs aus dem Katalog notieren
|
||||||
|
|
||||||
* Mit curl über die unAPI-Schnittstelle wie in Kapitel 4.2
|
Für die Abfrage über die unAPI-Schnittstelle benötigen wir die Identifikationsnummern (hier PPNs) derjenigen Datensätze, die wir abfragen wollen. Also brauchen wir eine Liste der PPns, z.B. in einer einfachen Text-Datei.
|
||||||
|
|
||||||
|
## Lösung
|
||||||
|
|
||||||
|
Folgende Abfrage über die [SRU-Schnittstelle des GBV](https://www.gbv.de/wikis/cls/SRU) liefert die ersten 100 Treffer in einer XML-Datei im Format PICAXML für den Suchbegriff ```open```
|
||||||
|
|
||||||
|
{%s%}http://sru.gbv.de/opac-de-18-302?operation=searchRetrieve&query=pica.all%3Dopen&maximumRecords=100&startRecord=1&recordSchema=picaxml{%ends%}
|
||||||
|
|
||||||
|
Daraus können wir die PPNs im Feld 003@ mit grep extrahieren:
|
||||||
|
{%s%}http://sru.gbv.de/opac-de-18-302?operation=searchRetrieve&query=pica.all%3Dopen&maximumRecords=100&startRecord=1&recordSchema=picaxml{%ends%}
|
||||||
|
|
||||||
|
curl "http://sru.gbv.de/opac-de-18-302?operation=searchRetrieve&query=pica.all%3Dopen&maximumRecords=100&startRecord=1&recordSchema=picaxml" | grep -A 1 "003" | sed 's/^ *//; s/ *$//; /^$/d; s/<[^>]*>//g' | > 100ppns_sru-open.txt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 2: Shell-Script zum Download der Metadaten schreiben
|
||||||
|
|
||||||
|
* Mit curl über die unAPI-Schnittstelle wie in Kapitel 4.2 geübt
|
||||||
* Format: PICAXML
|
* Format: PICAXML
|
||||||
* Bei zu schnell aufeinander folgenden Abfragen verweigert die Schnittstelle evtl. die Antwort, daher Wartezeit 1 Sekunde zwischen den Abfragen einbauen
|
* Bei zu schnell aufeinander folgenden Abfragen verweigert die Schnittstelle evtl. die Antwort, daher Wartezeit 1 Sekunde zwischen den Abfragen einbauen
|
||||||
* Eine Liste der PPNs ist schwierig zu generieren, hier eine Datei mit 100 Stück: [100ppns.txt](data/100ppns.txt)
|
|
||||||
|
|
||||||
**Literaturtipps:**
|
**Literaturtipps:**
|
||||||
* https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger/
|
* https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger/
|
||||||
|
@ -15,21 +31,24 @@
|
||||||
|
|
||||||
```
|
```
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
url=curl "http://unapi.gbv.de/?id=opac-de-18-302:ppn:"
|
|
||||||
|
url=http://unapi.gbv.de/?id=opac-de-18-302:ppn:
|
||||||
format=picaxml
|
format=picaxml
|
||||||
|
mkdir download
|
||||||
|
curl -O https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/data/100ppns.txt
|
||||||
|
|
||||||
while read ppn
|
while read ppn
|
||||||
do
|
do
|
||||||
content=$(curl "{$url}${ppn}&format=${format}")
|
content=$(curl "{$url}${ppn}&format=${format}")
|
||||||
echo $ppn
|
echo $ppn
|
||||||
echo $content >> $ppn.picaxml
|
echo $content >> download/$ppn.picaxml
|
||||||
sleep 1
|
sleep 1
|
||||||
done < 100ppns.txt
|
done < 100ppns.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
* Diesen Textinhalt in einer Datei abspeichern, z.B. mit ```nano download.sh```
|
* Diesen Textinhalt in einer Datei abspeichern, z.B. mit ```nano download.sh```
|
||||||
* Danach muss das Script noch ausführbar gemacht werden: chmod +x download.sh
|
* Danach muss das Script noch ausführbar gemacht werden: ```chmod +x download.sh```
|
||||||
* Im gleichen Ordner muss die Datei 100ppns.txt liegen, Download z.B. mit ```curl ```
|
* Script starten mit ```./download.sh```
|
||||||
* Script starten mit ./download.sh
|
|
||||||
|
|
||||||
## Aufgabe 2: Heruntergeladene XML-Dateien zusammenführen
|
## Aufgabe 2: Heruntergeladene XML-Dateien zusammenführen
|
||||||
|
|
||||||
|
@ -40,4 +59,14 @@ XML bietet durch seine Baumstruktur die Möglichkeit mehrere Datensätze in eine
|
||||||
* http://www.ethanjoachimeldridge.info/tech-blog/combine-xml-files
|
* http://www.ethanjoachimeldridge.info/tech-blog/combine-xml-files
|
||||||
|
|
||||||
## Lösung
|
## Lösung
|
||||||
...
|
...
|
||||||
|
|
||||||
|
## Alternative: SRU-Schnittstelle
|
||||||
|
|
||||||
|
Mit Suchabfragen der folgenden Form ließen sich auch alle Daten sukzessive abrufen:
|
||||||
|
1. http://sru.gbv.de/opac-de-18-302?operation=searchRetrieve&query=pica.ppn=.*&maximumRecords=100&startRecord=001&recordSchema=picaxml
|
||||||
|
2. http://sru.gbv.de/opac-de-18-302?operation=searchRetrieve&query=pica.ppn=.*&maximumRecords=100&startRecord=101&recordSchema=picaxml
|
||||||
|
3. http://sru.gbv.de/opac-de-18-302?operation=searchRetrieve&query=pica.ppn=.*&maximumRecords=100&startRecord=201&recordSchema=picaxml
|
||||||
|
4. ...
|
||||||
|
|
||||||
|
Die Suche nach ```pica.ppn=.*``` liefert alle Datensätze zurück, wird mit ```maximumRecords=100``` begrenzt (sonst liefert die Schnittstelle gar keine Daten) und sukzessive mit einem Parameter ```startRecord=``` abgefragt. Das ließe sich auch gut in einem Shell-Script abfragen.
|
Loading…
Reference in New Issue