Lottozahlen auslesen - welche Sprache?

TommyG84

Ensign
Registriert
Jan. 2010
Beiträge
217
Servus,

ein kleines Tool möchte ich gern haben, welches die Daten von zwei verschiedenen Webseiten einliest, anschließend vergleicht und mir gefiltert ausgibt.

Welche Programmiersprache
ist dafür die Sinnvollste?



Gibt es jemand unter uns der mir für ein (höheres dreistelliges) Taschengeld dabei unter die Arme greift und das als Job macht?
 
Zuletzt bearbeitet:
wie bekommst du denn die Lotto Zahlen von der Webseite in deine Software eingelesen? Das ist nicht so trivial, wenn du keinen Zugriff auf den dahinter liegenden content hast. Welche Sprache besser geeignet ist, ist mal zweitrangig.
 
RED-Bit schrieb:
wie bekommst du denn die Lotto Zahlen von der Webseite in deine Software eingelesen? Das ist nicht so trivial, wenn du keinen Zugriff auf den dahinter liegenden content hast. Welche Sprache besser geeignet ist, ist mal zweitrangig.

Wenn ich das wüsste...

Vermutlich direkt vom Screen. Also alle Daten die ich brauche würde ich manuell beim Durchklicken mit den eigenen Augen auf den beiden Webseiten finden. Dann müsste es eine "Maschine" ja auch können...
Ergänzung ()

TheRepatriate schrieb:
Mal abgesehen davon ist JSON keine Programmiersprache, sondern eine Notation/Dateiformat

Aha. Danke. Hat das trotzdem was mit Java zu tun?
 
Zuletzt bearbeitet:
Es scheint aber wohl einen freien Webservice zu geben, über den man kostenlos die Lottozahlen abrufen kann. Das kannst du dann mit den gängigen Programmiersprachen umsetzen:

http://www.lotto-schnittstelle.de/

Es scheint eine kostenfreie Registrierung notwendig, aber ansonsten dürfte die Umsetzung ziemlich fix gehen.
JSON ist ein Format in dem Dateien "über das Web" gesendet und empfangen werden können.
 
Zuletzt bearbeitet:
vom Screen? Heute sind die Zahlen links, morgen rechts, übermorgen in einem Popup-Frame, nächsten Monat sind es Grafiken anstatt Ziffern usw.... Vergiss das sofort wieder, so programmiert man nicht. Wie ich bereits sagte, ohne Zugriff auf das CMS sehe ich da keine vertretbaren Möglichkeiten

Der Link von TheRepatriate kann funktionieren.
Nächste Frage: wieso von zwei Webseiten? Die Lottozahlen sind doch identisch, außer du möchtest ein anderes Land oder eine andere Lotterie auswerten
 
TheRepatriate schrieb:
Es scheint aber wohl einen freien Webservice zu geben, über den man kostenlos die Lottozahlen abrufen kann. Das kannst du dann mit den gängigen Programmiersprachen umsetzen:

http://www.lotto-schnittstelle.de/

Vielen Dank. Wenns nur so einfach wäre...

Mich interessiert ein anderes Produkt von Lotto:

www.oddset.de

Die Quoten der Lotto Fußballwetten brauche ich. Das sind ein paar mehr Datensätze ;)

Die 6 aus 49 zwei mal pro Woche nachzusehen wären mir die Mühe zu programmieren nicht Wert....

Klick auf "Wettprogramm PLUS" und dann bekommst von Montag bis Montag ca. 300 Fußballspiele angezeigt, unterschiedliche Partien mit unterschiedlichen Quoten.

Hab schon alles systematisiert, quasi ein Lastenheft gemacht aber selbst basteln, dafür reicht es nicht mit meinen bescheidenen Kenntnissen...
 
Zuletzt bearbeitet:
garfield_79 schrieb:
Also alle Daten die ich brauche würde ich manuell beim Durchklicken mit den eigenen Augen auf den beiden Webseiten finden. Dann müsste es eine "Maschine" ja auch können...
wenn du es schaffst GENAU DAFÜR eine Software zu schreiben, dann hast du dein Leben lang ausgesorgt. Aber genau DIESES Szenario. Stichpunkt: KI
 
C# Webbrowser Documenttext: http://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser.document(v=vs.110).aspx
C# Webbrowser: http://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser(v=vs.110).aspx
C# Regex: http://msdn.microsoft.com/de-de/library/system.text.regularexpressions.regex(v=vs.110).aspx

Müsste natürlich ständig aktualisiert werden, wenn sich die Webseite ändert. Regex und sich durch den html Code wühlen ist nichts für Leute die überhaupt nicht programmieren können.....
 
can320 schrieb:
C# Webbrowser Documenttext: http://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser.document(v=vs.110).aspx
C# Webbrowser: http://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser(v=vs.110).aspx
C# Regex: http://msdn.microsoft.com/de-de/library/system.text.regularexpressions.regex(v=vs.110).aspx

Müsste natürlich ständig aktualisiert werden, wenn sich die Webseite ändert. Regex und sich durch den html Code wühlen ist nichts für Leute die überhaupt nicht programmieren können.....

Also die Daten kann ich über HTML von der Website bekommen, ja?

Dann ist das doch die Antwort auf die Frage von RED-Bit.
 
Würde aber vorher erstmal die AGBs von oddset durchschauen ob Screen Scraping bzw das Nutzen der Daten dort auftaucht und ob es überhaupt zulässig ist.
 
Vermutlich stehen die Daten in irgendeiner HTML-Datei, die Frage ist nur wo, in welcher Form etc. Du wirst vermutlich auch ein Programm schreiben können, welches die entsprechenden Daten filtern kann, wie bereits erwähnt. Das Problem ist aber: Wer garantiert dir, dass die zurückgegebenen HTML-Dateien immer den gleichen Aufbau haben? Die Daten können morgen anders "verpackt" sein und schon ist dein Code hinfällig.
 
Ergänzung ()

-Razzer- schrieb:
Würde aber vorher erstmal die AGBs von oddset durchschauen ob Screen Scraping bzw das Nutzen der Daten dort auftaucht und ob es überhaupt zulässig ist.

Danke!

Hab ich natürlich: Kann nix Gegenteiliges in den AGBs finden. Bin auch Kunde da und möchte ja nix kommerzielles programmiert.

Mir gehts nicht ums rechtliche sondern ums technische Verständnis.
 
Solange du das ganze nur privat nutztst und der Webseitenbetreiber kein Problem damit hat, dürfte es funktionieren. So schnell ändern sich die meisten Seiten auch nicht.

Damit kann man gezielt einzelne Elemente abrufen - diese bleiben oft gleich, selbst wenn sich die Webseite drum herum ändert (solange man nicht etwas völlig allgemeines abfragt so wie im Beispiel mit "TR"):
HtmlDocument.GetElementById: http://msdn.microsoft.com/de-de/lib...ms.htmldocument.getelementbyid(v=vs.110).aspx

Browser wie z. B. Google Chrome bieten auch die Funktion, die angezeigte webseite zu analysieren. Klick oben rechts auf den Optionen Button -> Tools -> Entwicklertools - Dann werden die einzelnen Elemente auf die man klickt im Quelltext hervorgehoben und man sieht, welche ID diese haben.
 
Zuletzt bearbeitet von einem Moderator:
TheRepatriate schrieb:
Vermutlich stehen die Daten in irgendeiner HTML-Datei, die Frage ist nur wo, in welcher Form etc. Du wirst vermutlich auch ein Programm schreiben können, welches die entsprechenden Daten filtern kann, wie bereits erwähnt. Das Problem ist aber: Wer garantiert dir, dass die zurückgegebenen HTML-Dateien immer den gleichen Aufbau haben? Die Daten können morgen anders "verpackt" sein und schon ist dein Code hinfällig.

Du hast Recht.

Dieses Risiko besteht. Das kann ich aber eingehen. Lottomitarbeiter haben besseres zu tun alles dauernd ihre Website zu verändern wenn nicht zwingend nötig, oder?

Einmal in der Woche wird die Seite mit neuen Daten gefüllt. Die Struktur bleibt optisch auf dem Screen zumindest gleich.
 
Ist gar kein Problem und kann mit verschiedenen Sprachen gelöst werden. Ich würde es vermutlich in einem Shell-Script abfrühstücken bzw. wenn es eine portable Anwendung sein muss, dann mit Java in Verbindung mit Jsoup. Spricht aber auch überhaupt nichts dagegen das ins Python, Perl, C#, you name it zu lösen.

Wenn du das Programm verstehst, kannst du das vermutlich auch eigenständig nachpflegen, wenn es kleine Strukturveränderungen an der Seite gibt.
 
Habe gerade mal nachgeschaut und festgestellt, dass der C# Browser die Seite falsch darstellt. Die Ergebnisliste bleibt leer. Andere Ergebnislisten werden falsch formatiert angezeigt (und können vermutlich noch ausgelesen werden). Musst dir wohl was anderes einfallen lassen ;)

Nachtrag:
- Du könntest die Daten von einer anderen Seite auslesen, falls es eine andere gibt
- Oder du gehst jedes mal auf die Seite und kopierst die gesamte Seite mit Strg+A und Strg+C und fügst den Textinhalt in dein Programm ein. Und durchsuchst es Zeile für Zeile. Ist fehleranfälliger.....
 
Zuletzt bearbeitet von einem Moderator:
Tumbleweed schrieb:
Ist gar kein Problem und kann mit verschiedenen Sprachen gelöst werden.
"Gar kein Problem" kann ich so nicht unterschreiben. Je nachdem wie der DOM aufgebaut ist kann es quasi sogar unmöglich sein, die korrekten Daten auszulesen.
 
Es funktioniert doch mit der Darstellung, wenn man "FEATURE_BROWSER_EMULATION" ändert. Einfach die Methode aufrufen, bevor man im C# Browser die Webseite aufruft.

http://stackoverflow.com/questions/15874565/how-to-set-ie9-by-default-for-web-browser


Hier der C# Code mit dem man schonmal an die wesentlichen Daten kommt:


PHP:
    public partial class Form1 : Form
    {
        private static string mNameDerSeite = "*******"; // muss angepasst werden
        private Uri mMeineUri = new Uri("http://www." + mNameDerSeite + ".de");

        public Form1()
        {
            InitializeComponent();

            WebBrowserVersionEmulation();
            webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
            webBrowser1.Navigate(mMeineUri);
        }

        async void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (e.Url.AbsoluteUri == "https://www." + mNameDerSeite + ".de/de/annahmestelle/wettprogramm-plus")
            {
                await Task.Delay(3000);

                HtmlElement element = webBrowser1.Document.GetElementById("betPlusGameContainer");


                string daten = element.InnerText; // könnte man mit Regex durchsuchen oder einfach in einer Schleife Zeile für Zeile
                string daten2 = element.InnerHtml;

                //HtmlElementCollection test1 = element.GetElementsByTagName("hierKommtTagRein");
                //string test2 = element.GetAttribute("HierKommtAttributRein");
               
                
            }
        }

        private static void WebBrowserVersionEmulation()
        {
            const string BROWSER_EMULATION_KEY =
            @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
            //
            // app.exe and app.vshost.exe
            String appname = Process.GetCurrentProcess().ProcessName + ".exe";
            //
            // Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
            const int browserEmulationMode = 9999;

            RegistryKey browserEmulationKey =
                Registry.CurrentUser.OpenSubKey(BROWSER_EMULATION_KEY, RegistryKeyPermissionCheck.ReadWriteSubTree) ??
                Registry.CurrentUser.CreateSubKey(BROWSER_EMULATION_KEY);

            if (browserEmulationKey != null)
            {
                browserEmulationKey.SetValue(appname, browserEmulationMode, RegistryValueKind.DWord);
                browserEmulationKey.Close();
            }
        }
 
    }
 
Vielen Dank für eure Antworten und wertvollen Hinweise!

Hab Hilfsangebot per PM bekommen, was mich sehr freut:

Wir schauen mal wie weit wir kommen und wo sich eine konkrete Problemstellung/neue Frage auftut, poste ich diese wieder gezielt. :schaf:

Vorwärts immer, rückwärts nimmer!
 
Zuletzt bearbeitet:
Zurück
Oben