[Linux C]百度音乐API实现在线搜歌

最近在做科大讯飞的语音解析模块,主要用于语音控制播放。采集语音输入后,送给科大讯飞语音的SDK,云服务器返回JSON的数据,再解析拿到URL地址,最后送给播放器去播放。不知是否是尚未上线的product,申请的appid,解析JSON后拿到的URL地址,歌曲播放的时间都很短,一般不到1分钟。

一番网络搜索后,据说百度有个未公开的搜歌API,只要拿到歌手和歌曲名,就可以传给这个URL,然后百度就会回你一个XML文件,解析这个文件,就可以拿到你要的MP3播放地址了,那就开始干活吧。

百度音乐搜索API实现说明

搜歌API: http://box.zhangmen.baidu.com/x?op=12&count=1&title=
在上面这个地址后面加上要搜索的歌手和歌曲名,如下图
这里写图片描述
至于这里的歌手和歌曲名,都是由科大讯飞的SDK返回的JSON数据,解析出来的,此处不需要关心。

在浏览器的地址栏上输入上面的地址,就会返回如下图的内容:
这里写图片描述
然后将红色框框的1和2拼凑在一起,就得到了mp3的地址,即
http://zhangmenshiting.baidu.com/data2/music/88329745/88329745.mp3?xcode=1c4dab84d5d0d5dc44a2e9dde28d95e5117565b2b6f412d5&mid=0.00592347543617

具体流程图如下图:

这里写图片描述

本文主要讲述实线框框内的实现

  • Decode 中文 URL
    因为URL带有中文字符,做HTTP请求的时候,需要将中文字符 decode一下,方能识别,具体方法如下
CHAR from_hex(CHAR ch) 
{
    return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10;
}

CHAR *url_decode(CHAR *str) 
{
    CHAR *pstr = str, *buf = malloc(strlen(str) + 1), *pbuf = buf;

    while (*pstr) 
    {
        if (*pstr == '%') 
        {
            if (pstr[1] && pstr[2]) 
            {
                *pbuf++ = from_hex(pstr[1]) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值