tanken script
von Buerste- SNIPPET_TEXT:
-
- #!/bin/bash
- # - 12.10.2013 -
- #
- ###########################################################
- #
- # Benutzung auf eigene Verantwortung
- #
- ###########################################################
- #
- # geändert von djeli 17.10.2013 für den eigenen Gebrauch
- # semikolon als Zellentrenner eingebaut
- # für Libre Office Calc
- #
- # aufruf: im Terminal
- # ausgabe: im Terminal und in Datei "/home/user/Benzinpreißtabelle.txt"wird angehängt
- #
- #
- ############################################################
- Hilfe(){
- echo "${0##*/} ist ein Benzinpreisanzeiger (Version 2013-10-14.a)"
- echo "Syntax: ${0##*/}"
- exit
- }
- test "${1}" = "-h" -o "${1}" = "-help" -o "${1}" = "--help" && Hilfe
- Ende(){
- rm "$Temp1" "$Temp2"
- exit ${1:-0}
- }
- # Noch umständlich formuliert zur einfachen Anpassung wegen dem Beta-Status der Seite
- # Konstanten
- Url="http://www.clever-tanken.de/tankstelle_liste"
- Temp1="$(mktemp)"
- Temp2="$(mktemp)"
- # Benutzervariablen
- Spritsorte=3 # 3=Diesel, 5=Super-E10, 7=Super-E5
- Tankenliste=~/bin/Tankenliste.txt
- # Es werden zunächst nur die 5-Stelligen Postleitzahlen beachtet und komplett abgearbeitet.
- # Erst in der Verifikation werden unerwünschte Tanken rausgeworfen.
- # Dabei gilt: Steht eine Postleitzahl alleine in der Tankenliste, wird davon keine Tanke rausgeworfen.
- for p in $(grep -Eo '[0-9]{5}' "$Tankenliste" | awk '!a[$0]++'); do
- u="${Url}?ort=${p}&spritsorte=${Spritsorte}"
- wget -q "$u" -O - >>"$Temp2" || echo "Fehler: Download von '$u' fehlgeschlagen"
- done
- [ -s "$Temp2" ] || { echo "Fehler: Keine------ Daten vorhanden"; Ende 1; }
- # Schnelle Vorfilter
- #
- # Datentable ausfiltern
- sed -n '/<table id="price-list"/,/<\/table>/p' "$Temp2" >"$Temp1"
- #
- # Datensätze nur der geöffneten Stationen ausfiltern (tr-Tag ohne class)
- ##############################################################################
- sed -n '/<tr><td class="price-cell">/,/<\/tr>/p' "$Temp1" >"$Temp2"
- #
- ##############################################################################
- # Leerzeichen und Tabs am Zeilenanfang rauswerfen; mehrfache Leerzeichen rauswerfen; Zeilen mit ausschließlich Whitespaces rauswerfen
- sed 's/^[ \t]*//;s/ \+/ /g;/^\s*$/d' "$Temp2" >"$Temp1"
- # Defaults zum Filtern der Datensätze
- RegexPrice="<p class=\"price\">"
- SnipPrice=0
- RegexStationName="<p class=\"petrol-station-name\">"
- SnipStationName=0
- RegexStationAddress="<p class=\"petrol-station-address\">"
- SnipStationAddress=0
- RegexEndStationAddress="</p>"
- RegexEndData="</tr>" # Ein Datensatz ist beendet
- Datetime="$(date +"%d.%m.%Y"";""%H:%M:%S")"
- # Datensätze in jeweils eine Zeile ausfiltern
- while read l; do
- # Datum&Zeit und Preis mit sup (10tel Cent): Nach Zeile <p class="price">
- [[ $l =~ $RegexPrice ]] && { SnipPrice=1; continue; }
- if (( $SnipPrice )); then
- echo -n ${l//[^0-9.]/}"; $Datetime"
- SnipPrice=0
- continue
- fi
- # Name: Zeile nach <p class="petrol-station-name">
- [[ $l =~ $RegexStationName ]] && { SnipStationName=1; continue; }
- if (( $SnipStationName )); then
- echo -n ";"${l//<*>/}
- SnipStationName=0
- continue
- fi
- # Adresse: Zeilen nach <p class="petrol-station-address"> bis Zeile vor </p>
- [[ $l =~ $RegexStationAddress ]] && { SnipStationAddress=1; continue; }
- if (( $SnipStationAddress )) && [[ $l =~ $RegexEndStationAddress ]]; then
- SnipStationAddress=0
- continue
- fi
- if (( $SnipStationAddress )); then
- echo -n ";"${l//<*>/}
- continue
- fi
- # Ende eines Datensatzes
- [[ $l =~ $RegexEndData ]] && { echo; continue; }
- done <"$Temp1" >"$Temp2"
- # Verifikation der Datensätze (fehlt noch)
- # Tests
- #
- cat "$Temp2"
- cat >> Benzinpreißtabelle.txt "$Temp2"
- #
- Ende
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN