Open Source im professionellen Einsatz

© philiph, photocase.com

Perl-Skript überwacht Preise bei Amazon

Geiz ist geil

Ein Perl-Skript verfolgt für Schnäppchenjäger die Preisentwicklung auf Amazon und schlägt per E-Mail freudig Alarm, falls sich überwachte Produkte plötzlich verbilligen.

Soll ich die Digitalkamera, die ich mir so sehnlichst wünsche, gleich heute kaufen? Oder lieber noch darauf warten, dass sie morgen vielleicht billiger zu haben ist? Keine leichte Frage, aber ein Blick auf die Kamerapreise der letzten Monate verrät mir vielleicht, mit welcher Preisentwicklung ich wahrscheinlich rechnen kann.

Böte Amazon nach dem Vorbild der Aktienkurse auf großen Finanzseiten die Preisentwicklung der gehandelten Produkte, dann würde sich der Kunde unter Umständen ärgern, wenn er ein Angebot verpasst hat. Oder aber er spekuliert dann erst recht darauf, dass sich der Preisverfall noch fortsetzt und ihm bald günstigere Konditionen beschert. Einige Preisvergleichs-Seiten bieten eine solche Historie-Funktion, mitteln dabei allerdings den Preis aller Anbieter und verraten an dieser Stelle nicht, wer den Tiefpreis-Rekord hält.

Nun bietet aber der Versandhändler Amazon noch keine Statistik der Preisentwicklung an und wird das womöglich auch niemals tun. Das macht nichts - es ist nämlich nicht übermäßig schwer, sich diese Funktion mit einem kleinen Perl-Skript selber nachzurüsten.

Das hier vorgestellte Skript »amtrack« (Listing 1) liest eine Konfigurationsdatei »~/.amtrack-rc« nach Abbildung 1 aus, um herauszufinden, für welche Artikel der Benutzer sich interessiert. Ein Cronjob ruft es in regelmäßigen Abständen auf, wobei es sich jedes Mal mit dem Amazon-Webservice verbindet, die aktuellen Preise aller konfigurierten Artikel abfragt und sie in einer lokal angelegten SQLite-Datenbank speichert.

Abbildung 1: Die Konfigurationsdatei »~/.amtrack-rc« listet alle zu überwachenden Produkte samt ihren Amazon-eigenen ASIN-Nummern auf.

Abbildung 1: Die Konfigurationsdatei »~/.amtrack-rc« listet alle zu überwachenden Produkte samt ihren Amazon-eigenen ASIN-Nummern auf.

Alarm bei Preisverfall

Sinkt der Preis eines Artikels, schickt das Skript eine E-Mail mit der Produkt-URL und dem derzeit aktuellen Preis an die in Zeile 79 voreingestellte E-Mail-Adresse. Der erfreute Schnäppchenjäger braucht dann nur noch in seinem E-Mail-Client auf die angegebene URL zu klicken, um sofort danach im Browser einen letzten Blick auf das Produkt zu werfen und es anschließend spontan zu kaufen.

Da die Preise in einer Datenbank liegen, kann das Skript selbst historische Daten ohne Weiteres abfragen und darstellen. Der Aufruf »amtrack -l« liefert die zuletzt eingeholten Preise aller überwachten Produkte (Abbildung 2). Den gesamten Inhalt der Datenbank gibt die Option »-a« aus, das kann sich nach längerer Laufzeit des Preiswächters allerdings etwas in die Länge ziehen.

Abbildung 2: Beim Aufruf mit der Option »-l« listet Amtrack die aktuellen Preise aller zur Überwachung eingetragenen Produkte.

Abbildung 2: Beim Aufruf mit der Option »-l« listet Amtrack die aktuellen Preise aller zur Überwachung eingetragenen Produkte.

Ganz ohne Optionen aufgerufen, arbeitet sich »amtrack« durch die in der Konfigurationsdatei »~/.amtrack-rc« definierten Produktkürzel und frischt die Datenbank mit den aktuellen Preisen auf.

Die Konfigurationsdatei besteht aus zwei Spalten: In der ersten steht die ASIN-Nummer des gewünschten Produkts und rechts, durch ein oder mehrere Leerzeichen getrennt, eine kurze Produktbeschreibung. Die ist zwar für die Datenbank unwesentlich, erweist sich aber für die übersichtliche Darstellung in den E-Mails als nützlich. Kommentarzeilen fangen mit »#« an, das Skript ignoriert sie ebenso wie Leerzeilen.

Die Funktion »config_read()« ab Zeile 92 in Listing 1 liest die Konfiguration ein und gibt zwei Referenzen zurück: eine auf einen Array »@config« und eine auf einen Hash »%config«. Während der Array Wertepaare aus ASIN und Beschreibungen enthält, weist der Hash den ASINs ihren zugehörigen Text zu.

Bei Amazon wühlen

Das CPAN-Modul Net::Amazon bildet eine objektorientierte Schnittstelle zu Amazons REST-basiertem Webservice. Der Anwender gibt einfach die so genannte ASIN-Nummer eines Produkts an - und schon kontaktiert das Modul Amazon und holt den Preis ein.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook