-
Notifications
You must be signed in to change notification settings - Fork 1
/
da_fetch.sh
123 lines (100 loc) · 3.97 KB
/
da_fetch.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/bin/bash
shopt -s nocasematch;
# Variables
file=${1}
file_unix="${file}.unix.txt"
default_target="owc-de-206"
target="${2:-$default_target}"
isil=${3}
default_format="marcxml-solr"
format="${4:-$default_format}"
display_usage() {
echo -e "\nDas Programm erwartet beim Aufruf 4 Argumente:\n./da_fetch.sh [Dateiname] [Target] [ISIL] [Format]\\n
Sofern kein Target angegeben wird, werden die Daten aus owc-de-206 abgezogen.\\n
Sofern kein ISIL angegeben wird, bleibt die Spalte identifier.packageid leer.\\n
Sofern kein Format angegeben wird, werden die Daten im Format marcxml-solr abgezogen.\n"
}
display_targets() {
echo -e "Folgende Targets sind verfügbar:\n\
- owc-de-206 (Arbeitskatalog der ZBW)\n\
- k10plus (Datenbank 1.1)\n\
- ebooks (Datenbank 1.2)\n\
- nl-monographien (Datenbank 1.50)\n\
- nl-zeitschriften (Datenbank 1.55)\n"
}
display_formats() {
echo -e "Folgende Formate sind verfügbar:\n\
- marcxml\n\
- marcxml-solr\n"
}
# Check on arguments
if [[ $# -eq 0 ]] ; then
echo -e "\nFEHLER: Kein Dateiname angegeben."
display_usage
display_targets
display_formats
exit 1
fi
# Validate target argument
if [[ $target != "owc-de-206" && $target != "k10plus" && $target != "ebooks" && $target != "nl-monographien" && $target != "nl-zeitschriften" ]] ; then
echo -e "Ungültiges Target.\n"
display_targets
exit 1
fi
if [[ $target = "owc-de-206" ]] ; then
echo -e "Daten werden aus Target \"owc-de-206\" abgezogen."
elif [[ $target = "k10plus" ]] ; then
echo -e "Daten werden aus Target \"k10plus\" abgezogen."
elif [[ $target = "ebooks" ]] ; then
echo -e "Daten werden aus Target \"ebooks\" abgezogen."
elif [[ $target = "nl-monographien" ]] ; then
echo -e "Daten werden aus Target \"nl-monographien\" abgezogen."
elif [[ $target = "nl-zeitschriften" ]] ; then
echo -e "Daten werden aus Target \"nl-zeitschriften\" abgezogen."
fi
if [[ $isil ]] ; then
echo -e "Das Sigel \"${isil}\" wurde angegeben."
fi
# Validate format argument
if [[ $format != "marcxml" && $format != "marcxml-solr" ]] ; then
echo -e "Ungültiges Format.\n"
display_formats
exit 1
fi
if [[ $format = "marcxml" ]] ; then
echo -e "Daten werden im Format \"marcxml\" abgezogen."
elif [[ $format = "marcxml-solr" ]] ; then
echo -e "Daten werden im Format \"marcxml-solr\" abgezogen."
fi
echo -e "Datei \"$file\" wird verarbeitet."
awk '{ sub("\r$", ""); print }' < "${1}" > "${file_unix}"
echo -e "Bitte warten. Datensätze werden heruntergeladen."
# Schnittstelleninformationen
< "${file_unix}" xargs -i curl -s "http://unapi.k10plus.de/?id=${target}:ppn:{}&format=${format}" > records.xml
if [[ -s records.xml ]]
then
echo -e "Download erfolgreich.";
else
echo -e "Download fehlgeschlagen, Programm bricht ab.";
exit 1
fi
echo -e "Bitte warten. Heruntergeladene Datensätze werden konvertiert."
catmandu convert MARC --type XML to CSV --fix da_fetch_mapping.fix --fields identifier.ppn,type,date.issued,title,part,\
title.alternative,identifier.isbn,relation.issn,relation.journalzdbid,relation.serieszdbid,contributor.author,contributor.editor,contributor.other,identifier,\
identifier.pi,rights.license,publisher,language.iso,subject.jel,description.version,relation.ispartofseries,relation.seriesppn,\
relation.ispartofjournal,relation.journalppn,relation.ispartofbook,relation.bookppn,econstor.citation.volume,econstor.citation.issue,econstor.citation.articlenumber,\
econstor.citation.startpage,econstor.citation.endpage,url,collection_handle,identifier.packageid,filepath,description.abstract,subject.ddc,subject.keyword,download_method --var target="${target}" --var isil="${isil}" --sep_char '\t' < records.xml > records-"${1}".csv
if [[ -s records-${1}.csv ]]
then
echo -e "Konvertierung erfolgreich.";
else
echo -e "Konvertierung fehlgeschlagen, Programm bricht ab.";
exit 1
fi
ppn_dir="archive/ppns"
records_dir="archive/records"
[ ! -d "$ppn_dir" ] && mkdir -p "$ppn_dir"
[ ! -d "$records_dir" ] && mkdir -p "$records_dir"
mv ./*.txt archive/ppns
mv records-* archive/records
rm records.xml