百度音乐api解析源码-Shell PHP 易语言

2017年12月30日

原创内容,转载请注明出处:http://www.myzhenai.com.cn/post/2951.html http://www.myzhenai.com/thread-18070-1-1.html
关键词:百度音乐解析源码 百度音乐api 百度音乐解析shell 百度音乐解析php 百度音乐易语言
这个是利用百度音乐平台的一个api接口实现的百度音乐上的歌曲信息的获取,包含了歌曲名称,歌曲演唱者,歌曲logo,歌曲链接等。都是通过读取网页返回内容进行过滤操作的,这里只需要知道网页公开的api和歌曲的ID就可以进行。但是因为百度音乐的json列表里的中文字符是通过unicode加密的,所以我们在获得这些字符串的时候还需要通过unicode来进行解密,但是Shell上面和易语言上面来说,unicode解密是很繁琐的,Shell下甚至你搜索不到unicode解密,这个方法是我找了很久,并且通过自己的理解和另外的思路来进行解密的,我是用了数组循环来进行解密,然后再组成的。
SHELL源码

# !/bin/bash
. /etc/profile
############################################################################################################################################
#
# This is a lottery number automatic generation tool
# Autor: RucLinux
# Web: http://www.myzhenai.com.cn/ http://www.myzhenai.com/ http://www.haikou-china.com/ http://jiayu.mybabya.com/ http://www.0898-shop.com/
#  说明:转载引用请保留这段,谢谢
#
#############################################################################################################################################
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
}
###########################################################################################################

#http://music.baidu.com/song/5915242
###########################################################################################################
function baidu() {
id=$(echo "${1}" | awk -F "song/" '{ print $2 }')
d=$(curl -s http://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("http://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;
}



易语言源码

.版本 2
.支持库 iconv

.子程序 unicode_转换, 文本型
.参数 unicode文本, 文本型
.参数 转换编码, 整数型, 可空, 0为gbk 1为utf-8 2为gb2312 3为gb18030
.局部变量 a, 整数型
.局部变量 b, 文本型, , "0"
.局部变量 k, 整数型
.局部变量 utf, 文本型
.局部变量 bima, 文本型
.局部变量 gbk, 文本型
.局部变量 文本, 文本型

.如果 (是否为空 (转换编码))
    a = 2
.否则
    a = 转换编码
.如果结束
.如果真 (a = 0)
    bima = #编码_GBK
.如果真结束
.如果真 (a = 1)
    bima = #编码_UTF_8
.如果真结束
.如果真 (a = 2)
    bima = #编码_GB2312
.如果真结束
.如果真 (a = 3)
    bima = #编码_GB18030
.如果真结束
.如果真 (a ≤ 3)
    .如果真 (寻找文本 (unicode文本, “\”, , 假) ≠ -1)
        b = 分割文本 (unicode文本, “\u”, )
        .计次循环首 (取数组成员数 (b), k)
            .如果真 (b [k] ≠ “”)
                .如果真 (取文本长度 (b [k]) ≥ 4)
                    utf = 取十六进制文本 (到数值 (b [k]))
                .如果真结束
                utf = 到文本 (编码转换 (到字节集 (“\u” + b [k]), #编码_JAVA, bima, ))
            .如果真结束
            文本 = 文本 + utf
        .计次循环尾 ()
    .如果真结束

.如果真结束
.如果真 (寻找文本 (文本, “\u”, , 假) ≠ -1)
    文本 = 子文本替换 (文本, “\u”, “”, , , 真)
.如果真结束
文本 = 子文本替换 (文本, #小双引号, “”, , , 真)
返回 (文本)

.版本 2

.子程序 百度, , , 百度音乐
.参数 歌曲地址, 文本型
.局部变量 tid, 文本型
.局部变量 页面内容, 文本型
.局部变量 sname, 文本型
.局部变量 aname, 文本型
.局部变量 picurl, 文本型
.局部变量 mpurl, 文本型

tid = getid (歌曲地址, “/”)
API下载 (“http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.song.playAAC&songid=” + tid, api_取特定目录 (17) + tid + “.html”)
页面内容 = 子文本替换 (到文本 (读入文件 (api_取特定目录 (17) + tid + “.html”)), #引号, “”, , , 真)
mpurl = Getmusicz (页面内容, “file_link:”, “file”)
sname = 子文本替换 (unicode_转换 (获取文本中间 (页面内容, “title:”, “ting”)), “,”, “”, , , 真)
aname = 子文本替换 (unicode_转换 (获取文本中间 (页面内容, “author:”, “album”)), “,”, “”, , , 真)
picurl = Getmusicz (页面内容, “pic_big:”, “@”)
tow_编辑框.加入文本 (“歌曲名称:” + sname + #换行符 + “歌手名称:” + aname + #换行符 + “专辑图片:” + picurl + #换行符 + “外链地址:” + mpurl + #换行符 + “百度音乐没有试听,但将地址复制到网页端或者浏览器地址栏里可以用html5试听,将audio代码复制下来可以正常播放”)
删除文件 (api_取特定目录 (17) + tid + “.html”)
two_标签.标题 = #autol + mpurl + #autos



sicnature ---------------------------------------------------------------------
Your current IP address is: 54.242.175.98
Your IP address location: 美国
Your IP address country and region: 美国 美国
Your current browser is:
Your current system is:
Original content, please indicate the source:
同福客栈论坛 | 海南仙岛海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source http://www.myzhenai.com.cn/post/2951.html

没有评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注