-
Notifications
You must be signed in to change notification settings - Fork 1
/
da_fetch_getopt.sh
139 lines (118 loc) · 4.19 KB
/
da_fetch_getopt.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/bash
shopt -s nocasematch;
# Variables
target="owc-de-206"
schema="marcxml-solr"
display_usage() {
echo "Usage: $0 [OPTIONS]"
echo
echo "Beschreibung:"
echo " Dieses Script liest eine Datei mit PPNs ein, lädt die bibliografischen Metadaten"
echo " und Exemplardaten per SRU herunter und konvertiert die Daten in eine CSV-Datei,"
echo " die von bulkzip weiterverarbeitet werden kann."
echo
echo "Optionen:"
echo " -f, --file <DATEI> Angabe der Eingabedatei mit den PPNs."
echo
echo " -t, --target <Datenbank> Auswahl der PICA-Datenbank. Verfügbare Optionen:"
echo " - owc-de-206 (Arbeitskatalog der ZBW)"
echo " - k10plus (Datenbank 1.1)"
echo " - ebooks (Datenbank 1.2)"
echo " - nl-monographien (Datenbank 1.50)"
echo " - nl-zeitschriften (Datenbank 1.55)"
echo " Standard: owc-de-206"
echo
echo " -i, --isil <ISIL> Angabe eines ISIL (optional)."
echo " Sofern kein ISIL angegeben wird, bleibt die Spalte"
echo " identifier.packageid leer."
echo
echo " -s, --schema <FORMAT> Angabe des Formats. Verfügbare Optionen:"
echo " - marcxml"
echo " - marcxml-solr"
echo " Standard: marcxml-solr"
echo
echo " -h, --help Anzeige des Hilfemenü."
}
# Use getopt to parse short and long arguments
PARSED=$(getopt -o f:t:i:s:h --long format:,output:,verbose,help -- "$@")
if [[ $? -ne 0 ]]; then
exit 1
fi
# Reset the options parsed by getopt back to $@
eval set -- "$PARSED"
# Parse arguments
while true; do
case "$1" in
-f|--file)
file="$2"
shift 2
;;
-t|--target)
target="$2"
shift 2
;;
-i|--isil)
isil="$2"
shift 2
;;
-s|--schema)
schema="$2"
shift 2
;;
-h|--help)
display_usage
exit 0
;;
--)
shift
break
;;
*)
echo "Ungültige Option: $1"
exit 1
;;
esac
done
# Check if a file has been provided
if [[ -z "$file" ]]; then
echo "Keine Eingabedatei angegeben!"
exit 1
fi
file_unix="${file}.unix.txt"
echo "File: $file"
echo "Database: $target"
echo "ISIL: $isil"
echo "Format: $schema"
echo -e "Datei \"$file\" wird verarbeitet."
awk '{ sub("\r$", ""); print }' < "${file}" > "${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=${schema}" > 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-"${file}".csv
if [[ -s records-${file}.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 -f ${file} archive/ppns
mv -f ${file_unix} archive/ppns
mv -f records-"${file}".csv archive/records
rm records.xml