Seite 1 von 2

index.html von ShoutCast

Verfasst: 12.11.2009 20:28
von Tsuki-Namida
Hallo,
gibt es eine Möglichkeit eine HTML Datei Herunterzuladen und auszulesen wenn der Quelltext in einer Zeile steht?

Um Genauer zu werden:
Ich möchte von einem Radio Server folgende Daten auslesen (ist egal welcher Radio Server)
Server Status, Stream Status, Maximale Lister, Stream Titel, Audio Codec, Genre, Stream URL, Stream AIM, Sream IRC, Aktueller Song
Diese Informationen kann man auch bekommen wenn man StreamURL+Port in den Browser eingibt.
Ein Beispiel wäre Kawaii-Radio Der Stream Server ist auf der IP 77.120.105.240 und dem Port 9000 zu finden also URL und Port im Winamp wird den Sender abspielen und im Browser kann man die Informationen einsehen: 77.120.105.240:9000

Wenn ich die Startseite 77.120.105.240:9000/index.html mit URLDownloadToFile_() herunterlade und mit ReadFile() öffne anschließend auslese bekomme ich nur eine Zeile im Debugger angezeigt, das macht es mit meinem momentanem Wissen unmöglich die erwünschten Informationen zu erhalten.
Da es nicht unmöglich ist diese Infos zu erhalte, ich mir aber keinen raat mehr weis frage ich Euch wie man das am besten machen kann/könnte.

Hier ist noch mal der HTML Quellentext wie er von PB Heruntergeladen wird:

Code: Alles auswählen

<HTML><HEAD><meta http-equiv="Content-Language" content="en-us"><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="Mon, 01 Jan 1990 12:00:00 GMT"><title>SHOUTcast Administrator</title><style type="text/css"><!--a:link {color: blue; font-family:Arial, Helvetica; font-size:9pt;}a:visited {color: blue; font-family:Arial, Helvetica; font-size:9pt;}a:hover {color: red; font-family:Arial, Helvetica; font-size:9pt; }.default {color: White; font-family:Arial, Helvetica; font-size:9pt; font-weight: normal}.ST {color: White; font-family:Arial, Helvetica; font-size:8pt; font-weight: normal}.logoText {color: red; font-family: Arial Black, Helvetica, sans-serif; font-size: 25pt; font-weight: normal; letter-spacing : -2.5px;}.flagText {color: blue; font-family: webdings; font-size: 36pt; font-weight: normal; }.ltv {color: blue; font-family: Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: normal;}.tnl {color: black; font-family: Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-decoration: none;}--></style></HEAD><BODY topmargin=0 leftmargin=0 marginheight=0 marginwidth=0 bgcolor=#000000 text=#EEEEEE link=#001155 vlink=#001155 alink=#FF0000><font class=default><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td height=50><font class=flagText>U</font><font class=logoText>&nbsp;SHOUTcast D.N.A.S. Status</font></td></tr><tr><td height=14 align=right><font class=ltv><a id=ltv href="http://www.shoutcast.com/">SHOUTcast Server Version 1.9.8/FreeBSD</a></font></td></tr><tr><td bgcolor=#DDDDDD height=20 align=center><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td align=center><font class=tnl><a id=tnl href="index.html">Status</a></font></td><td align=center><font class=tnl>&nbsp;|&nbsp;</font></td><td align=center><font class=tnl><a id=tnl href="played.html">Song History</a></font></td><td align=center><font class=tnl>&nbsp;|&nbsp;</font></td><td align=center><font class=tnl><a id=tnl href="listen.pls">Listen</a></font></td><td align=center><font class=tnl>&nbsp;|&nbsp;</font></td><td align=center><font class=tnl><a id=tnl href="home.html">Stream URL</a></font></td><td align=center><font class=tnl>&nbsp;|&nbsp;</font></td><td align=center><font class=tnl><a id=tnl href="admin.cgi">Admin Login</a></font></td></tr></table></td></tr></table><br><table cellpadding=5 cellspacing=0 border=0 width=100%><tr><td bgcolor=#000025 colspan=2 align=center><font class=ST>Current Stream Information</font></td></tr></table><table cellpadding=2 cellspacing=0 border=0 align=center><tr><td width=100 nowrap><font class=default>Server Status: </font></td><td><font class=default><b>Server is currently up and public.</b></td></tr><tr><td width=100 nowrap><font class=default>Stream Status: </font></td><td><font class=default><b>Stream is up at 128 kbps with <B>239 of 240 listeners (237 unique)</b></b></td></tr><tr><td width=100 nowrap><font class=default>Listener Peak: </font></td><td><font class=default><b>240</b></td></tr><tr><td width=100 nowrap><font class=default>Average Listen Time: </font></td><td><font class=default><b>3h&nbsp;21m&nbsp;19s</b></td></tr><tr><td width=100 nowrap><font class=default>Stream Title: </font></td><td><font class=default><b>k a w a i i - r a d i o | sr1 http://kawaii-radio.net</b></td></tr><tr><td width=100 nowrap><font class=default>Content Type: </font></td><td><font class=default><b>audio/mpeg</b></td></tr><tr><td width=100 nowrap><font class=default>Stream Genre: </font></td><td><font class=default><b>anime, jpop, game</b></td></tr><tr><td width=100 nowrap><font class=default>Stream URL: </font></td><td><font class=default><b><a href="http://kawaii-radio.net">http://kawaii-radio.net</a></b></td></tr><tr><td width=100 nowrap><font class=default>Stream AIM: </font></td><td><font class=default><b><a href="aim:goim?screenname=N/A">N/A</a></b></td></tr><tr><td width=100 nowrap><font class=default>Stream IRC: </font></td><td><font class=default><b><a href="http://www.shoutcast.com/chat.phtml?dc=N%2FA">N/A</a></b></td></tr><tr><td width=100 nowrap><font class=default>Current Song: </font></td><td><font class=default><b>T.M. Revolution - Trace Millennium Road (Progress)</b></td></tr></table><br><table cellpadding=0 cellspacing=0 border=0 width=100%>	<tr><td bgcolor=#DDDDDD  nowrap colspan=5 align=center><table cellspacing=0 cellpadding=0 border=0><tr><td><font class=ltv>Written by Stephen 'Tag Loomis, Tom Pepper and Justin Frankel</font></td></tr></table></td></tr><tr><td nowrap colspan=5 align=center><font class=ST><b><a href="http://www.shoutcast.com/disclaimer.phtml">Copyright Nullsoft Inc</a><a href="/llamacookie">.</a> 1998-2004</b></font></td></tr></table></font></body></html>

Re: index.html von ShoutCast

Verfasst: 12.11.2009 20:42
von Kiffi
Tsuki-Namida hat geschrieben:Da es nicht unmöglich ist diese Infos zu erhalte, ich mir aber keinen raat mehr weis frage ich Euch wie man das am besten machen kann/könnte.
wie immer: Mit den üblichen PB-Stringbefehlen (FindString(), Mid(), Left(), Right(), etc. und/oder RegExp).

Grüße ... Kiffi

Re: index.html von ShoutCast

Verfasst: 12.11.2009 20:54
von c4s
Tsuki-Namida hat geschrieben:Hallo,
gibt es eine Möglichkeit eine HTML Datei Herunterzuladen und auszulesen wenn der Quelltext in einer Zeile steht?
Na klar ist das möglich. Es geht ja nicht darum, dass du es lesen können sollst sondern dein Programm und dem ist es egal ob es nun Zeilenumbrüche gibt oder nicht ;)

Wie Kiffi bereits geschrieben hat, ist es am einfachsten den Text nach bestimmten Schlüsselwörtern zu durchsuchen und dann die entsprechenden Werte auszulesen.

Re: index.html von ShoutCast

Verfasst: 12.11.2009 21:12
von Tsuki-Namida
Ja okay es gibt ja einige String Befehle...

Aber so einfach ist das leider nicht.... ein Beispiel:
ich möchte den Stream Titel aus lesen das wäre dann von bis in der Zeile das hier:

Code: Alles auswählen

Stream Title: </font></td><td><font class=default><b>k a w a i i - r a d i o | sr1 http://kawaii-radio.net
also suche ich nach "Stream Title:" und das werde ich ja finden (FindString())wenn ich die Position habe kann ich ja das alles schon mal löschen was vor "Stream Title" dann habe ich ja immer noch zufiel da ich ja nur den titel haben möchte "k a w a i i - r a d i o | sr1 http://kawaii-radio.net".... gut ich kann dann ja noch mit Hilfe von RemoveString() diesen Bereich löschen "Stream Title: </font></td><td><font class=default><b>"
So das hätte ich schon mal.... nun weis ich aber nicht wie lang der Sting eigentlich ist den ich haben möchte, da der Stream Titel von Server zu Server unterschiedlich lang ist.....

Re: index.html von ShoutCast

Verfasst: 12.11.2009 21:20
von six1
hole die Position von "Stream Title:" und gib z.B. 100 dazu.
Diesen Bereich holst du dir in eine eigene String variable.
Jetzt holst du dir zwei Positionen: "<" und ">" diesen Teil schneidest du raus.
Dieses Spiel wiederholst du so lange, wie "<" und ">" noch im String vorhanden sind.
Als letztes prüfst du, ob noch ein offenes "<" am Ende besteht. Das schneidest du bis Ende String weg.
Übrig bleibt nur "Stream Title: k a w a i i - r a d i o | sr1 http://kawaii-radio.net"

Re: index.html von ShoutCast

Verfasst: 12.11.2009 21:24
von Tsuki-Namida
Lieben Danke six1 darauf bin ich nicht gekommen das ich das so machen könnte -.-
aber die idee ist echt klasse und werde es gleich umsetzen :) :coderselixir:

Re: index.html von ShoutCast

Verfasst: 12.11.2009 22:05
von Kiffi
wenn das HTML immer im gleichen Format daherkommt, dann kannst
Du auch die Zeichenfolge "><" mit ReplaceString() gegen ">" + Trennzeichen + "<"
ersetzen. Dann kannst Du mit CountString() in Kombination mit
StringField() Dir die einzelnen Zeilen ausgeben lassen.

Code: Alles auswählen

If FileContent ; <- hier steht Dein HTML drin
  FileContent = ReplaceString(FileContent, "><", ">" + Chr(255)  + "<")
  For LineCounter = 1 To CountString(FileContent, Chr(255)) + 1
    Debug "Zeile " + Str(LineCounter) + ": " + StringField(FileContent, LineCounter, Chr(255))
  Next
EndIf
(Falls Du damit besser klar kommst)

Grüße ... Kiffi

Re: index.html von ShoutCast

Verfasst: 13.11.2009 10:24
von six1
Hi Tsuki,

habe mal bisschen probiert. Das Problem liegt noch in der Abgrenzung der Info's. Es sind jetzt aber alle relevanten Teile der Texte in einer Stringlist enthalten. Diese kannst du durch auskommentieren von "Debug Stream_Info()" ansehen.

Code: Alles auswählen


If OpenFile(0, "Test.html")
   Text$ = ReadString(0)

   ; html will leave us :-)
   While ((FindString(Text$, "<", 1)) And (FindString(Text$, ">", 1) ))
       Text$ = Left(Text$, FindString(Text$, "<", 1) - 1) + Chr(255) + Mid(Text$, FindString(Text$, ">",1) + 1)
   Wend
;   Debug Test$
   
   ;replace series of special char to one special char
   While FindString(Text$, Chr(255)+Chr(255), 1)
      Text$ = ReplaceString(Text$, Chr(255)+Chr(255), Chr(255))
   Wend
;   Debug Test$


   NewList Stream_Info.s()
  
   While FindString(Text$, Chr(255), 1)
       AddElement(Stream_Info())
       Stream_Info() = Left(Text$, FindString(Text$, Chr(255), 1) - 1 )
       ;Debug Stream_Info()
       Text$ = Mid(Text$, FindString(Text$, Chr(255), 1) + 1)
   Wend
EndIf  

Re: index.html von ShoutCast

Verfasst: 13.11.2009 10:47
von Rokur
Falls die Webseite syntaktisch richtig ist, dann könntest du auch einen XML-Parser verwenden, der zerlegt dir das dann selbstständig, und du musst ihn nur noch nach den gewünschten Feldern fragen.

Re: index.html von ShoutCast

Verfasst: 13.11.2009 10:58
von six1
@Rokur
html steht weiter oben. Die gewünschten Teile der Seite sind einache Textausgaben, welche in Table angeordnet sind. Es gibt keine auswertbaren tags für einen xml parser... (war auch meine erste idee :D )