自动下载百度新歌的脚本

sh/bash/dash/ksh/zsh等Shell脚本
头像
yonsan
帖子: 887
注册时间: 2005-07-01 18:56
来自: 广州市

#31

帖子 yonsan » 2005-08-30 16:05

:o 汗 !发现一个bug, 歌名中有空格出现删除不了,将歌名中的所有空格都用下划线代替解决了.

代码: 全选

#******************************************************************************
# FIXME: 在脚本中用rm不能删除文件名中带空格的文件。
# TODO : 在以下语句中添加 sed 's/ /_/g' 可以解决。
#将文件名中的空格换成_(即Baby ,Baby tell me-王心凌改为Baby_,Baby_tell_me-王心凌)
#******************************************************************************
   name=$(echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' | sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | [color=red]sed 's/ /_/g'[/color] | cat);
头像
oneleaf
论坛管理员
帖子: 10455
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#32

帖子 oneleaf » 2005-08-30 16:55

文件名加上 "" 就可以了。
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
Jeff W
帖子: 18
注册时间: 2005-04-22 23:27

#33

帖子 Jeff W » 2005-08-31 21:09

/tmp里面的临时文件有必要加上用户名吧。不然不同用户的就搞混了
头像
firehare
帖子: 2625
注册时间: 2005-04-10 16:54
来自: 温州大学
联系:

#34

帖子 firehare » 2005-09-13 13:43

一叶兄,在运行脚本时,如果所有MP3都已经被下载时,会有以下提示出现:
rm: 无法删除‘/tmp/down.html’: 没有那个文件或目录
rm: 无法删除‘/tmp/down.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/size.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_size.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_size_sort.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/temp.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_mp3.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_wma.txt’: 没有那个文件或目录
是否应加上相应的判断语句?
我心无畏,源自于我心无知。
图片
头像
oneleaf
论坛管理员
帖子: 10455
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#35

帖子 oneleaf » 2005-09-13 13:47

呵呵,早就修改了,你重新试试脚本。
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
头像
firehare
帖子: 2625
注册时间: 2005-04-10 16:54
来自: 温州大学
联系:

#36

帖子 firehare » 2005-09-13 23:12

O!
呵呵!OK!
我心无畏,源自于我心无知。
图片
头像
firehare
帖子: 2625
注册时间: 2005-04-10 16:54
来自: 温州大学
联系:

#37

帖子 firehare » 2005-09-13 23:29

代码: 全选

./dlmp3: command substitution: line 77: unexpected EOF while looking for matching `''
./dlmp3: command substitution: line 78: syntax error: unexpected end of file
发现  下载过,忽略,继续下一首。
不知是否正常?
我心无畏,源自于我心无知。
图片
头像
oneleaf
论坛管理员
帖子: 10455
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#38

帖子 oneleaf » 2005-09-13 23:56

能不能贴出你的77和78行看看?
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
头像
yonsan
帖子: 887
注册时间: 2005-07-01 18:56
来自: 广州市

#39

帖子 yonsan » 2005-09-14 1:05

oneleaf 写了:

代码: 全选

   name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' |\
        sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g'  | [color=red]sed -e 's/"/\'/g'[/color]  | cat` 
   #检查是否已经下载过这首歌,如果下载过,放弃
以上的第76 77 78行! 请看加了红色的部分
头像
oneleaf
论坛管理员
帖子: 10455
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#40

帖子 oneleaf » 2005-09-14 8:33

我这个语法是将 " 替换为 ‘ 也应该没有多大问题啊
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
头像
yonsan
帖子: 887
注册时间: 2005-07-01 18:56
来自: 广州市

#41

帖子 yonsan » 2005-09-14 9:17

代码: 全选

sed -e 's/"/\'/g'
改成

代码: 全选

sed -e "s/\"/'/g"
上次由 yonsan 在 2005-09-14 16:28,总共编辑 1 次。
头像
firehare
帖子: 2625
注册时间: 2005-04-10 16:54
来自: 温州大学
联系:

#42

帖子 firehare » 2005-09-14 16:20

oneleaf 写了:能不能贴出你的77和78行看看?

代码: 全选

        sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g'  | sed -e 's/"/\'/g'  | cat`
's/"/\' ??
我心无畏,源自于我心无知。
图片
头像
yonsan
帖子: 887
注册时间: 2005-07-01 18:56
来自: 广州市

Re: 自动下载百度新歌的脚本

#43

帖子 yonsan » 2005-09-16 8:38

oneleaf 写了:

代码: 全选

   # 优先下载mp3格式的歌曲
   while((j<=downline_mp3)); do
      mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt`
      echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
      wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
      if [ "$?" = 0 ]; then
         if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
            mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3" 
            downed=1;
            break;
[color=red]         else
            rm "${TMP}/${name}.mp3";
       ((j++))   
         fi
      else
         ((j++))[/color]
      fi
   done
一叶, 将以上这一部分修改成以下形式,如何?

代码: 全选

   # 优先下载mp3格式的歌曲
   while((j<=downline_mp3)); do
   		mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt`
		echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
		wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
		if [ "$?" = 0 ]; then
			if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
				mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
            	downed=1;
            	break;
[color=red]			fi
		else
			echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
			rm "${TMP}/${name}.mp3";
			((j++))[/color]
		fi
   done
上次由 yonsan 在 2005-09-16 9:22,总共编辑 1 次。
头像
oneleaf
论坛管理员
帖子: 10455
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

#44

帖子 oneleaf » 2005-09-16 8:50

这样修改有个逻辑问题。如果下载成功但检查出来不是mp3的文件,会陷入死循环。不过已经按照你的思路修改完毕。
头像
yonsan
帖子: 887
注册时间: 2005-07-01 18:56
来自: 广州市

#45

帖子 yonsan » 2005-09-16 10:48

oneleaf 写了:这样修改有个逻辑问题。如果下载成功但检查出来不是mp3的文件,会陷入死循环。不过已经按照你的思路修改完毕。
:o 测试发现确实如你所说, 我的文件修改成以下形式了! 一叶,帮忙看看还可能出现其它问题没? 测试过程还算通过,但最怕就是逻辑错误!

代码: 全选

#优先下载mp3格式的歌曲
   while((j<=downline_mp3));
   do
      mp3=$(awk 'NR=='"$j"'' ${SAVE}/down_mp3.txt);
      echo -e "\e[1;6m\e[1;34m正在下载${name}.mp3 ... \e[1;6m\e[00m";
#如果文件已经存在则略过,不会覆盖已经存在的文件
      wget --no-clobber --no-directories --timeout=${TIMEOUT} --tries=${TRYCOUNT} $mp3 -O "${SAVE}/${name}.mp3";
#若$?不等于0,则下载失败.
      if [ "$?" -ne 0 ];
      then
          echo -e "\e[1;6m\e[1;31m发现 ${name}.mp3 文件无效,正在删除重新下载...\e[1;6m\e[00m";
            rm -Rfv "${SAVE}/${name}.mp3";
     fi
#歌曲下载完毕标记
     downed=1;
#如果下载文件是有效的mp3则转向下载其它歌
     if [ $(file -ib "${SAVE}/${name}.mp3" | sed -e 's/\/.*//g') = "audio" ];
     then
        echo -e "\e[1;6m\e[1;31m检测 ${name}.mp3 文件有效,转向下载其它歌曲...\e[1;6m\e[00m";
        break;
     else
        echo -e "\e[1;6m\e[1;31m发现 ${name}.mp3 文件无效,正在删除重新下载...\e[1;6m\e[00m";
        rm -Rfv "${SAVE}/${name}.mp3";
#使用同一首歌的下一个有效地址重新下载
        ((j++));
        downed=0
     fi
   done
回复