喜马拉雅下载脚本

抓了极客下载的API,写了个脚本自用
主要是MAC要批量下载太蛋疼了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/env bash
#Author zsnmwy
#v1.1 fix https error
judge(){
if [[ $? -eq 0 ]];then
echo -e "$1 完成"
sleep 1
else
echo -e "$1 失败"
exit 1
fi
}
url=$1
check_url=$(echo $url | grep "http://www.ximalaya.com")
check_url_https=$(echo $url | grep "https://www.ximalaya.com")
if [ -n $check_url_https ]
then
check_url=$(echo $url | sed s/https/http/)
url=$check_url
fi
if [ "$check_url" = "" ]
then
echo "请输入正确的喜马拉雅地址"
echo "
例子

下载单个节目请使用:
http://www.ximalaya.com/youshengshu/249504/2482208
http://www.ximalaya.com/8889234/sound/42857655/
http://www.ximalaya.com/8889234/sound/42857655

专辑不超过200集请使用:
http://www.ximalaya.com/renwen/5939130/
http://www.ximalaya.com/39200626/album/3385980
http://www.ximalaya.com/39200626/album/3385980/

专辑超过200集请使用以下链接形式下载:
http://www.ximalaya.com/shangye/3385980/p1/
http://www.ximalaya.com/shangye/3385980/p2/
http://www.ximalaya.com/shangye/3385980/p3/
"
exit
else
echo -e "\n\n输入的地址的为 $1"
fi

api_url="http://jikexiazai.cn/get_xmly.php?url=$url"

echo -e "\n"
echo -e "API请求地址为 $api_url \n\n"

data=$(curl -s $api_url)
#echo -e "$data"

length_data=$(echo -e "$data" | awk '{print NR}'| tail -n1)
#echo $length_data

if [ $length_data -eq 0 ] || [ $length_data -eq 1 ]
then
echo "没有找到下载地址,请确保输入的地址正确"
exit
elif [ $length_data -eq 2 ]
then
echo "找到一个下载地址,准备下载"
elif [ $length_data -gt 2 ]
then
file_number=$(expr $length_data / 2)
echo "找到 $file_number 个下载地址,准备下载"
fi

name_data=$(echo -e "$data" | sed -n '1~2p')

echo -e "\n\n\n\n"
echo -e "准备下载这些文件 按回车以继续下载 \n\n"
echo -e "$name_data"
echo -e "\n\n准备下载这些文件 按回车以继续下载 \n\n"
read -p "按回车以继续 不想下载这些文件请按 Ctrl + C "
echo -e "\n\n"


link_data=$(echo -e "$data" | sed -n '0~2p')
#echo -e "$link_data"

#echo -e "\n\n\n"


length_link=$(echo -e "$link_data" | awk '{print NR}'| tail -n1)

#echo "########### NAME #############"

#OLDIFS=$IFS
#IFS='\n'
i=0
k=1

for link in $link_data
do
#echo $i
a[$i]=$(echo -e "$name_data" | sed -n ${k}p)
#echo ${i} ${a[$i]}
i=$(expr $i + 1)
k=$(expr $k + 1)
done

#echo ${a[*]}
#echo "########### NAME #############"

#echo "###########LINK#############"
i=0
for link in $link_data
do
#echo $i
b[$i]="$link"
#echo ${b[$i]}
i=$(expr $i + 1)
#echo $i
done
#echo "###########LINK#############"

i=0
for link in $link_data
do
echo "准备下载 ${a[$i]}"
echo "这是第 $(expr $i + 1) 个 , 总共 $file_number 个"
file_type=$(basename "${b[$i]}" | cut -d "." -f2)
curl -o "$(echo ${a[$i]}).$(echo $file_type)" "$(echo ${b[$i]})"

judge "下载 ${a[$i]}"

if [ $i == $(expr $length_link - 1) ]
then
echo "全部下载完成"
exit
fi
echo "暂停十秒"
sleep 10
i=$(expr $i + 1)
echo -e "\n\n\n\n"
done
0%