|
Joined: Aug 2006
Posts: 183
Vogon poet
|
OP
Vogon poet
Joined: Aug 2006
Posts: 183 |
I'm trying to pull information off of http://174.142.79.66:8278/index.html However, whenever I try and access the site via sockets, I get a bunch of gobbly-gook streaming in, I assume this is the music being played. All I want is the text that I see in my browser. Here's the code I'm using the currently produces the gobbly-gook.
Alias Radio {
sockopen Radio40 174.142.79.66 8278
;the below line is there to ensure that Mirc doesn't freeze up when it starts being hit by all the gobbly-gook
timer 1 2 sockclose Radio40
}
on 1:sockopen:radio40: {
window -e @radio
sockwrite -n radio40 GET / HTTP/1.1
;sockwrite -n $sockname User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
sockwrite -n $sockname Host: 174.142.79.66 $+ $crlf $+ $crlf
sockwrite -n radio40 Accept-Charset: text/html; charset=windows-1252
sockwrite -n $sockname User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; rv:1.7.3) Gecko/20040913 Firefox/0.10.1
sockwrite -n $sockname Connection: Close
sockwrite -n $sockname $crlf
}
on *:sockread:radio40: {
sockread %radio40.temp
echo @radio %radio40.temp
}
Thanks
Yar
|
|
|
|
Joined: Feb 2006
Posts: 546
Fjord artisan
|
Fjord artisan
Joined: Feb 2006
Posts: 546 |
sockwrite -n $sockname Host: 174.142.79.66 $+ $crlf $+ $crlf
get rid of those CRLFs. an empty line signals the end of your HTTP request.
"The only excuse for making a useless script is that one admires it intensely" - Oscar Wilde
|
|
|
|
Joined: Aug 2006
Posts: 183
Vogon poet
|
OP
Vogon poet
Joined: Aug 2006
Posts: 183 |
Thanks, that got rid of the spam, but now it just returns
HTTP/1.0 200 OK content-type:text/html
Yar
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
alias radio {
if ($window(@radio)) clear @radio
sockopen Radio40 174.142.79.66 8278
}
on *:sockclose:radio40:{
echo @radio Server Status: Server is currently down.
}
alias -l getinfo {
return $regsubex($bvar(&radio.temp,1-).text,/<[^>]*>| |<.*/g,$chr(32))
}
on *:sockopen:radio40:{
window -e @radio
sockwrite -n $sockname GET / HTTP/1.1
sockwrite -n $sockname Host: 174.142.79.66
sockwrite -n $sockname Accept-Charset: text/html; charset=windows-1252
sockwrite -n $sockname User-Agent: Mozilla/5.0 (Windows; U; $&
Windows NT 5.2; rv:1.7.3) Gecko/20040913 Firefox/0.10.1
sockwrite -n $sockname Connection: Close
sockwrite -n $sockname $crlf
}
on *:sockread:radio40:{
sockread &radio.temp
if ($regex($getinfo,/(server status.*) stream/i)) echo @radio $regml(1)
if ($regex($getinfo,/d>(.*\s\050.*\051)/i)) echo @radio Stream Status: $regml(1)
if ($regex($getinfo,/(listener peak: \d+)/i)) echo @radio $regml(1)
if ($regex($getinfo,/(average listen time:.*)/i)) echo @radio $gettok($regml(1),1-5,32)
if ($regex($getinfo,/(stream title:.*)content/i)) echo @radio $regml(1)
if ($regex($getinfo,/(content type:.*)/i)) {
tokenize 32 $regml(1)
echo @radio $1-3
echo @radio $4-6
echo @radio $7-9
echo @radio $11-12
echo @radio $13-15
echo @radio $16-18
sockclose $sockname
}
}
Last edited by Tomao; 07/11/11 10:14 PM.
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
I can't test right now, so I don't know exactly what "gobbly-gook" you are seeing, but HTTP/1.1 often sends data in chunks. This can cause some confusion when trying to work with it. You might try using HTTP/1.0 and see if that makes it easier for what you're doing.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
HTTP/1.1 works just as dandy.
Last edited by Tomao; 07/11/11 10:03 PM.
|
|
|
|
Joined: Jul 2006
Posts: 4,212
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,212 |
His code is actually trying to listen to the radio, after the header he will constantly receive data, which does freeze mIRC if you have an echo on each data received. Also, "1.1" doesn't necessarily send data as chunk
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
|
|
|
|
Joined: Jul 2006
Posts: 4,212
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,212 |
Use sockread -n on the binvar
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Yeah, I should have said "usually" or "often" there. I fixed it. 
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Wims, that didn't work with the -n switch. Anyway, I've worked it out and here is the finished product: alias radio {
if ($window(@radio)) clear @radio
sockopen Radio40 174.142.79.66 8278
}
on *:sockopen:radio40:{
if (!$sockerr) {
window -e @radio
sockwrite -n $sockname GET / HTTP/1.1
sockwrite -n $sockname Host: 174.142.79.66
sockwrite -n $sockname Accept-Charset: text/html; charset=windows-1252
sockwrite -n $sockname User-Agent: Mozilla/5.0 (Windows; U; $&
Windows NT 5.2; rv:1.7.3) Gecko/20040913 Firefox/0.10.1
sockwrite -n $sockname Connection: Close | sockwrite -n $sockname $crlf
}
}
alias -l getinfo {
return $regsubex($bvar(&radio.temp,1-).text,/<[^>]*>| |<.*|\t/g,$chr(32))
}
on *:sockread:radio40:{
if (!$sockerr) {
sockread &radio.temp
if (Server is currently down isin $getinfo) echo @radio Server Status: $v1 $+ .
else {
if ($regex($getinfo,/(current song:.*)written/i)) echo @radio $regml(1)
if ($regex($getinfo,/(server status.*) stream/i)) echo @radio $regml(1)
if ($regex($getinfo,/d>(.*\s\050.*\051)/i)) echo @radio Stream Status: $regml(1)
if ($regex($getinfo,/(listener peak: \d+)/i)) echo @radio $regml(1)
if ($regex($getinfo,/(average listen time:.*)/i)) echo @radio $gettok($regml(1),1-5,32)
if ($regex($getinfo,/(stream title:.*)content/i)) echo @radio $regml(1)
if ($regex($getinfo,/(content type:.*)/i)) {
tokenize 32 $regml(1) | echo @radio $1-3 | echo @radio $4-6 | echo @radio $7-9
echo @radio $11-12 | echo @radio $13-15 | echo @radio $16-18
}
}
}
} I've added the output for Stream URL, ICQ, AIM and IRC because sometimes they do show their info, sometimes they're not applicable.
|
|
|
|
Joined: Aug 2006
Posts: 183
Vogon poet
|
OP
Vogon poet
Joined: Aug 2006
Posts: 183 |
Ok, thank you kindly guys. I really just needed to know how to get the info, I'd have parsed it myself. But thanks for the extra work. Makes my life just a bit easier.
Haven't tested it while the stream is running, but I shall soon.
Thanks again!
Yar
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Well, using tokenize may not be ideal because some of the token lengths are variable, so I think it'd be best to do: alias radio {
if ($window(@radio)) clear @radio
sockopen Radio40 174.142.79.66 8278
}
on *:sockopen:radio40:{
if (!$sockerr) {
window -e @radio
sockwrite -n $sockname GET / HTTP/1.1
sockwrite -n $sockname Host: 174.142.79.66
sockwrite -n $sockname Accept-Charset: text/html; charset=windows-1252
sockwrite -n $sockname User-Agent: Mozilla/5.0 (Windows; U; $&
Windows NT 5.2; rv:1.7.3) Gecko/20040913 Firefox/0.10.1
sockwrite -n $sockname Connection: Close | sockwrite -n $sockname $crlf
}
}
alias -l getinfo {
return $regsubex($bvar(&radio.temp,1-).text,/<[^>]*>| |<.*|\t/g,$chr(32))
}
on *:sockread:radio40:{
if (!$sockerr) {
sockread &radio.temp
if (Server is currently down isin $getinfo) echo @radio Server Status: $v1 $+ .
else {
if ($regex($getinfo,/(server status.*)stream/i)) echo @radio $regml(1)
if ($regex($getinfo,/d>(.*)listener/i)) echo @radio Stream Status: $regml(1)
if ($regex($getinfo,/(listener peak.*)average/i)) echo @radio $regml(1)
if ($regex($getinfo,/(average listen time:.*)/i)) echo @radio $gettok($regml(1),1-5,32)
if ($regex($getinfo,/(content type:.*)stream/i)) echo @radio $gettok($regml(1),1-3,32)
if ($regex($getinfo,/(stream genre:.*)stream url/i)) echo @radio $regml(1)
if ($regex($getinfo,/(stream url:.*)stream (icq|aim)/i)) echo @radio $regml(1)
if ($regex($getinfo,/(stream icq:.*)stream (icq|aim)/i)) echo @radio $regml(1)
if ($regex($getinfo,/(stream aim:.*)stream irc/i)) echo @radio $regml(1)
if ($regex($getinfo,/(stream irc:.*)current/i)) echo @radio $regml(1)
if ($regex($getinfo,/(current song:.*)/i)) echo @radio $regml(1)
}
}
}
|
|
|
|
|