再来一个灰常简单的mp3下载脚本(7.31更新)

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

再来一个灰常简单的mp3下载脚本(7.31更新)

#1

帖子 xiooli » 2008-06-24 20:31

RT
知道大家对这种东西都腻了,不看也欢迎灌水 :D
如下:
需要w3m,用法输入h自己看~~~~~~~~

=================7.31=================
百度更改了其下载页面代码,故老版不能下载了,今天更新。

=====================================

代码: 全选

#!/bin/bash
#----------------------------------------#
#        coded by xiooli                 #
#                        have fun :)     #
#----------------------------------------#
save_dir=~/music 	#保存歌曲的目录,自己改
max_num=20 		#每次最多显示多少条歌曲信息(<=30)
>/tmp/music_info
[ ! -d $save_dir ] && mkdir $save_dir

#获取源页面,并用w3m格式后输出。
get_src() {
	if [ `locale |grep "LANG=.*UTF-8"` ];then
		gb=`echo "$key_word" | iconv -c -f utf-8 -t gbk | od -t x1 -A n |tr "\n" " " |tr " " % |sed 's/%%/%/g;s/%0a%$//'`
	else
		gb=`echo "$key_word" | od -t x1 -A n |tr "\n" " " |tr " " % |sed 's/%%/%/g;s/%0a%$//'`
	fi
	wget "http://mp3.baidu.com/m?f=ms&tn=baidump3&ct=134217728&lf=&rn=&word="$gb"&lm=-1" -O /tmp/tmp_src.htm -q
	w3m -dump "/tmp/tmp_src.htm" |grep -m $max_num "^[0-9]" |sed 's/\[d9\]//' |tee /tmp/music_info
}
#下载音乐。
down_music() {
	music_page_url=`cat "/tmp/tmp_src.htm" |grep -A5 "<td class=tdn>"$num"</td>" | grep "onclick=\"return ot" |awk -F"\"" '{print $2}'`
	w3m -dump_source -no-cookie "$music_page_url" >/tmp/link_src.htm
	music_url=`w3m -dump /tmp/link_src.htm |grep "embed" |sed 's/^.*(//;s/).*$//'`
	ext=`cat /tmp/music_info |grep -w "^$num" |awk '{print $NF}'`
	if [ ! -f "$save_dir/$nm.$ext" ];then
		axel -n 20 "$music_url" -o "$save_dir/$nm.$ext"
		[ -e "$save_dir/$nm.$ext" ] && mid3iconv -e gbk "$save_dir/$nm.$ext"
		clear && cat /tmp/music_info
	else 
		echo "已存在同名文件:$save_dir/$nm.$ext"
	fi
}
#****************main******************
while true;do
	read -p "请输入命令:" cmd
	case $cmd in
	s*)
		key_word="`echo $cmd |sed 's/^s//'`"
		get_src
		;;
	d*)	
		num="`echo $cmd |sed 's/^d//'`"
		nm_tmp=`cat /tmp/music_info |grep -w "^$num"`
		nm=`echo $nm_tmp |awk '{print $2"-"$3}'` #歌曲以 标题-艺人.扩展名 的格式重命名,在此可以改。
		down_music
		;;
	q)
		exit 0
		;;
	h)
		echo "       s+关键词:搜索歌曲;d+序号:下载该歌曲;h:显示本帮助信息;q:退出。"
		;;
	*)
		echo "不知所云~~~~"
		;;
	esac
done
附件
down_music.tar.gz
(1.25 KiB) 已下载 388 次
上次由 xiooli 在 2008-07-31 22:15,总共编辑 1 次。
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#2

帖子 bones7456 » 2008-06-24 20:35

很强大啊,哈哈
关注我的blog: ε==3
头像
qiang_liu8183
论坛版主
帖子: 10699
注册时间: 2006-09-10 22:36
系统: Arch Debian
来自: 北京

#3

帖子 qiang_liu8183 » 2008-06-24 21:19

不错~~~
看破、放下、自在、随缘、念佛
真诚、清净、平等、正觉、慈悲
头像
solcomo
帖子: 2838
注册时间: 2007-04-25 13:12

#4

帖子 solcomo » 2008-06-24 21:33

好玩 :D
♜♞♝♛♚♝♞♜
♟♟♟♟♟♟♟♟
♙♙♙♙♙♙♙♙
♖♘♗♕♔♗♘♖

☠☯⚔⚓☣☦☃☕
☹☻☪☭☬⚖⚛⚜
ℜℳℬ™ ℋℯℓ℘ ℳℭ
sƂɐʍ рǀɹoʍ əɥʇ oS
holddreams
帖子: 198
注册时间: 2007-05-06 0:53

#5

帖子 holddreams » 2008-07-31 20:05

我用这个下歌曲的时候,显示
Initializing download: true
然后就停在那里不动了,该怎么解决?
谢谢
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#6

帖子 eexpress » 2008-07-31 20:49

iconv -c -f utf-8 -t gbk
看着都难受的。这世界。
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#7

帖子 xiooli » 2008-07-31 21:39

holddreams 写了:我用这个下歌曲的时候,显示
Initializing download: true
然后就停在那里不动了,该怎么解决?
谢谢
下不了,因为百度改东西了,你自己看看改下吧,脚本很简单的。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#8

帖子 xiooli » 2008-07-31 22:16

holddreams 写了:我用这个下歌曲的时候,显示
Initializing download: true
然后就停在那里不动了,该怎么解决?
谢谢
更新了,你再试试看?
holddreams
帖子: 198
注册时间: 2007-05-06 0:53

#9

帖子 holddreams » 2008-08-01 19:49

xiooli 写了:
holddreams 写了:我用这个下歌曲的时候,显示
Initializing download: true
然后就停在那里不动了,该怎么解决?
谢谢
更新了,你再试试看?
可以了,多谢!
头像
后之后觉
帖子: 252
注册时间: 2008-05-15 13:16

#10

帖子 后之后觉 » 2008-08-15 18:59

问题是在 怎么弄? axel是什么 ?
附件
123.png
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#11

帖子 xiooli » 2008-08-15 19:07

后之后觉 写了:问题是在 怎么弄? axel是什么 ?
ls,axel 是一个多线程的命令行下载软件,你也可以把下载的软件换成 wget,把这行:axel -n 20 "$music_url" -o "$save_dir/$nm.$ext" 改成:
wget "$music_url" -O "$save_dir/$nm.$ext" 就行了。

ps:使用的时候命令里面不必用+号,比如我要下载第2首歌直接输入:d2就好,不必d+2
头像
后之后觉
帖子: 252
注册时间: 2008-05-15 13:16

#12

帖子 后之后觉 » 2008-08-15 19:20

xiooli 写了:
后之后觉 写了:问题是在 怎么弄? axel是什么 ?
ls,axel 是一个多线程的命令行下载软件,你也可以把下载的软件换成 wget,把这行:axel -n 20 "$music_url" -o "$save_dir/$nm.$ext" 改成:
wget "$music_url" -O "$save_dir/$nm.$ext" 就行了。

ps:使用的时候命令里面不必用+号,比如我要下载第2首歌直接输入:d2就好,不必d+2
thank you 我安装了axel
头像
后之后觉
帖子: 252
注册时间: 2008-05-15 13:16

#13

帖子 后之后觉 » 2008-08-15 22:45

代码: 全选

请输入命令:d3
Updating /home/***/music/爱情转移爱情呼叫转移-陈奕迅.mp3
No ID3 header found; skipping...
出错信息 现象是 下载的mp3在/home/***里 music目录里有一个几K的文件
是改名的问题?

代码: 全选

wget "$music_url" -o "$save_dir/$nm.$ext"
	[ -e "$save_dir/$nm.$ext" ] && mid3iconv -e gbk "$save_dir/$nm.$ext"
	clear && cat /tmp/music_info
我不是很懂,问题是不是在这里?
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#14

帖子 xiooli » 2008-08-15 23:13

后之后觉 写了:

代码: 全选

请输入命令:d3
Updating /home/***/music/爱情转移爱情呼叫转移-陈奕迅.mp3
No ID3 header found; skipping...
出错信息 现象是 下载的mp3在/home/***里 music目录里有一个几K的文件
是改名的问题?

代码: 全选

wget "$music_url" -o "$save_dir/$nm.$ext"
	[ -e "$save_dir/$nm.$ext" ] && mid3iconv -e gbk "$save_dir/$nm.$ext"
	clear && cat /tmp/music_info
我不是很懂,问题是不是在这里?
我这个获取mp3真事地址用了一个很取巧的方法(取的是试听地址),所以可能不是所有的都能弄下来,几百k的大概是把网页下载下来了。

你要正规的方法可以去viewtopic.php?t=142965&highlight=看看,里面有最新的解析百度加密地址的方法
回复