Hallo Wirman,
schön das Du mit dem lokal speichern kein Problem hast. Denn das ist momentan Makrotechnisch die einzige Methode die ich eingebaut habe. Ein direktes auslesen habe ich jetzt nicht eingebaut, kommt vielleicht später.
ACHTUNG! ! ! !
Die im Anhang befindliche Datei funktioniert momentan NUR in LO! Und da auch erst ab der Version 4.1.0 (selbst getestet). Ob sie auch in 4.0.0 funktioiert, keine Ahnung, da ich diese nicht habe.
In LO kleiner 4 keine Chance!
In AOO bis einschließlich 4.1.1 funktioniert sie auch nicht!
Wie hast du das denn genau lösen können? Mit dem Zugriff auf den Quelltext und dann das Auslesen der passenden Passagen?
Jetzt kommt es ganz knüppeldicke!
Achtung!
Es ist ein seeehr laaanger Text!
Oh jeee! Extrem schwere Geburt meinerseits. Zumal ich noch nicht so oft mit dem nachfolgendem System gearbeitet habe. Und von daher weiß ich auch noch nicht alles wie man das eine oder andere optimieren kann.
Ich hatte für mich mal eine ähnliche Datei erstellt, die ich aber in diesem Falle nicht komplett übernemen konnte, da einerseits die Seite als solche ganz anders aufgebaut ist, und anderseits ganz andere Informationen rausgezogen werden sollen.
Eins ist aber in beiden Fällen identisch, beziehungsweise gleich. Eine Internetseite ist vom Grundprinzip her nix anderes als eine Text-Datei, jedoch mit erweiterten Funktionalitäten. Und in eine Text-Datei kann man Daten rein schreiben und/oder rauslesen. Man muss nur wissen wie man grundsätzlich z.B. Daten auslesen kann.
Bevor man aber dieses Stadium erreicht, muss man geeignete Informationsquellen durchforsten. Dazu zählt auch das durchforsten von Foren um überhaupt den passenden Suchbegriff zu finden. Oder man versucht als erstes die Online-Hilfe zu rate zu ziehen. Und manchmal kann man beides miteinander kombinieren.
Forentechnisch bin ich ja auch noch z.B. auf
http://de.openoffice.info/ aktiv, und hatte deshalb damals dort als erstes gesucht und diesen Thread gefunden:
String aus HTML-Seitenquelltext auslesen
Nun muss man sich von der gewünschten Web-Seite den Quelltext genauer anschauen/durchsuchen um die wunsch Infos zu finden. Und spätestens ab hier wirds extremer als extrem ungemütlich. Denn die zu extrahierenden Daten stehen irgendwo zwischen HTML typischen Bezeichnungen, in so genannten Tags.
Ein einfaches Beispiel:
Code: Alles auswählen
<title>LibreOfficeForum.de - Das LibreOffice Forum</title>
<title> und </title> sind typische Tags. Man kann auch danach recht einfach suchen, da keine doppelten Anführungszeichen " vorkommen. Denn so bald die ins Spiel kommen muss man sehr genau aufpassen wie man den Suchtext eingibt. Und ein Text wird in StarBasic IMMER zwischen zwei doppelten Anführungszeichen eingegeben. Doch dazu komme ich gleich noch.
Wie gesagt, ein ganz einfaches Beispiel.
Aber bei deinen gewünschten Infos sieht das schon anders aus.
Für die Partien sieht das beispielsweise so aus:
Code: Alles auswählen
<meta itemprop="name" content="Hamburger SV - Borussia M'gladbach"></meta>
Jetzt heißt es die Namen rauszufischen, so das man nur noch:
Hamburger SV - Borussia M'gladbach
übrig behält.
Und das raussuchen geschieht mittels
FindPartString. Dies ist keine typische StarBasic Anweisung, sondern sie gehört zu den mitgelieferten Tools.
Wenn man also beispielsweise nur den Titel dieser Seite rausfischen möchte, dann würde
FindPartString wie folgt aussehen.
Der erste Parameter
sLine beinhaltet eine Zeile aus dem Quelltext.
Der zweite Parameter
"<title>" ist der zu suchende Anfang, und der dritte Parameter
"</title>" ist das zu suchende Ende. Und alles was da zwischen gefunden wird, soll ausgegeben werden.
Der vierte Parameter die
1 gibt an ab welcher Stelle der Inhalt von
sLine untersucht werden soll um den zweiten Parameter zu finden.
Wie schon gesagt, jeder Text, oder anders ausgedrückt
String, wird immer zwischen den doppelten Anführungszeichen "_" gesetzt. Und wenn ein Text ein doppeltes Anführungszeichen enthält, so muss dieses auch dementsprechend in doppelte Anführungszeichen gesetzt werden. Es kommt lediglich darauf an wo dieses einzelne doppelte Anführungszeichen steht. Und das ist eine wirklich ernst zu nehmende Gefahrenquelle, worauf man besonders achten muss. Wenn Du in den Makroeditor einfach eingibst
so wird das alles in Rot dargestellt. Das bedeutet; StarBasic hat das eindeutig als
String identifiziert. Jezt setze mal davor oder dahinter noch ein doppeltes Anführungszeichen und schau wie sich die Farbe ändert. Da ist dann die eindeutigkeit auf einmal nicht mehr gegeben.
Um auf die Beispielzeile mit der Partie
Code: Alles auswählen
<meta itemprop="name" content="Hamburger SV - Borussia M'gladbach"></meta>
zurück zukommen, siehst Du nun die ganzen Anführungszeichen in einem ganz anderen Licht.
Also muss man sich jetzt etwas einfallen lassen um nur an die Partie ranzukommen. Und vor allem extrem wichtig, die Suchparameter müssen
absolut einmalig und eindeutig sein. Sie dürfen im Quelltext nicht noch anders belegt sein. Also den Quelltext sehr genau untersuchen lassen. Und das kann manchmal schon recht frustrierend sein.
Wir gehen jetzt aber davon aus das die Suchparameter eindeutig sind, und machen weiter.
Man kann die doppelten Anführungszeichen entweder in weitere doppelte Anführungszeichen setzen, also Maskieren, oder man arbeitet mit der Methode das nicht das Doppelte Anführungszeichen eingetppt wird sondern der Zeichencode dafür genommen wird, der da lautet CHR(34). Nun, ich persönlich hatte mich für die erste Variante entschieden, und dadurch sieht jetz
FindPartString wie folgt aus.
Noch mal zur Verdeutlichung wie die Suchparameter aussehen, aber jetzt ohne die zuätzlich nötigen Anführungszeichen.
Der erste Parameter:
name" content="
Der zweite:
"
Und damit bekommen wir die beiden Mannschaften ausgegeben.
Das gleiche Prinzip habe ich auch für die Quoten angewendet, da geht es dann allerdings um "result_pk=".
Ich persönlich arbeite sehr gerne mit For...Next. Aber es gibt auch noch eine andere Methode die While...Wend, und mit der werde ich persönlich noch nicht so richtig warm. Und ausgerechnet diese While...Wend wird aber angewendet um Daten zu extrahieren, was mir sehr starke Kopfschmerzen bereitete und sehr viel experementieren und Zeitverlust bedeutete. Aber nun gut, ich hatte mein Ziel dennoch erreicht.
Jetzt war mir heute noch etwas aufgefallen, was mich um Stunden zurückgeworfen hatte. Hätte ich das gleich gewusst, wäre ich mit der Datei viel weiter.
Ich sagte ja schon das ich mit OOo 3.2.1 arbeite. Und normalerweise fahre ich auch damit ganz gut. Nur in diesem speziellen Falle war das nicht so sonderlich gut, da ich feststellen musste, das ich per Makro wohl sehr viele Internetseiten downloaden kann, aber deine Seite wollte überhaupt nicht. Andauernd Fehlermeldungen das die Datei nicht gefunden werden konnte. Aber als ich die Datei in LO 4.2.1.1 ausführte gab es keine Probleme mit dem download. Der Grund ist eigentlich relativ simpel, wenn man ihn verstanden hat. Es hängt nur an einem einzigen Buchstaben.
Beispiel:
http://www.libreoffice-forum.de
Damit hat OOo 3.2.1 kein Problem.
https://www.tipico.com/de/online-sportw ... all/g1101/
Und drei mal darfst Du raten warum OOo damit Probleme hat.
1. ------
2. ------
3. ------
Es ist das s in https. Es ist ein anderes Protokoll welches die uralt OOo-Version noch nicht unterstüzt, oder zumindest nicht voll unterstüzt. Da ich aber auch noch andere Freie Office besitze (AOO und LO), ist das ganze nicht so sehr dramatisch.
Als wenn ich nicht schon genug Probleme mit der Datei hatte, so gesellte sich nun noch ein weiteres hinzu.
Im ersten alfa-Stadium der Datei hatte ich festgestellt, das insgesamt 18 Partien auf der Internetseite angezeigt wurden. Eigentlich keine besonders große Sache. Das Dumme ist nur, das bei den Quoten bei der letzt angezeigten Partie etwas nicht stimmte. Also hatte ich einen kleinen Pausebefehl (wait 500) eingesetzt, und schon sah ich das Malheur. Es wurden nicht drei Quoten ausgegeben, sondern ein vielfaches. Durch den Pausenbefehl sah ich wie die 3 zugeordneten Zellen immer wieder durch andere Werte überschrieben wurden.
Also hatte ich einen einfachen kleinen Trick angewendet damit dies nicht mehr vorkommt. Doch leider musste ich nun jetzt feststellen das nicht immer 18 Partien angezeigt werden. Soll heißen, wenn Samstags einige Spiele zu ende sind, dann werden sie anschließend nicht mehr aufgeführt. Und so reduziert sich die Anzahl der Spiele auf z.B. 11. Das Dumme daran ist nun, das mein simpler Trick nicht mehr funktionierte. Okay, ich hätte meinen Trick einfach dementsprechend abändern können. Aber das wäre keine elegante Lösung, da ja am nächsten Wochenende wieder die volle Anzahl an Spielen abzuarbeiten wäre.
Ich musste mir also etwas überlegen wie ich das Problem in den Griff bekomme. Doch dazu musste ich wieder einmal mir den Quelltext vornehmen und schauen wie und wo das Problem überhaupt entsteht. Und nach reichlichen experementierstunden später sah ich das Problem.
Ich sagte ja eben schon, das ich für die Quoten nach "result_pk=" suche. Aber die überflüssigen, oder zu vielen Quoten, werden auch damit ausgegeben. Und nach längerem hin und her im Quelltext sah ich eine Möglichkeit.
Für die Spiele werden die Quoten wie folgt eingeleitet.
Code: Alles auswählen
<div class="qbut qbut-17257354610 " onclick="javascript:resultButtonClick(17257354610,'WEB_SELECTION_STANDARD', false, 'Soccer')"
Und für die überflüssigen.
Code: Alles auswählen
<div class="qbut qbut-17184305810 " onclick="javascript:resultButtonClick(17184305810,'WEB_SECTION_HIGHLIGHTS', false, 'Soccer')"
Das einzige was die beiden Unterscheidet, was sich auswerten lässt, ist das für die überflüssigen "WEB_SECTION_HIGHLIGHTS". Die Spiele haben "WEB_SELECTION_STANDARD".
Mag durchaus sein das ich auch etwas anderes gefunden hätte zum unterscheiden, aber ich war ja schon mal heilfroh das ich überhaupt etwas gefunden hatte.
Da ich nun einen "Identifizierer" hatte, musste ich wiederum
FindPartString bemühen. Und diesmal siehts so aus.
Jetzt muss nur noch eine Abfrage eingebaut werden damit der "Identifizierer" zum tragen kommt.
Code: Alles auswählen
Str3 = FindPartString(sLine, "'" , "'", 1)
[...]
if Str3 = "WEB_SECTION_HIGHLIGHTS" THEN
Und schon ist ein Problem wieder weniger.
Obwohl die Identifizierung der Quoten eindeutig waren, kam es dennoch zu einer unvorhergesehenen Komplikation. Also muss man sich etwas einfallen lassen wie man die Komplikation mit igendetwas so kombiniert, das man sie umgehen kann.
Wie Du siehst musste ich so manche Hürden nehmen, die nicht immer ganz so einfach waren.
Ich habe jetzt öfters von Datei downloaden geredet, aber nicht gesagt wie das geht.
Nun, das geht eigentlich ganz einfach. Das Zauberwort heißt:
Filecopy
In der Online-Hilfer steht etwas dazu.
Und nun noch etwas zur Datei selbst.
Bei einem klick auf den Button *Quoten extrahieren* erscheint ein paar Zeilen tiefer der Hinweistext *Bitte warten*. Und nach ein paar Sekunden wird automatisch auf das Tabellenblatt *Quoten* gewechselt und ein Hinweis ausgegeben und die Daten stehen fertig eingetragen in dem Tabellenblatt.
Während Du kurz warten musst, wird unterschieden ob ein Win- oder Linux System vorliegt. Und dementsprechend wird die zu downloadenden Datei an unterschiedliche Orte gespeichert.
Bei Win geht sie in das Benutzerprofiel des Users, und bei Linux in das Home-Verzeichnis des Users.
Nun wird die Web-Seite gedownloaded. Aber sie wird nicht so gedownloaded als wenn Du im Browser "->Datei ->Seite speichern unter" wählst, denn da werden noch weitere Unterordner und sonstiges mit gedownloaded. Durch FileCopy wird quasi nur die reine HTML gespeichert.
Anschließend wird per Makro auf die Lokal gespeicherte Datei zugegriffen und die Daten extrahiert.
Mal schaun wann und wie ich das noch einbauen kann, das die Daten direkt extrahiert werden können, also ohne Umweg über Datei downloaden. Irgendwie reizt mich das noch, auch wenn ich weiß das dies nicht einfach wird.
Bis dahin wünsche ich dir erstmal viel Spaß

mit der Datei, und hoffentlich gibts bei dir kein Probleme mit ihr.
Gruß
balu