这个是利用百度音乐平台的一个api接口实现的百度音乐上的歌曲信息的获取,包含了歌曲名称,歌曲演唱者,歌曲logo,歌曲链接等。都是通过读取网页返回内容进行过滤操作的,这里只需要知道网页公开的api和歌曲的ID就可以进行。但是因为百度音乐的json列表里的中文字符是通过unicode加密的,所以我们在获得这些字符串的时候还需要通过unicode来进行解密,但是Shell上面和易语言上面来说,unicode解密是很繁琐的,Shell下甚至你搜索不到unicode解密,这个方法是我找了很久,并且通过自己的理解和另外的思路来进行解密的,我是用了数组循环来进行解密,然后再组成的。
Shell源码
# !/bin/bash . /etc/profile pw="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #perl -CS -le "print \"\\x{9645}\"" #"\\u6eda\\u77f3\\u56fd\\u9645\\u97f3\\u4e50\\u80a1\\u4efd\\u6709\\u9650\\u516c\\u53f8" ############################################# function unicodename() { #shi=$(echo ${1} |grep -o "\\u" | wc -l) OLD_IFS="$IFS" IFS="\\\u" arr=(${name}) for i in ${arr[@]} do un=$(perl -CS -le "print \"\\x{${i}}\"") um=($un) yname=${yname}$(echo ${um[@]}|sed 's/:/ /g') done } ############################################# ############################################# function unicodeauto() { OLD_IFD="$IFD" IFD="\\\u" aar=(${auto}) for ii in ${aar[@]} do uun=$(perl -CS -le "print \"\\x{${ii}}\"") uum=($uun) yauto=${yauto}$(echo ${uum[@]}|sed 's/:/ /g') done } ############################################# #https://music.baidu.com/song/5915242 ############################################# function baidu() { id=$(echo "${1}" | awk -F "song/" '{ print $2 }') d=$(curl -s https://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.song.playAAC"&songid="${id}) name=$(echo ${d} | awk -F "title\":\"" '{ print $2 }' | awk -F "\",\"ting" '{ print $1 }') auto=$(echo ${d} | awk -F "author\":\"" '{ print $2 }' | awk -F "\",\"album" '{ print $1 }') ico=$(echo ${d} | awk -F "pic_big\":\"" '{ print $2 }' | awk -F "@" '{ print $1 }' | sed -e 's/\\//g') mp=$(echo ${d} | awk -F "file_link\":\"" '{ print $2 }' | awk -F "\",\"file" '{ print $1 }' | sed -e 's/\\//g') unicodename ${name} unicodeauto ${auto} one=" {\n" two=" title : " three=" singer :" four=" cover :" fives=" src: " six=" },\r" echo -e "${one}${two}'${yname}',\r${three}'${yauto}',\r${four}'${ico}',\r${fives}'${mp}'\r${six}" >> ${pw}/in.log wget -p ${pw} -O "${yname}.mp3" ${mp} } ############################################# baidu ${1} #pw 变量是获取当前用户所在目录 #function 是新建一个函数 #wangyi 是新建的函数 #id 这个变量是通过 $1 参数来获取当前用户输入的网页地址里的一段字符串,也就是歌曲的ID码 #d 这个变量是通过curl来读取网页信息 #name 这个变量是通过过滤返回的网页源码并获取歌曲标题这些关键词 #auto 这个变量是通过过滤返回的网页源码获取歌曲的演唱者 #ico 这个变量是通过过滤返回的网页源码获取歌曲唱片图片 #unicodename 这个函数是使用unicode解密歌曲名称的函数 #unicodeauto 这个函数是使用unicode解密歌曲演唱者的函数 #m 这个变量是歌曲链接的地址 #yname 这个变量是通过unicode解密后的歌曲名称 #yauto 这个变量是通过unicode解密后的歌曲演唱者 #mp 这个变量是通过合并源码里的两段信息获取歌曲的链接地址 #one two three four fives six这几个变量是定义输出的格式的关键字 #in.log 这一行是将所有变量集中输出到一个文件里,以便其他方式调用 #wget 这一行是下载歌曲文件
PHP源码
function unicode_decode($name) { $json = '{"str":"' . $name . '"}'; $arr = json_decode($json, true); if (empty($arr)) return ''; return $arr['str']; } function baidu($id) { preg_match("\d+", $id, $rid); $durl = file_get_contents("https://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.song.playAAC&songid=" . $rid); $mpurl = getmusiczid($durl, 'file_link\":\"', '\",\"file'); $sname = getmusiczid($durl, 'title\":\"', '\",\"ting'); $aname = getmusiczid($durl, 'author\":\"', '\",\"album'); $picurl = getmusiczid($durl, 'pic_big\":\"', "@"); $sname = unicode_decode($sname); $aname = unicode_decode($aname); $mpurl = str_replace('\\', "", $mpurl); $picurl = str_replace('\\', "", $picurl); $muscz = array("歌曲名称" => $sname, "歌手名称" => $aname, "专辑图片" => $picurl, "歌曲地址" => $mpurl); return $muscz; }
sicnature ---------------------------------------------------------------------
I P 地 址: 18.222.20.3
区 域 位 置: 美国俄亥俄
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://myzhenai.com/post/2881.html
没有评论