Open Source im professionellen Einsatz
Linux-Magazin 06/2016
© stokkete, 123RF

© stokkete, 123RF

Perl-Skript kontrolliert Zahlungen und Feedback bei Ebay-Verkäufen

Ladenhüter

Ein Screenscraper und eine Applikation für das offizielle Ebay-API lösen Alarm bei neu eingegangenem Kunden-Feedback aus und spüren Fehler in der monatlichen Ebay-Abrechnung auf.

855

Wenn ich irgendwann meine Memoiren schreibe, bette ich dort eine längliche Abhandlung über meinen Lebensleitsatz ein, der da heißt: "Was du nicht ständig kontrollierst, läuft irgendwann garantiert unbemerkt schief." Getreu diesem Motto möchte ich sofort eine E-Mail erhalten, wenn einer meiner Ebay-Kunden sein Feedback über eine Transaktion hinterlassen hat.

Einfach abspachteln

Um mich zunächst nicht bei Ebay als Developer anmelden zu müssen, schrieb ich einen Screenscraper, der aus dem HTML-Salat der Feedback-Seite die aktuelle Anzahl der Feedbacks herausfieselt, abspeichert und bei späteren Tests Alarm schlägt, falls sich der Zähler erhöht hat.

Online PLUS

Im Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/Ausgaben/2016/06/plus

Klicke ich auf Ebay.com meinen Usernamen an, lande ich auf der Feedback-Seite in Abbildung 1. »view-source« im Browser bringt den HTML-Code aus Abbildung 2 zum Vorschein, und eine Textsuche nach dem String »362« (die aktuelle Anzahl der Feedbacks) zeigt, dass diese sich in einem Markup-Tag der Klasse »mbg-l« befindet:

Abbildung 1: Auf der Feedback-Seite bei E-Bay steht die Anzahl der bisher eingegangenen Kundenkommentare - hier 362.
Abbildung 2: In einem HTML-Element der Klasse mbg-l steht die Anzahl der Feedbacks: 362.
( 362<img src="...

Ein XPath-Prozessor wie HTML::TreeBuilder::XPath kann den Inhalt dieses Tag einfach hervorholen, die Abfrage

/html/body//span[@class="mbg-l"]

findet alle »span« -Elemente im HTML-Body, die ein »class« -Attribut mit dem Wert »mbg-l« führen. Der doppelte Schrägstrich im Ausdruck gibt an, dass sich die gesuchten Elemente in beliebiger Verschachtelungstiefe unterhalb des HTML-Body-Tag befinden dürfen.

Der XPath-Query spuckt dann einen String wie etwa »( 362) (...« aus. Daraus mittels eines regulären Ausdrucks in Perl die erste Zahl herauszulösen ist ein Kinderspiel. Listing 1 tut genau dies in der Funktion »feedback_fetch« ab Zeile 70, speichert dann die gefundene Zahl in einer Cachedatei, vergleicht den Wert dort beim nächsten Aufruf mit dem aktuell eingeholten und feuert eine E-Mail ab, wenn der Zähler sich erhöht hat.

Listing 1

ebay-feedback

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Sysadm::Install qw(:all);
04 use LWP::Simple ;
05 use HTML::TreeBuilder::XPath;
06 use Log::Log4perl qw(:easy);
07
08 my $nick      = "my-ebay-name";
09 my $ebay_url  =
10   "http://feedback.ebay.com" .
11   "/ws/eBayISAPI.dll?ViewFeedback2" .
12   "&userid=$nick";
13
14 my( $home )   = glob "~";
15 my $data_dir  = "$home/logs";
16 my $cache     =
17   "$data_dir/ebay-feedback.cache";
18 my $log_file  =
19   "$data_dir/ebay-feedback.log";
20
21   # mail prefs
22 my $mailer    = "/usr/bin/mail";
23 my $mail_to   = 'my@email.com';
24
25 mkd $data_dir if !-d $data_dir;
26
27 Log::Log4perl->easy_init( {
28   level => $DEBUG,
29   file => ">>$log_file" } );
30
31 my $last_feedback;
32
33 if( -f $cache ) {
34   $last_feedback = slurp $cache;
35 }
36
37 my $feedback = feedback_fetch();
38
39 if( !defined $last_feedback or
40   $last_feedback != $feedback ) {
41
42   $last_feedback ||= 0;
43
44   INFO "New feedback: $feedback";
45   INFO "Sending mail to $mail_to";
46
47   open PIPE,
48     "| $mailer -s 'New Ebay Feedback: " .
49     "$feedback' $mail_to";
50
51   print PIPE <<EOT;
52 Ebay feedback changed: It's $feedback now
53 and was $last_feedback yesterday:
54
55     $ebay_url
56
57 Greetings!
58
59 Your faithful Ebay feedback scraper.
60 EOT
61   close PIPE;
62
63   blurt $feedback, $cache;
64
65 } else {
66   INFO "Feedback unchanged ($feedback).";
67 }
68
69 ###########################################
70 sub feedback_fetch {
71 ###########################################
72   INFO "Fetching $ebay_url";
73
74   my $content = get $ebay_url;
75
76   if( !defined $content ) {
77     ERROR "Fetching $ebay_url failed";
78     return undef;
79   }
80
81   my $tree= HTML::TreeBuilder::XPath->new;
82   $tree->parse( $content );
83
84   my( $text ) = $tree->findvalue(
85       '/html/body//span[@class="mbg-l"]');
86
87   if( $text =~ /\s*(\d+)/ ) {
88     return $1;
89   }
90
91   ERROR "Pattern in page not found";
92   return undef;
93 }

E-Mail als Kommando

Das Schreiben und Lesen der Cachedatei, die als einzigen Wert die beim letzten Aufruf festgestellte Anzahl der Feedbacks speichert, erledigen die Funktionen »slurp« und »blurt« aus dem CPAN-Modul Sysadm::Install, die diese in Zeile 3 exportieren. Zum Einholen der E-Bay-Seite nutzt das Skript das abgespeckte Modul LWP::Simple, dessen »get« -Methode schlicht einen HTTP-Request auf die angegebene URL absetzt und den Inhalt der gefundenen Seite im Erfolgsfall zurückgibt.

Unter Linux eine Mail abschicken lässt sich oft ganz einfach mit dem Utility »/usr/bin/mail« erledigen, wer mehr Flexibilität wünscht, dem sei das CPAN-Modul Mail::DWIM empfohlen. Da ich auf meiner Linux-Kiste daheim »/usr/bin/mail« bereits durch ein Perl-Skript ersetzt habe, das mit den Erfordernissen meines ISP zurechtkommt, ließ ich es dabei. Abbildung 3 zeigt die eingetroffene E-Mail in meinem Gmail-Account.

Abbildung 3: Eine Mail benachrichtigt den User über das neu eingetroffene Feedback eines Käufers.

Vor der Inbetriebnahme sind noch die Parameter am Skriptkopf an die lokalen Verhältnisse anzupassen. In Zeile 8 erhält die Variable »$nick« den Namen des Ebay-Users zugewiesen, dessen Feedback-Zähler »ebay-feedback« überwachen soll. Die URL gilt für US-Ebay-Accounts, deutsche Accounts laufen statt dessen unter http://ebay.de. Und schließlich benötigt Zeile 23 in der Variablen »$mail_to« noch die Mailadresse des Users, an den die Alarm-E-Mails gehen sollen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Perl-Snapshot 2016/06

    Ein Screenscraper und eine Applikation für das offizielle Ebay-API lösen Alarm bei neu eingegangenem Kunden-Feedback aus und spüren Fehler in der monatlichen Ebay-Abrechnung auf. Im Video zeigt Michael Schilli wie es funktioniert.

  • E-Commerce-APIs

    Gutgehende Onlineshops sind selten und das Ergebnis langer Arbeit. Wer gerade erst beginnt Waren zu verticken, tut gut daran, bei einem großen Shoppingportal unterzuschlüpfen. Über APIs lassen sich eigene Warenwirtschafts- oder Buchhaltungsprogramme anbinden.

  • E-Baywatcher

    Wer in letzter Sekunde in Versteigerungen eingreifen will, lässt sich rechtzeitig von einem Perl-Agenten daran erinnern. Der Agent sucht auf Ebay nach Stichworten und informiert seinen Mandanten sofort per Instant Message, wenn sich eine passende Auktion dem Ende nähert.

  • Vollgas mit Debian

    Auf der Suche nach einem fahrbaren Untersatz führt der Weg immer öfter ins Web. Einen der größten virtuellen Fuhrparks hostet Mobile.de - Linux- und Open-Source-Technologie sorgen für den reibungslosen Ablauf.

  • Perl-Snapshot

    Der Projekthoster Github beherbergt nicht nur die Code-Repositories vieler bekannter Open-Source-Projekte, sondern bietet auch ein durchdachtes API an, mit dem sich in ihnen herrlich herumschnüffeln lässt.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.