Aus Website Namen auslesen und als Var ausgeben Topic is solved

Stelle Fragen zur Automatisierung von Spielen

Moderator: jNizM

Carbon
Posts: 9
Joined: 10 Jul 2017, 06:06

Aus Website Namen auslesen und als Var ausgeben

26 Jul 2017, 10:28

Hallo.

Ich versuche schon länger aus dieser Website (https://nes-newlife.de/fraction/member/18) die Namen auszulesen (z.B. MARTiiNEZ, Poison, Carbon usw.) und die dann in einer Variable auszugeben um sie mit dem Namen des Nutzers zu vergleichen.

Also es handelt sich um eine Whitelist.

Hier sind die Sachen die ich habe, leider geht es nicht

Code: Select all

Whitelist:
{
	URLDownloadToFile, https://nes-newlife.de/fraction/member/18, %A_Temp%\frakinfo.html
	if(InStr(fetchContent, "><b>" + userName + "</b></a></td>")) {
		GetPlayerName(Spielername) ; API Funktion
		if (Spielername == userName)
		{
			SendChat("1") ; API Funktion
			;SetTimer, Whitelist, off
		} else {
			SendChat("2") ; API Funktion
			;AddChatMessage(0xa84e00, "Medellin Kartell Binder: {FFFFFF}Du bist nicht dazu berechtigt den Keybinder zu nutzen.")
		}
	}
	FileDelete, %A_Temp%\frakinfo.html
}
return
DuxAquila

Re: Aus Website Namen auslesen und als Var ausgeben

27 Jul 2017, 08:57

Vielleicht habe ich da ja ein denkfehler, denn ist schon etwas her das ich mit ahk gearbeitet habe. Doch wäre es nicht Sinnvoll die Datei die du herunter lädst, zu lesen und nach einem Muster zu durchsuchen

Code: Select all

 <td><a href="https://nes-newlife.de/profile/index/
diesen Treffer dann gleich mit RegExMatch zu filtern und as ergebnis in einem Array zu speichern und so dann das Array mit den Ingamenamen zu vergleichen?
Carbon
Posts: 9
Joined: 10 Jul 2017, 06:06

Re: Aus Website Namen auslesen und als Var ausgeben

27 Jul 2017, 11:58

DuxAquila wrote:Vielleicht habe ich da ja ein denkfehler, denn ist schon etwas her das ich mit ahk gearbeitet habe. Doch wäre es nicht Sinnvoll die Datei die du herunter lädst, zu lesen und nach einem Muster zu durchsuchen

Code: Select all

 <td><a href="https://nes-newlife.de/profile/index/
diesen Treffer dann gleich mit RegExMatch zu filtern und as ergebnis in einem Array zu speichern und so dann das Array mit den Ingamenamen zu vergleichen?
Könntest du mir bitte sagen wie das geht`? kenne mich mit sachen die ums auslesen gehen sehr wenig aus. Das Muster ist das hier.

><b>NAME</b></a></td>

Dort steht, je nachdem wieviele in der Fraktion sind (maximal 17) dieser Code teil.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Aus Website Namen auslesen und als Var ausgeben  Topic is solved

27 Jul 2017, 15:34

Du könntest hierbei mir RegExMatch arbeiten.
Recommends AHK Studio
Carbon
Posts: 9
Joined: 10 Jul 2017, 06:06

Re: Aus Website Namen auslesen und als Var ausgeben

27 Jul 2017, 16:00

nnnik wrote:Du könntest hierbei mir RegExMatch arbeiten.
Danke die Funktion hatte ich irgendwie nie so beachtet. Probiere es morgen nach der Arbeit mal auch.

Danke
Carbon
Posts: 9
Joined: 10 Jul 2017, 06:06

Re: Aus Website Namen auslesen und als Var ausgeben

28 Jul 2017, 09:28

weiß jemand was daran falsch ist? @nnnik:

Code: Select all

1::
{
	URLDownloadToFile, https://nes-newlife.de/fraction/member/18, %A_Temp%\frakinfo.html
	checksite := "%A_Temp%\frakinfo.html"
	if (RegExMatch(checksite, "><b>(.*)</b></a></td>", checkname)) {
		SendChat("Name: " checkname "")
		GetPlayerName(Spielername)
		if (Spielername == checkname)
		{
			SendChat("1")
		} else {
			SendChat("2")
		}
	}
	FileDelete, %A_Temp%\frakinfo.html
}
return
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Aus Website Namen auslesen und als Var ausgeben

28 Jul 2017, 10:11

Welche fehlermeldung(en) bekommst du denn bei ausführung?
Ich sehe z.B. funktionsaufrufe ohne dazugehörige funktionen. Insofern ist deine anfrage per se schon rethorisch ...
Variablenzuweisung expressionstyle wäre das nächste ... checksite := A_Temp "\frakinfo.html" ...
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Aus Website Namen auslesen und als Var ausgeben

28 Jul 2017, 10:13

Deine Variable checksite enhält den Text "%A_Temp%\frakinfo.html" - wobei %A_Temp% nicht durch den Pfad zu deiner Datei ersetzt wird.
Dein RegExMatch erwartet aber, den Dateiinhalt von der Datei die du versuchst zu erwähnen.
Du musst daher vor dem RegExMatch über FileRead noch den Inhalt der Datei in eine Variable einlesen.

Der 2. Punkt ist der, dass Anführungszeichen nicht mit %% funktionieren. Bei dem sogenannten Ausdrucksmodus ist es notwendig anders zu arbeiten.
Hier ist alles ein Ausdruck d.h. eine Variable oder eine Rechnung o. ä. von daher müssen diese nicht mehr extra markiert werden - Text hingegen schon.
2 Teilausdrücke ( wie in unserem Beispiel eine Variable und ein Textstück ) werden automatisch zu einem längeren Text zusammengefügt:
checksite := A_Temp "\frakinfo.html" wäre die korrekte Zeile gewesen.

Zudem wirst du selbst wenn du die Datei richtig öffnest Probleme mit dem RegExMatch bekommen. Ein RegExMatch ist normalerweise Gierig - das Bedeutet, dass jedes Element welches unterschiedlich groß sein kann, versucht möglichst groß zu sein.
Im Klartext, bedeutet, das für dein RegExMatch, dass du nicht einen Namen zurückgeliefert bekommst sondern alles von dem Anfang des ersten Namens bis zum Ende des letzten Namens.
Um die Gier eines * zu deaktivieren reicht es ein ? dahinter zu setzen.
https://regex101.com/r/LzlBpb/1 vs. https://regex101.com/r/x8QRcU/1

Das zweite Problem bei deinem RegExMatch liegt bei der Ausgabevariable. Die Ausgabevariable checkname enthält den gesamten Text der gefunden wurde, nicht nur den Teil innerhalb der Klammer.
Um den Inhalt der ersten Klammer zu erhalten musst du die variable checkname1 verwenden.

Hier ein Testscript mit allen Veränderungen:

Code: Select all

checksite := A_Temp . "\frakinfo.html"
URLDownloadToFile, https://nes-newlife.de/fraction/member/18, %checksite%
FileRead,checksitetext, %checksite%
FileDelete, %checksite%
if (RegExMatch(checksitetext, "><b>(.*)</b></a></td>", checkname)) {
	Msgbox checkname: "%checkname%" vs. checkname1: "%checkname1%" ;Du musst hier checkname1 verwenden um die erste Klammer zu erhalten
}
Recommends AHK Studio
Carbon
Posts: 9
Joined: 10 Jul 2017, 06:06

Re: Aus Website Namen auslesen und als Var ausgeben

28 Jul 2017, 15:46

nnnik wrote:Deine Variable checksite enhält den Text "%A_Temp%\frakinfo.html" - wobei %A_Temp% nicht durch den Pfad zu deiner Datei ersetzt wird.
Dein RegExMatch erwartet aber, den Dateiinhalt von der Datei die du versuchst zu erwähnen.
Du musst daher vor dem RegExMatch über FileRead noch den Inhalt der Datei in eine Variable einlesen.

Der 2. Punkt ist der, dass Anführungszeichen nicht mit %% funktionieren. Bei dem sogenannten Ausdrucksmodus ist es notwendig anders zu arbeiten.
Hier ist alles ein Ausdruck d.h. eine Variable oder eine Rechnung o. ä. von daher müssen diese nicht mehr extra markiert werden - Text hingegen schon.
2 Teilausdrücke ( wie in unserem Beispiel eine Variable und ein Textstück ) werden automatisch zu einem längeren Text zusammengefügt:
checksite := A_Temp "\frakinfo.html" wäre die korrekte Zeile gewesen.

Zudem wirst du selbst wenn du die Datei richtig öffnest Probleme mit dem RegExMatch bekommen. Ein RegExMatch ist normalerweise Gierig - das Bedeutet, dass jedes Element welches unterschiedlich groß sein kann, versucht möglichst groß zu sein.
Im Klartext, bedeutet, das für dein RegExMatch, dass du nicht einen Namen zurückgeliefert bekommst sondern alles von dem Anfang des ersten Namens bis zum Ende des letzten Namens.
Um die Gier eines * zu deaktivieren reicht es ein ? dahinter zu setzen.
https://regex101.com/r/LzlBpb/1 vs. https://regex101.com/r/x8QRcU/1

Das zweite Problem bei deinem RegExMatch liegt bei der Ausgabevariable. Die Ausgabevariable checkname enthält den gesamten Text der gefunden wurde, nicht nur den Teil innerhalb der Klammer.
Um den Inhalt der ersten Klammer zu erhalten musst du die variable checkname1 verwenden.

Hier ein Testscript mit allen Veränderungen:

Code: Select all

checksite := A_Temp . "\frakinfo.html"
URLDownloadToFile, https://nes-newlife.de/fraction/member/18, %checksite%
FileRead,checksitetext, %checksite%
FileDelete, %checksite%
if (RegExMatch(checksitetext, "><b>(.*)</b></a></td>", checkname)) {
	Msgbox checkname: "%checkname%" vs. checkname1: "%checkname1%" ;Du musst hier checkname1 verwenden um die erste Klammer zu erhalten
}

Danke für die erklärung. Ich habe es jetzt auf verschiedene arten versucht, es geht auch, allerdings nur teilweise.
Ich möchte ja nachdem er den ersten Namen (Martinez) ausgelesen hat den zweiten usw. (maximal 17) auch noch ausgibt. Wie ist das dann möglich?

Image

Return to “Spiele”

Who is online

Users browsing this forum: No registered users and 18 guests