10 require HTTP::Request;
11 require LWP::UserAgent;
12 require HTTP::Cookies;
15 my $PASSWORD=&_priv_postget("di.fm.pwd");
17 delete $ENV{"http_proxy"};
23 my $full=$ENV{"HOME"}."/priv/postget.".$base;
25 open F,$full or die "$full: $!";
26 my $r=do { local $/; <F>; } or die "read \"$full\": $!";
27 close F or die "close \"$full\": $!";
36 my $ua=LWP::UserAgent->new() or die "UA: $!";
37 my $jar=HTTP::Cookies->new() or die "jar: $!";
38 $ua->cookie_jar($jar);
39 my $req=HTTP::Request->new(
41 q{http://}.$site.q{/pro/login.php},
44 "Content-Type"=>"application/x-www-form-urlencoded",
47 q{amember_login=}.$USERNAME,
48 q{amember_pass=}.$PASSWORD,
49 q{refer_back_url=http://}.$site.q{/},
50 q{login_attempt_id=}.(0+time()),
54 my $resp=$ua->request($req) or die "resp(0): $!";
55 die "!success(0)" if !$resp->is_success();
56 die "!content(0)" if !(my $content=$resp->content());
57 $content=~m{You will be redirected to protected area} or die $content;
58 $req=HTTP::Request->new(
62 $resp=$ua->request($req) or die "resp(1): $!";
63 die "!success(1)" if !$resp->is_success();
64 die "!content(1)" if !($content=$resp->content());
68 if ("build" eq ($ARGV[0]||"")) {
73 next if !/^(?:\Qdi.fm\E|\Qsky.fm\E)-/;
77 @symlink or die "No existing symlinks found";
78 my $TARGET="engine-di.fm";
79 -x $TARGET or die "Target $TARGET not found";
86 while ($page=~m{"((?:http://www.'$site')?([^":]*(?<!_low)[.](?:pls|asx)))"}g) {
88 next if m{^/aacplus/};
89 next if m{/(?:32|56|64|128)k[.]};
93 @newdashed or die "No URLs found";
95 unlink or die "unlink \"$_\": $!";
101 symlink $TARGET,$dest or die "symlink \"$dest\": $!";
105 for my $site (qw(di.fm)) { # FIXME: sky.fm
106 my $freepageurl="http://$site/";
107 my $freepage=LWP::Simple::get($freepageurl) or die $freepageurl;
108 sitedump $site,$freepage;
109 my $paidpage=paidget $freepageurl,$site;
110 sitedump $site,$paidpage;
117 $pathslashed=~s{^.*/}{};
118 $pathslashed=~tr{-}{/};
119 my $streamlisturl="http://$pathslashed";
122 sub streamlist_get($)
127 while ($streamlist=~m{^File\d*\s*=\s*"?(\S+?)"?\s*$}gm) {
130 while ($streamlist=~m{<ref\s+href\s*=\s*"(mms://[\S^"]+?)"\s*/>}g) {
133 push @streamlist,$url;
138 my $streamlist=LWP::Simple::get($streamlisturl) or die $streamlisturl;
139 my @streamlist=streamlist_get $streamlist;
141 $streamlist=~m{Digitally Imported :: Login} or die "No streams found (free): $streamlisturl";
142 $streamlist=paidget $streamlisturl,"di.fm"; # FIXME: sky.fm
143 @streamlist=streamlist_get $streamlist;
144 @streamlist or die "No streams found (paid): $streamlisturl: $streamlist";
146 warn Dumper(\@streamlist);
147 for my $stream (@streamlist) {
148 if (my($host,$port)=($stream=~m{^http://(?:[^@]+@)?([^:/@]+)(?::(\d+))?})) {
150 warn "Connecting {$host}:{$port}...\n";
151 my $tcp=IO::Socket::INET->new(
157 close $tcp or die "Close TCP: $!";
159 my $mplayer="mplayer";
160 my @list=($mplayer,qw(-cache 512),$stream);
162 system $mplayer @list;