Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Lottozahlen von lotto.de abrufen (https://www.delphipraxis.net/178198-lottozahlen-von-lotto-de-abrufen.html)

Gutelo 23. Dez 2013 01:03

Lottozahlen von lotto.de abrufen
 
Hallo,

ich moechte die aktuellen Lottozahlen von der Webpage www.lotto.de auslesen. Fur C++ Builder habe ich folgenden Code in einem anderen C++ Forum gefunden:

Code:
  WebClient wc = new WebClient();
  textBox1.Text = wc.DownloadString(@"http://www.lotto.de");
  string regex = "<div id=\"hp649gwzLeft\">.*?<div class=\"lottonumbers\">(?:\\s+<span>([\\d]{1,2})</span>){6}";
  RegexOptions options = RegexOptions.Singleline | RegexOptions.IgnoreCase;

  Regex reg = new Regex(regex, options);
  var m = reg.Match(textBox1.Text);

  var numbers = m.Groups[1].Captures;
  foreach (var n in numbers) MessageBox.Show(n.ToString());
Diesen Code hab ich folgendermassen in Delphi umgesetzt bis auf die letzten zwei Zeilen:

Code:
var RegEx : TRegEx;
    RegExStr : String;
    Match : TMatch;

Memo1.text := IdHttp1.Get('http://www.lotto.de/de/spielschein.html');
RegExStr := "<div id=\"hp649gwzLeft\">.*?<div class=\"lottonumbers\">(?:\\s+<span>([\\d]{1,2})</span>){6}";
RegEx := TRegEx.Create(RegExStr,[roSingleLine,roIgnoreCase]);
Match := RegEx.Match(RegExStr);
Bei den letzten beiden Zeilen im C++ Code habe ich das Problem dass es keine Property Match.Groups[1].Capture bei der Delphi Klasse gibt. Bisher wird der Quellcode der html Seite erfolgreich geladen und das matching klappt wie ich mit einfacheren Suchstrings (z.B. RegExStr := 'Lotto') ausprobiert habe. Allerdings muss RegExStr noch getuned werden, da sich das Layout bei Lotto.de geaendert hat und der Suchstring damit nicht mehr stimmt.

Hat jemand eine Idee wie ich die zwei letzten Zeilen im C Code in Delphi umsetze? Fuer Tipps wie RegExStr fuer die aktuelle Webpage aussehen muesste waere ich auch dankbar.

Der Aktuelle Quellcode fuer die Zahlen lautet:

<div class="winning_numbers boxRow clearfix"> <h3><img src="/images/fp-c334fbe9-logo_lotto_small.gif" width="109" height="16"/></h3> <ul class="clearfix" data-bind="with: lotto6aus49()"> <li data-bind="text: zahl(1)"></li> <li data-bind="text: zahl(2)"></li> <li data-bind="text: zahl(3)"></li> <li data-bind="text: zahl(4)"></li> <li data-bind="text: zahl(5)"></li> <li data-bind="text: zahl(6)"></li> <li data-bind="html: zusatzzahl(), visible: zusatzzahl() != null" class="last"></li> <li data-bind="html: superzahl(), visible: superzahl() != null" class="last"></li> </ul> </div>

Ich hab keine Ahnung wie man daraus die Zahlen erhalten soll. Das sieht eher aus wie Variablen die von einem Skript gefuellt werden.

Frohe Weihnachten

Gutelo

Popov 23. Dez 2013 07:08

AW: Lottozahlen von lotto.de abrufen
 
Also für den Fall, dass ich deine Frage falsch verstanden habe, diese Antwort ignorieren (ist einfach noch zu früh am Morgen).

Wenn es drum geht die Zahlen aus dem Html-Code Salat zu holen, das ist machbar.

Mit Pos sucht man die Position von "text: zahl("
Mit Delete löscht man alles bist zu dem Text (Inklusive)

Mit Pos sucht man die Position von ")"
Mit Copy kopiert man alles bis zu der Position. Ergebnis ist eine Zahl (Zahl befindet sich ja zwischen "text: zahl(" und ")").

Das alles in einer Schleife durchlaufen lassen bis alles durch ist.

Fertig.

Gutelo 23. Dez 2013 07:20

AW: Lottozahlen von lotto.de abrufen
 
Hallo Popov,

es waere schoen wenn das die gesuchten Zahlen waeren :) Aber 1,2,3,4,5,6 waren es nicht am letzten Ziehungstag. zahl(N) ist glaub ich eine Funktion die den Parameter N= 1, 2, 3, ... bekommt fuer erste, zweite, dritte,... Zahl der Ziehung. Die Funktion liefert dann den Wert zurueck. Das wird sozusagen vom Browser erledigt.

Es gibt ja fuer jedes Bundesland eine Lotto-Seite. Bei lotto-sachsen stehen die Ziehungszahlen schoen im klartext im html ohne dieses bescheuerte JavaScript.

Ich muss mich nur noch in die RegEx Ausdruecke reinpfrimeln.

Gutelo

Popov 23. Dez 2013 07:33

AW: Lottozahlen von lotto.de abrufen
 
Ok, wie gesagt, ist noch zu früh.

Also wenn das so nicht geht, dann entweder die Funktionen selbst auswerten oder den Browsertext filtern.

Gutelo 23. Dez 2013 07:39

AW: Lottozahlen von lotto.de abrufen
 
Auch wenn es anders geht, wuerde ich doch gerne wissen wie man das generell machen kann wenn Javascript verwendet wird.

Neutral General 23. Dez 2013 08:11

AW: Lottozahlen von lotto.de abrufen
 
Ich hatte mir die Lottozahlen damals von einer anderen Seite runtergeladen.
Ohne nachzugucken kann ich dir auswendig aber nicht mehr sagen wo das war...

Perlsau 23. Dez 2013 09:43

AW: Lottozahlen von lotto.de abrufen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Als ich letztes Jahr meine Lottoanwendung zusammengestrickt hatte, nahm ich mir viel Zeit, um die besten Aktualisierungsseiten herauszufinden und die Orte, wo man das Ganze auch ohne HTML-Parserei runterladen kann.

Fazit: Es gibt zwar CSV- und Excel-Archive zum Runterladen, aber die werden wohl nicht immer zeitnah gepflegt. Ich hab mich dann nach vielem Herumprobieren für diese Seite entschieden: Da ist alles drin, was ich brauche, auch die Gewinnquoten und die Anzahl der Gewinner usw.

Gutelo 23. Dez 2013 11:20

AW: Lottozahlen von lotto.de abrufen
 
Danke Perlsau,

ich hab jetzt eine erste Rumpfimplementation. Fuer diejenigen die es interessiert hier das Grundgeruest:

Code:
procedure TMainForm.Button2Click(Sender: TObject);
var sl: TStringList;   // Store Webpage Source Code
    RegExStr : String; // Search Expression
    RegEx : TRegEx;    // Expression Evaluation Class
    MatchCollection : TMatchCollection; //Store all Determined Matches
    i: Integer;
    LottoNumbers : String;
begin
  // Read Lotto Webpage
  sl:=TStringList.Create;
  sl.Text := IdHttp1.Get('http://www.sachsenlotto.de/mskp/user/lottoresults/lottoresultsshow.do?ziehungsDatum=18.12.2013#');
  // Get numbers 1 to 6 and store them in MatchCollection
  RegExStr := '<span class="lottonumberbig">(\d*)</span>';
  RegEx := TRegEx.Create(RegExStr,[roSingleLine,roIgnoreCase]);
  MatchCollection := RegEx.Matches(sl.text);
  // if six numbers found then plot results
  if MatchCollection.Count = 6 then
  begin
    LottoNumbers := 'Zahlen: ';
    for i := 1 to 6 do
    begin
      LottoNumbers := LottoNumbers + MatchCollection.Item[i-1].Groups[1].Value + ', ';
    end;
    Showmessage(LottoNumbers);
  end
  else
    begin
    Showmessage('Error: No Lotto numbers found!');
    end;

  // Get Superzahl and store it in MatchCollection
  RegExStr := '<span class="extralottonumberbig">(\d*)</span>';
  RegEx := TRegEx.Create(RegExStr,[roSingleLine,roIgnoreCase]);
  MatchCollection := RegEx.Matches(sl.text);
  // if one number found then plot Superzahl
  if MatchCollection.Count = 1 then
  begin
    Showmessage('Superzahl: ' + MatchCollection.Item[0].Groups[1].Value);
  end;
end;
Das Datum in der URL kann gegen jedes beliebiges Datum von vergangenen Ziehungen ausgetauscht werden und man erhaelt so alle Zahlen von 1955 bis heute.

Viel Spass damit

Gutelo

vagtler 23. Dez 2013 11:58

AW: Lottozahlen von lotto.de abrufen
 
Ich will ja kein Spielverderber sein, aber hat sich mal jemand bei den Anbietern erkundigt, ob solch eine Vorgehensweise rechtens ist?

Ich zitiere hier mal exemplarisch aus den Nutzerhinweisen von www.sachsenlotto.de:
Zitat:

Urheber- und Markenrechte
Die Inhalte (Bilder oder Texte) und/oder die graphische Gestaltung dieser Website sind urheber- bzw. markenrechtlich geschützt. Kein Teil der graphischen Gestaltung dieser Website darf ohne schriftliche Zustimmung der Sächsischen LOTTO-GmbH in irgendeiner Form weiterverwendet werden. Gleiches gilt für die Inhalte, soweit diese nicht ausdrücklich für die öffentliche Information und Berichterstattung und deren Weiterverbreitung vorgesehen sind bzw. wenn deren Nutzung über die urheberrechtlich zulässige und erlaubte Verwendung hinausgeht.
Ich möchte zwar den Teufel nicht an die Wand malen und wo kein Kläger da kein Richter, aber dennoch halte ich die Veröffentlichung von Quelltext zum Screen bzw. Web Scraping zumindest für nicht unkritisch - auch nicht für den hiesigen Forenbetreiber.

Daniel 23. Dez 2013 12:36

AW: Lottozahlen von lotto.de abrufen
 
Das Hinweis ist völlig richtig und natürlich wird sich jeder Entwickler mit der Frage befassen müssen, ob er die gewünschten Inhalte überhaupt nutzen darf. Sofern es sich um die reinen Lotto-Zahlen handelt, mag es sein, dass deren Verwendung durch "öffentliche Information und Berichterstattung" abgedeckt ist, aber selbst das sollte man sich kurz bestätigen lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz