Gastbeitrag von Pit
Hand auf’s Herz: Amazon-Preise sind nicht selten die günstigsten auf dem Markt. Es gibt eine Menge Gründe, dort nicht zu kaufen. Am Ende siegt aber der Wunsch, zu sparen. Da es aber lästig ist, Amazon für jeden gewünschten Artikel aktiv im Browser aufzurufen, war ich auf der Suche nach einer Lösung, die mich automatisch informiert, sobald dort ein Artikelpreis reduziert wird.
Durch eine Web-Recherche stieß ich auf ein YouTube-Video des indischen Users BugsWriter:
BugsWriter erklärt darin, wie man mit den Entwickler-Tools des Browsers css-Klassen oder -IDs identifiziert und danach mit dem Programm pup filtert. Im Video demonstriert er das anhand einer Amazon-Artikelseite, aus der er den Preis ohne Punkt oder Komma und Cent-Beträge extrahiert und in eine Variable schreibt. Ein paar Script-Zeilen mehr lösen nur dann einen solchen Info-Dialog via notifly-send aus, wenn der hinterlegte Preis unterboten wurde:
Das Script
#!/bin/bash
# TUTORIAL => https://youtu.be/mtDoQDp0nj8
# Check: pup installiert?
command -v pup >/dev/null 2>&1 || { echo -e >&2 "++++++++++\n\nBenötigt wird die cli-Anwendung pup (zum "parsing" von html),\nes ist aber nicht installiert.\nAbbruch.\n\n++++++++++"; exit 1; }
### als ALTERPREIS nur Euro-Wert ohne Punkt/Komma und Cents !! ###
### start edit ###
ARTIKEL="HIER ARTIKEL-BEZEICHNUNG"
URL="HIER AMAZON URL"
ALTERPREIS=00
### stop editing below ###
userid=$(id -u)
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$userid/bus"
export DBUS_SESSION_BUS_ADDRESS
webpage=$(curl -s $URL --compressed -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0')
NEUERPREIS=$(echo $webpage | pup 'span[class="a-price-whole"] text{}' | sed -e 's/\.//' | head -n 1)
(( $NEUERPREIS < $ALTERPREIS )) && notify-send -i kalarm -a "REDUZIERT VON $ALTERPREIS € auf $NEUERPREIS €!" "$ARTIKEL" "<a href='$URL'>zum Amazon Angebot ...</a>" -t 0 -A OK
Variablen befüllen
Es sind nur drei Variablen zu befüllen:
- Artikelbezeichnung
- URL
- zu unterbietender Preis (ohne Punkt/Komma und Cents)
Die URL kann kurz gehalten werden. Beispiel:
Statt (lang)https://www.amazon.de/Blue-interne-Festplatte-Lese-Schreibgeschwindigkeit/dp/B073SBQMCX?ref_=Oct_DlandingS_D_8e8139b6_0
reicht auch (kurz)https://www.amazon.de/dp/B073SBQMCX
In der URL gelöscht ist die Artikelbezeichnung hinter amazon.de
und beginnend mit ?ref
alles was folgt.
Das Script als Muster abspeichern in einem Verzeichnis, das im Pfad enthalten ist (Check via echo $PATH) – z.B. unter dem Namen amazon-template, ausführbar machen mit chmod +x amazon-template
und bei Bedarf mit zum Artikel passendem Namen kopieren und in der Kopie die drei Variablen korrigieren.
Zeitgesteuert …
Das Ganze als Cronjob konfigurieren und fertig:
Scraping Amazon Artikel, filtern nach Preis mittels pup
und informiert via notify-send
, wenn Preis kleiner als x:
30 */1 * * * /usr/bin/bash /home/pit/.local/bin/artikel1 >> /home/pit/.crontab.log 2>&1 30 */1 * * * /usr/bin/bash /home/pit/.local/bin/artikel2 >> /home/pit/.crontab.log 2>&1 30 */1 * * * /usr/bin/bash /home/pit/.local/bin/artikel3 >> /home/pit/.crontab.log 2>&1
Ich nutze Siduction (Distribution basierend auf Debian Unstable/Sid). Das Konsolenprogramm pup
lässt sich über die Debian Paketverwaltung installieren. Ich hoffe aber, dass das oben beschriebene auch in anderen Umgebungen funktioniert. Kommentiert gern auch dann, wenn ihr auf Probleme stoßt.
Nochmals kurz zurück an alle, für die ein Einkauf bei Amazon moralisch schwierig ist: Das oben beschriebene lässt sich auf alle möglichen Websites/Shops bezogen anwenden. Amazon an dieser Stelle bitte nur exemplarisch verstehen.
Foto von Markus Winkler auf Unsplash