index.html von ShoutCast

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

index.html von ShoutCast

Beitrag 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>
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: index.html von ShoutCast

Beitrag 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
a²+b²=mc²
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: index.html von ShoutCast

Beitrag 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.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: index.html von ShoutCast

Beitrag 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.....
Bild
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: index.html von ShoutCast

Beitrag 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"
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: index.html von ShoutCast

Beitrag 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:
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: index.html von ShoutCast

Beitrag 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
a²+b²=mc²
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: index.html von ShoutCast

Beitrag 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  
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: index.html von ShoutCast

Beitrag 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.
WinXP 32 Bit, PureBasic 4.40 (x86)
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: index.html von ShoutCast

Beitrag 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 )
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Antworten