World: r3wp
[!REBOL3-OLD1]
older newer | first last |
shadwolf 2-Dec-2009 [19946x8] | i have one problem for example actually i made an irc bot to ask and difuse the song name on the public channel when asked by users. When my bot match the command then it opens a web connection read the radio welcome webpage and retrieve from it the song and artist information then it build a nice reply and reply |
lately the radio's website have changed the why this inforation is updated and provided. | |
in result the new system is slow and messy some time the current song on air is not documented ... thru the radio's website | |
so as the shoutcast server provide that information my thoughs are can we with rebol 2 retrieve from a shoutcast server the appropriate information and how to do that using rebol? | |
ok never mind i found a way to do it i will copy and adapt the way php does it .... (shoutcast_class.php) | |
apparently the shoutcast datapart works like a regular webserver | |
fanally not so easy i don't know why but with rebol i get no reply from the shoutcast server http://ifb.impek.com:8000/ if i put that in my webbrowser i have the full information | |
if someone can tell me what to do to get the reply that would be nice | |
Oldes 2-Dec-2009 [19954x3] | It's working fine with my cookies-daemon |
without it I get some continuous stream | |
I think it's because of User-agent in the request | |
shadwolf 2-Dec-2009 [19957x2] | yeah the continous stream is the MP3 streaming part :P |
shoutcast server goal are to broacast through internet MP3 (used for web radio and web TV ...) | |
Oldes 2-Dec-2009 [19959] | it's always good to use>> trace/net on |
shadwolf 2-Dec-2009 [19960x4] | cookie demon ? |
oldes i used it but i wasn't able to understand the result | |
oldes so how do you made it to get the information where can i get your cookie deamon ? | |
.... ooooooooooooooldeeeeeeeeeeeees comebaaaaaaaaaaaaaaack pleaaaaaaaaase T___T | |
Oldes 2-Dec-2009 [19964] | system/schemes/http/user-agent: "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" that's enough |
shadwolf 2-Dec-2009 [19965x2] | then what you do ? data: read http://ifb.impek.com:8000/ |
print data | |
Oldes 2-Dec-2009 [19967x3] | the cookies-daemon is not needed here. It's just the peace of code which makes REBOL to look like a browser. |
yes. | |
but I don't know what exactly do you need, if the text info which you get in the browser or the mp3 data | |
shadwolf 2-Dec-2009 [19970] | want to know the worst oldes ? |
Oldes 2-Dec-2009 [19971] | if you need the mp3, than just use for example: system/schemes/http/user-agent: "Winamp" |
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 [19994x2] | why in the php version they use this size ? while (!feof($fp) && $c <= 20) { $contents .= fgets($fp, 4096); $c++; } |
and you 2048 ? | |
older newer | first last |