World: r3wp
[!REBOL3-OLD1]
older newer | first last |
shadwolf 2-Dec-2009 [19972x4] | i tryed with that system/scheme/http/user-agent: "Mozilla/4.0" |
and got the stream mp3 | |
in php that's what they do | |
they take a sample of the MP3 sent then they extract the metatag part to get the song and artists | |
Oldes 2-Dec-2009 [19976] | so you want the text? or what? |
shadwolf 2-Dec-2009 [19977x3] | the HTML way is cool ... the MP3 way hangs i don't know how to get only 1 sample to wor with it |
in php they do it like that function getHTML($page=False) { if (!$page) $page = $this->path; $contents = ""; $domain = (substr($this->domain, 0, 7) == "http://") ? substr($this->domain, 7) : $this->domain; if (@$fp = fsockopen($domain, $this->port, $this->errno, $this->errstr, 2)) { fputs($fp, "GET ".$page." HTTP/1.1\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n". "Accept: */*\r\n". "Host: ".$domain."\r\n\r\n"); $c = 0; while (!feof($fp) && $c <= 20) { $contents .= fgets($fp, 4096); $c++; } fclose ($fp); $this->encodeContent($contents); preg_match("/(Content-Type:)(.*)/i", $contents, $matches); if (count($matches) > 0) { $contentType = trim($matches[2]); preg_match("/(meta http-equiv=\"Content-Type\" content=\"(.*); charset=(.*)\")/iU", $contents, $matches); if (isset($matches[3])) { $this->setStreamEncoding($matches[3]); } if ($contentType == "text/html") { $this->isShoutcast = True; return $contents; } else { $this->isShoutcast = False; $htmlContent = substr($contents, 0, strpos($contents, "\r\n\r\n")); $dataStr = str_replace("\r", "\n", str_replace("\r\n", "\n", $contents)); $lines = explode("\n", $dataStr); foreach ($lines AS $line) { if ($dp = strpos($line, ":")) { $key = substr($line, 0, $dp); $value = trim(substr($line, ($dp+1))); if (preg_match("/genre/i", $key)) $this->nonShoutcastData['Stream Genre'] = $value; if (preg_match("/name/i", $key)) $this->nonShoutcastData['Stream Title'] = $value; if (preg_match("/url/i", $key)) $this->nonShoutcastData['Stream URL'] = $value; if (preg_match("/content-type/i", $key)) $this->nonShoutcastData['Content Type'] = $value; if (preg_match("/icy-br/i", $key)) $this->nonShoutcastData['Stream Status'] = "Stream is up at ".$value."kbps"; if (preg_match("/icy-notice2/i", $key)) { $this->nonShoutcastData['Server Status'] = "This is <span style=\"color: red;\">not</span> a Shoutcast server!"; if (preg_match("/ultravox/i", $value)) $this->nonShoutcastData['Server Status'] .= " But an <a href=\"http://ultravox.aol.com/\" target=\"_blank\">Ultravox</a> Server"; $this->altServer = $value; } } } return nl2br($htmlContent); } } else return $contents; } else { return False; } } | |
but as they you the Mozilla thing i think they are working on the HTML version and not the meta tag | |
Oldes 2-Dec-2009 [19980] | p: open/direct/no-wait/binary http://ifb.impek.com:8000/ buf: copy/part p 2048 probe as-string copy/part buf find buf "^M^/^M^/" close p |
shadwolf 2-Dec-2009 [19981] | ** Script Error: copy expected range argument of type: number series port pair ** Where: getHTML ** Near: probe as-string copy/part buf find |
Oldes 2-Dec-2009 [19982x7] | after the ICY info there is MP3 stream which can contain ID3 tags |
you can get the stream using something like: while [not none? buf: copy/part p 2048][probe buf] | |
that means that there was not found the "^M^/^M^/" | |
so you want the HTML? | |
for MP3 use: system/schemes/http/user-agent: "Winamp" | |
and use trace/net on to see what's going on | |
also.. I see... I'm using R2, not R3 | |
shadwolf 2-Dec-2009 [19989x2] | i got that {icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>^M icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>^M icy-name:OUIFM^M icy-genre:Rock^M icy-url:http://www.ouifm.fr^M content-type:audio/mpeg^M icy-pub:1^M icy-br:128} >> |
ok in my opinion the metatag data stack retreived from the MP3 is faster and more beautyfull way than parsing HTML data | |
Oldes 2-Dec-2009 [19991] | to get the HTML, just use: system/schemes/http/user-agent: "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" buf: read http://ifb.impek.com:8000/ print buf |
shadwolf 2-Dec-2009 [19992] | same i'm using R2 ... i don't code with R3 ... and yeah taht the R3 group .. shame on me ... I won't get a gift for Xmas... |
Oldes 2-Dec-2009 [19993] | but we are in Rebol3 group! |
shadwolf 2-Dec-2009 [19994x8] | why in the php version they use this size ? while (!feof($fp) && $c <= 20) { $contents .= fgets($fp, 4096); $c++; } |
and you 2048 ? | |
in that stack i'm supposed to get mp3 >metatag>mp3 | |
that's supposed to be the structure | |
i don't understand in teh reply it's supposed to have the title of the song and the artist information ... | |
can this help you oldes ? http://www.smackfu.com/stuff/programming/shoutcast.html | |
can i do this oldes ? p: open/direct/no-wait/binary http://ifb.impek.com:8000/ insert p "GET path HTTP/1.0 ^/ Icy-MetaData:1 ^/^/" | |
user-agent winamp doesn't work in fact the reply we have is like an HTTP document not found ... | |
Oldes 2-Dec-2009 [20002] | opening http scheme is doing the GET for you, so no, you can't do that. |
shadwolf 2-Dec-2009 [20003x2] | cause you use the http:// scheme no ? |
in your url ? using the tcp:// would it be possible ? | |
Oldes 2-Dec-2009 [20005] | yes |
shadwolf 2-Dec-2009 [20006x5] | : open/direct/no-wait/binary tcp://ifb.impek.com:8000/ insert p "GET path HTTP/1.0 ^/ Icy-MetaData:1 ^/^/" |
like that ? | |
how can i inject request to the socket ? | |
to do what is explained here http://www.smackfu.com/stuff/programming/shoutcast.html | |
oldes ? | |
Oldes 2-Dec-2009 [20011x5] | you can use something like: maxlen: 20 * 4096 p: open/no-wait/direct tcp://ifb.impek.com:8000 insert p "GET / HTTP/1.0 ^/Icy-MetaData:1 ^/^/" data: copy #{} while [not none? buf: copy/part p 2048][ append data buf if maxlen <= length? data [break] ] ;do something with data close p |
but why? You get the ICY using the method above as well. And if yu need song data, these will be in ID3 tags. | |
and the ID3 will be on the song start so this would require to listen the stream for some time and parse it | |
also instead of: while [not none? buf: copy/part p 2048][ using: while [buf: copy/part p 2048][ which is more ROBOLious :) | |
I just don't get why REBOL is changing the LF to CRLF, but I was not doing network coding for a very long time. | |
shadwolf 2-Dec-2009 [20016x5] | in fact the ICY we get with your method is a warning notice inviting you to use winamp and not the ICY with the song title and artist name wich are the information i want ... |
anyway i can work with the HTML version ... | |
oldes have you read the site i gave earlier ? | |
oh osrry i didn't read the whole replies ... | |
ok thank you very much i will try that | |
Oldes 2-Dec-2009 [20021] | no.. I don't have much time now.. I don't think it's warning. I can try to sniff real winamp communitacion later. Also we are really off topic here |
older newer | first last |