获取百度音乐的下载和外链地址的源码—Shell PHP 易语言

2019年10月21日

这个是利用百度音乐平台的一个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

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注