Tuesday, June 22, 2010

songtaste on linux, scripts power

perl- up to date

#!/usr/bin/perl -w
use strict;
use LWP::Simple;

my $dir = "/home/stesen/music";

my $url = $ARGV[0];
my $act = $ARGV[1];
unless ($url =~ m#^http://#) {
print "Wrong URL!\n";
}
unless ($act =~ /^(d|l)$/) {
print "Download OR Listen?\n";
}
my $page = get ($url);
my $name_begin = "border=\"0\" alt=\"";
my $name_end = "\"> Listen Now";
my $link_begin = "javascript:playmedia1\(";
my $link_end = "\);ListenLog";
$page =~ m/$link_begin(.*)$link_end/is;
my $unclean_link = $1;
$unclean_link =~ s/ //g;
$unclean_link =~ s/\(//g;
$unclean_link =~ s/\)//g;
$unclean_link =~ s/\'//g;
my @misc = split /\,/, $unclean_link;
my $link = $misc[6].$misc[2].".mp3";
print $link;

if ($act eq 'd') {
$page =~ m/$name_begin(.*)$name_end/is;
my $name = $1;
$name =~ s/ //g;
$name =~ s/\(//g;
$name =~ s/\)//g;
$name =~ s/\[//g;
$name =~ s/\《//g;
$name =~ s/\&//g;
$name =~ s/\@//g;
$name =~ s/\”//g;
$name =~ s/\"//g;
$name =~ s/\“//g;
$name =~ s/\`//g;
$name =~ s/\'//g;
$name =~ s/\\//g;
$name =~ s/\///g;
$name =~ s/\#//g;
$name =~ s/\!//g;
$name =~ s/\*//g;
$name =~ s/\、//g;
$name =~ s/\[//g;
$name =~ s/\]//g;
$name =~ s/\{//g;
$name =~ s/\}//g;
$name =~ s/\;//g;
$name =~ s/\://g;
$name =~ s/\$//g;

exec "wget -c $link -O ${dir}/${name}.mp3";
}
elsif ($act eq 'l') {
exec "mplayer $link";
}


bash- probably won't work
下载songtaste的音乐比较麻烦,以前用mozilla-mplayer听歌,可以直接用右键获取音乐地址
现在debian sid的源里没有mozilla-mplayer,只有一个gmplayer的插件,质量很差,听到一半常常断掉
换xine的插件稍微好些,但没法获取下载地址了,所以只好写个脚本专门来下载收听
我水平太次,脚本丑陋不堪,而且不是100%的歌都能正常收听下载,辉耀出品必属废品,谅解..
先要装:
links,也可以用其他的lynx,w3m之类,感觉links稍微快些(也许是错觉)
wget,rayfile只能单线程下载,自然首选wget,好在速度不慢
iconv,转换编码,我用xterm编码UTF-8,系统的locale也是en_US.UTF-8,而 songtaste的页面源代码是gb2312
mplayer,听音乐用
########################################################
#!/bin/bash
#get music from
www.songtaste.com
if [ $# != 2 ] then echo "Usage: stmusic.sh URL l" echo " stmusic.sh URL d" exit else URL=$1fiTOP=/home/stesen/musicNUM=`echo ${URL}|sed -e "s/http:\/\/songtaste.com\/song\///g" -e "s/\///g"`links -source "
http://60.10.96.74/play.php?song_id=${NUM
}" |grep "preview" > ${TOP}/.stmusic.tmp
#ip 60.10.96.74 即songtaste.com,用ip可以减少dns解析时间#但是今天它换ip了,估计是服务器出问题,变成115.100.249.248#所 以,换回http://songtaste.com/play.php?song_id=XXX还是直接用ip自己斟酌吧
if [ $2 = d ]
then
NAME=`iconv -f gb2312 -t utf-8 ${TOP}/.stmusic.tmp|cut -d"\"" -f4|sed -e 's/\ /-/g' -e 's/\./-/g' -e 's/(//g' -e 's/)//g' -e 's/…//g' -e 's/\ //g' `
TP=`iconv -f gb2312 -t utf-8 ${TOP}/.stmusic.tmp|cut -d"\"" -f12 |cut -d"." -f5`
FULLNAME=`echo ${NAME}.${TP}|sed -e "s/-././g"`
wget -c `iconv -f gb2312 -t utf-8 ${TOP}/.stmusic.tmp|cut -d"\"" -f12` -O ${TOP}/${FULLNAME}
elif [ $2 = l ]
then
mplayer `iconv -f gb2312 -t utf-8 ${TOP}/.stmusic.tmp|cut -d"\"" -f12`
fi
rm ${TOP}/.stmusic.tmp
exit
#######################################################

用法:
./stmusic.sh url l #listen
./stmusic.sh url d #download

url即类似
http://songtaste.com/song/1625284/
这样的页面

No comments:

Post a Comment