Wie man bwin-Mails mit PHP parsed hatte ich ja schonmal beschrieben, jedoch habe ich das ganze nun nochmal in Ruby und mit IMAP statt POP3 wiederholt. Nun kann ich jede ungelesene Mail (ohne den Flag "Seen") abrufen und muss mir keine Sorgen mehr machen, dass ich die Mails doppelt parse.
Bei mir hatte der Code im IMAP-Framework übrigens einige Fehler, die ich natürlich auch ausgemerzt habe.
Der Code macht fast dasselbe wie in der PHP-Version:
- Alle ungelesene Mails von bwin abrufen
- Parsen
- Wettart (Einzel oder Kombi), Einsatz, ggf. Gewinn und neuen Kontostand ausgeben
- Bearbeitete Mails als gelesen markieren
Dabei hat mir dieser
Blog-Eintrag über die Äquivalenten von PHP in Ruby übrigens sehr geholfen. Danke!
##
# (MIT-License)
# Copyright (c) 2009 Simon Woker
# Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt, uneingeschränkt zu benutzen, inklusive und ohne Ausnahme, dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:
# Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in alle Kopien oder Teilkopien der Software beizulegen.
# DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.
#
# Getestet mit den Mails von bwin.com/de (Stand: 24-Nov-2009)
##
IMAP_USERNAME = 'hallo@example.com'
IMAP_PASSWORD = 'pass'
IMAP_HOST = 'imap.example.com'
IMAP_SEARCH = ['FROM', 'bwin', 'SUBJECT', 'Wett-Mitteilung', 'NOT', 'SEEN']
REGEX = /([0-9\.]+)[ ]+EUR|(Kombiwette|Einzelwette)/
REGEX_WIN_COUNT = 8
REGEX_FAIL_COUNT = 6
require 'net/imap'
imap = Net::IMAP.new(IMAP_HOST, 993, true)
imap.login(IMAP_USERNAME, IMAP_PASSWORD)
imap.select('INBOX')
begin
imap.search(IMAP_SEARCH).each do |message_id|
mailtext = imap.fetch(message_id, "BODY[TEXT]")[0].attr["BODY[TEXT]"]
results = mailtext.scan(REGEX)
if REGEX_WIN_COUNT == results.size or REGEX_FAIL_COUNT == results.size
balance = results[0]
type = results[1]
stake = results[2]
if REGEX_WIN_COUNT == results.size # win
win = results[3]
text = "#{type} gewonnen!
// Gewinn #{win}"
else # lost
text = "#{type} verloren! :-("
end
text += " // Einsatz #{stake} // Kontostand #{balance}"
puts text
imap.store(message_id, "+FLAGS", [:Seen])
else # else: parsing failed
puts "parsing failed"
end
end
rescue
puts "no mails to process"
end
imap.logout
imap.disconnect