Jeanbarth
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hallo Zusammen, habe aus beruflichen Gründen ein kleines Skript geschrieben. Muss gestehen, es ist mein Erstes!
Hoffe es hilft hier auch jemanden und/ oder ich bekomme Verbesserungsvorschläge.
Wie bereits gesagt, es ist mein erster Versuch. So, zum Skript. Das Skript lädt die Gesetzestexte von www.gesetze-im-internet.de herunter und speichert diese als .pdf.
Weiter kann man die bereits heruntergeladenen Gesetzestexte updaten.
Auch kann man nur ein bestimmtes Gesetz herunterladen. Dazu muss man lediglich die Abkürzung des Gesetzes kennen (Bürgerliches Gesetzbuch = bgb). Ist aber im Skript auch nochmals erklärt. Also einfach herunterladen und im Terminal starten. Gruß Jeanbarth
- gesetze.sh (1.6 KiB)
- Download gesetze.sh
|
Keba
Ehemalige
Anmeldungsdatum: 24. Juli 2007
Beiträge: 3802
|
Hallo, Ich hab für das Skript zwar keine Verwendung, allerdings habe ich ein paar Anmerkungen zum Skript an sich: Einrückungen würden der Lesbarkeit gut tun, versuch mal auf einen Blick zu erkennen wo die While-Schleife aus der dritten Zeile endet. Den Ordner www.gesetze-im-internet.de würde ich umrennen. Wäre nicht schlecht, wenn man über ein Parameter einen Order angeben könnte. Was passiert denn wenn man sich im Ordner www.gesetze-im-internet.de befindet und ein Update durchführt? Ich vermute es wird ein neuer Ordner angelegt. Mag sein, dass dein Skript für eine Firma ist, die eine halbwegs konstant schnelle Internetverbindung hat, aber abzuschätzen wie lange das dauert ist schwer. Ich würde die (ungefähre) Größe angeben. Die Größe eines Updates zu schätzen ist natürlich generell schwer. Verwende nicht nano , sondern die Umgebungsvariable $TERMINAL , wenn jemand vim oder emacs verwenden möchte, soll er das dürfen. Außerdem ist nano nicht überall installiert. Außerdem weißt du nicht, ob jemand das Skript umbenannt hat, der Pfad eines Skripts kann mittels $0 herausgefunden werden. Ob man die Option -u braucht, halte ich generell für fragwürdig. Parameter sollten eine sinnvolle Abkürzung sein, und nicht von oben nach unten gelesen ein nettes Wort ergeben (wobei die Idee originell ist, das muss ich zugeben). -a um alle Gesetze runter zu laden, -u für ein Update usw. Sonst merkt sich das kein Schwein.
Hoffentlich kommt das jetzt nicht als „Hey, dein Skript ist ja voll doof“ rüber, du hattest ja explizit um Verbesserungsvorschläge gebeten ☺ Grüße, Keba.
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hi Keba, erstmal Danke für deine Vorschläge. Wie gesagt, ist auch mein erster Versuch und ich habe auf genau solche Antworten wie deine gehofft ☺
Jetzt weiß ich schonmal, wo ich morgen dran weiter arbeiten kann! Werde dann zu geraumer Zeit mal die Verbesserungen hochladen! Nochmals Danke und ich habe es nicht als "Hey, dein Skript ist voll doof" aufgefasst 😉 Jeder Anfang ist schwer! Schönen Abend/ Nacht Gruß Jeanbarth
|
axt
Anmeldungsdatum: 22. November 2006
Beiträge: 34254
|
Ich würde mich eher über ein Script freuen, daß mal wieder einen aktuellen Wiki-Dump ohne Pix ziehen läßt.
|
MisterX
Anmeldungsdatum: 28. März 2007
Beiträge: 227
Wohnort: Deutschland
|
Schöne Sache, werde das definitiv verfolgen. Da du aber offenbar juristisch vorbelastet bist - was genau willst du mit der Zeile nach der shebang sagen?
|
axt
Anmeldungsdatum: 22. November 2006
Beiträge: 34254
|
MisterX, er hat die Gesetze doch noch nicht alle gelesen, um zu wissen, daß es hierzulande © in dieser Form nicht gibt. 😉
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hallo zusammen, vorab, ein Auszug aus ©: Im deutschen Recht entstehen Urheberrechte automatisch mit der Schaffung eines Werks.
Ein Copyright-Vermerk ist nicht erforderlich.
Der Hauptzweck des Vermerks liegt in der Übermittlung der Aussage, dass jemand Urheberrechte für sich oder andere reklamiert. Wollte einfach mal "wichtig" sein ☺
Ja, bin juristisch vorbelastet aber im Gebiet des öffentlichen Rechts. Kaum in Bereichen des Privat- und/oder Wirtschaftsrechts. Habe einige Änderungen vorgenommen.
Vor dem Download wird nun gefragt, unter welchem Pfad die Gesetze gespeichert werden sollen.
Leider habe ich es bis jetzt noch nicht geschafft, die Update-Funktion dementsprechend anzupassen. Wie immer bitte ich um Verbesserungsvorschläge! Danke und Gruß Jeanbarth
- gesetze.sh (2.0 KiB)
- Download gesetze.sh
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
Hallo habe das Skript mal probiert, Ordner anlegen geht, die Dateinamen der PDF's sind immer "gesamt.pdf". Eventuell kann man einfach $HOME als Speicherziel vorgeben, so das man nur den Ordner angeben muss. Gruss
|
axt
Anmeldungsdatum: 22. November 2006
Beiträge: 34254
|
clocker schrieb:
Dateinamen der PDF's sind immer "gesamt.pdf".
Ist ja von Juris so vorgegeben (was mich auch stört, wenn ich nur einzelne Gesetze ziehe). Vielleicht könnte man erst abfragen, welche Verzeichnisse und damit Gesetze in "/Teilliste_A.html" bis "/Teilliste_9.html" liegen und jeweils daraus mit entsprechendem Filename ziehen...was den Code enorm aufblähen würde. 😉 Vielleicht könnte man eher die Namen der gezogenen Verzeichnisse zum Umbenennen der enthaltenen gesamt.pdf-Files verwenden.
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
Laut skript soll der Dateiname dem Ordnernamen entsprechen, wenn ich das richtig "lese" Jedenfalls ist das Skript durch und hatt alles runtergeladen, sogar mit Fortsetzung des unterbrochenem Downloads des vorherigem Versuchs.
|
axt
Anmeldungsdatum: 22. November 2006
Beiträge: 34254
|
Wieviel MiB sind's denn, interessehalber? Man könnte sowas freilich auch mit httrack ziehen, wenn man das aber sonst nicht braucht, ist ein kleines überschaubares Script, das eben nur das macht, wofür man es gestartet hat, sicherlich die bessere Wahl.
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
12.394 Objekte der Gesamtgröße 195,5 MB
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hallo zusammen, erstmal Danke für die Antworten. zu:
axt schrieb: clocker schrieb:
Dateinamen der PDF's sind immer "gesamt.pdf".
Ist ja von Juris so vorgegeben (was mich auch stört, wenn ich nur einzelne Gesetze ziehe).
Eigentlich sollten beim ziehen von einzelnen Gesetzen auch "gesamt.pdf" in den Namen des Gestezes.pdf umbennen. Bei mir funktioniert dies zumindest. Ich guck nochmal drüber! Gruß
|
NoKurth
Anmeldungsdatum: 18. August 2006
Beiträge: 430
|
Hallo Jeanbarth, hallo Begutachter und Kritiker eine Überarbeitung des obigen Skripts erscheint mir -bei meinen vielen Ideen- im Moment etwas aufwendig. Daher habe ich all meine Ideen in ein eigenes Skript gegossen. Vielleicht lässt sich ja aus beiden Teilen etwas machen. ☺ (Kommentare zur Funktion sollten ausreichend vorhanden sein) 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 | #!/bin/bash
# Fuktion: liest alle verfügbaren Gesetze von "www.gesetze-im-internet.de" aus, um dann ein
# vom Benutzer angegebenes herunter zu laden
# ToDo: - Eingaben pruefen (read GESETZ; read NUMMER)
# - pruefen, ob read GESETZ Treffer ergeben hat
# - Liste mit allen Gesetzen nur auf Anforderung (oder wenn nicht verfuegbar) herunter laden
# - Zielverzeichnis eingeben oder aus Variable lesen (nicht nur aktuelles)
# - tmp-File im Homeverzeichnis (bzw. einem Unterverzeichnis) dauerhaft ablegen
# - Update bestehender Gesetze (grep auf Kurzname in Datei -> neues wget)
# - LOG-Ausgaben nur, wenn Parameter angegeben wurde
# URL, die auf die Gesetzesseiten zeigen
BASISURL=http://www.gesetze-im-internet.de
STARTSEITE=aktuell.html
# Debug-Schalter
set -o nounset
#set -o verbose
#set -o xtrace
# Routine, um Statusmeldungen auszugeben
LOG() {
echo ${1} >&2
}
# ---- MAIN ----
# tmp-Datei erzeugen
LOG "- erzeuge tmp-Datei..."
TMPFILE=$(mktemp /tmp/gesetzloader.XXXXXXXX)
# alle Unterseiten mit Gesetzen herunterladen
# wget - Hauptseite laden
# sed - alle " in <NewLine> wandeln
# grep - nur Zeilen mit "teilliste..." weiter verarbeiten
# while - alle Zeilen vom grep weiter bearbeiten
# wget - Unterseiten herunter laden
# iconv - konvertieren, damit deutsche Umlaute richtig angezeigt werden
# set - unnuetzen Text entfernen
# awk - Zeile mit "gesamt.pdf" heraussuchen - nur Titel und Teilurl ausgeben
# sort - sortieren und doppelte Zeilen entfernen
# > - in Datei speichern
LOG "- lade alle verlinkten Gesetzesseiten herunter..."
wget -c ${BASISURL}/${STARTSEITE} -q -O - | \
sed "s|\"|\n|g" | \
grep -i "teilliste_[a-z0-9]\." | \
while read SEITE
do
LOG "-- verarbeite Unterseite '${SEITE}'..."
wget -cq -O - ${BASISURL}/${SEITE}| \
iconv -f iso-8859-1 -t utf-8 | \
sed "s| ||g" | \
awk -F [\<\"] '/gesamt\.pdf/ { print $1";"$3; } '
done | \
sort -u \
> ${TMPFILE}
# Gesetzname abfragen
# aufpassen mit deutschen Umlauten, dass kann Probleme geben!!!
echo -n "Bitte Gesetz eingeben (auch Teilzeichenketten oder Abkuerzungen): "
read GESETZ
# alle passende Gesetze anzeigen und Zeilen nummerieren
# grep - passende Zeilen suchen
# sed - nur Name anzeigen, URL verschweigen
# nl - Zeilen nummerieren
grep -i ${GESETZ} ${TMPFILE} | sed "s|^\(.*\);.*$|\1|" | nl
echo -n "Bitte Nummer eingeben: "
read NUMMER
# gewuenschte Zeile ermitteln
# grep - Zeile suchen
# head - Block mit gewuenschten Zeilen heraustrennen
# tail - letzte Zeile ist die eingegebenen
GESETZGESAMT=$(grep -i ${GESETZ} ${TMPFILE} | head -n ${NUMMER} | tail -n 1)
# von Trefferzeile den 1. Teil (vor ;) rausschneiden --> Langname
GESETZNAME=$(echo ${GESETZGESAMT} | sed "s|\(^.*\);\(.*\)$|\1|")
# von Trefferzeile den 2. Teil (nach ;) rausschneide --> URL
GESETZURL=$(echo ${GESETZGESAMT} | sed "s|^\(.*\);\(.*\)$|\2|")
# aus URL den Kurzname vom Gesetz ermitteln (Aufbau ../bundesrecht/<Kurzname>/gesamt.pdf)
KURZNAME=$(echo ${GESETZURL} | awk -F [\/] ' // { print $3; } ')
# passendes Gesetz herunter laden und im aktuellen Verzeichnis ablegen
LOG "- Lade '${GESETZNAME}' als '${KURZNAME}.pdf' herunter..."
wget -cq -O ${KURZNAME}.pdf ${BASISURL}/${GESETZURL}
# Aufrauemarbeiten
LOG "- loesche tmp-Datei"
rm ${TMPFILE}
|
Bitte nicht böse sein, wenn ich (1) keine Einzelpunkte als Kritik angesprochen habe und (2) die nächste Zeit nicht antworte - URLAUB! 😎 *Vielleicht mache ich mich nach meinem Urlaub daran, die Zusammenführung zu übernehmen und alle ToDos abzuarbeiten...* Gruß
Norman PS: Die Idee zum Skript finde ich Klasse, ich wäre nie alleine darauf gekommen! Und noch einmal: Bitte nicht böse sein, dass ich das Originalskript nicht überarbeite - siehe (2) 😉 EDIT: Einen direkten Kritikpunkt habe ich - KOMMENTARE tun Wunder - auch bei einfacheren Skripten! ☺
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hi NoKurth, danke für deine Antwort. Du hast dir ja anscheinend echt viel Mühe gegeben! 😀
Bitte nicht böse sein, wenn ich (1) keine Einzelpunkte als Kritik angesprochen habe und (2) die nächste Zeit nicht antworte - URLAUB! 😎
Kein Problem ☺
*Vielleicht mache ich mich nach meinem Urlaub daran, die Zusammenführung zu übernehmen und alle ToDos abzuarbeiten...*
Würde mich freuen, da ich halt eh wenig Erfahrung mit dem schreiben von Skripten habe! PS: Die Idee zum Skript finde ich Klasse, ich wäre nie alleine darauf gekommen! Und noch einmal: Bitte nicht böse sein, dass ich das Originalskript nicht überarbeite - siehe (2) 😉
Nein, bin bestimmt nicht böse! Erstens habe ich ja um Verbesserungen gebeten und Zweitens ist es nicht mit Ziel, mit Hilfe dieses Forums sich zusammen zu tun um eine Idee/Skript so gut wie möglich zu verwirklichen? -Ich zumindest sehe dies so! EDIT: Einen direkten Kritikpunkt habe ich - KOMMENTARE tun Wunder - auch bei einfacheren Skripten! ☺
Werde mir den Kritikpunkt bei meinen nächsten Versuchen zu Herzen nehmen ☺ Schönen Urlaub und Gruß Jeanbarth
|