歌曲歌词下载接口

歌词歌曲下载接口


最近在完成自制音乐播放器的歌曲歌词下载功能,网上搜了一圈,终于让我发现了一个可以利用的接口。在此跟大家分享一下

歌曲下载

这是一般格式

http://box.zhangmen.baidu.com/x?op=12&count=1&title={title}$${author}$$$$

如:

http://box.zhangmen.baidu.com/x?op=12&count=1&title=背对背拥抱$$林俊杰$$$$

会返回如下的xml文本

<result>
    <count>1</count>
    <url>
        <encode>
            <![CDATA[
            http://zhangmenshiting.baidu.com/data2/music/64011745/Z2ZjZWZta21fn6NndK6ap5WXcJmXZ2tvZpiUapmZaW1hYpVma5hqa5VqZ2dobm6ZYmpjaZmaaGtqaplrmW9raGFmZFqin5t1YWBjaWxubWxpY2Rpa2tnaTE$
            ]]>
        </encode>
        <decode>
            <![CDATA[
            64011745.mp3?xcode=eb1475fa6dc2500b26b33d843387a1805dd1398f7d940041&mid=0.05786481156501
            ]]>
        </decode>
        <type>8</type>
        <lrcid>873341</lrcid>
        <flag>1</flag>
    </url>
    <durl>
        <encode>
            <![CDATA[
            http://zhangmenshiting2.baidu.com/data2/music/64011734/Z2ZjZWZtamxfn6NndK6ap5WXcJmXZ2tvZpiUapmZaW1hYpVma5hqa5VqZ2dobm6ZYmpjmWdrmptlY2iZZ5tqcJZmalqin5t1YWBjaWxubWxpY2Rpa2tnaTE$
            ]]>
        </encode>
        <decode>
            <![CDATA[
            64011734.mp3?xcode=eb1475fa6dc2500b26b33d843387a180e25cc415e2e38e47&mid=0.05786481156501
            ]]>
        </decode>
        <type>8</type>
        <lrcid>873341</lrcid>
        <flag>1</flag>
    </durl>
    <p2p>
        <hash>5d6db7e87e4aaf2f6897823ff6054317f611236c</hash>
        <url>
            <![CDATA[ ]]>
        </url>
        <type>mp3</type>
        <size>5744279</size>
        <bitrate>192</bitrate>
    </p2p>
</result>

其中主要分为count节点、url节点、durl节点和p2p节点。

count节点返回的是搜索到歌曲的数量。

url节点、durl节点都返回歌曲的下载地址。

下载地址是encode节点的内容加上decode节点的内容,如下:

url中的下载链接:

http://zhangmenshiting.baidu.com/data2/music/64011745/Z2ZjZWZta21fn6NndK6ap5WXcJmXZ2tvZpiUapmZaW1hYpVma5hqa5VqZ2dobm6ZYmpjaZmaaGtqaplrmW9raGFmZFqin5t1YWBjaWxubWxpY2Rpa2tnaTE$64011745.mp3?xcode=eb1475fa6dc2500b26b33d843387a1805dd1398f7d940041&mid=0.05786481156501

durl中的下载链接:

http://zhangmenshiting2.baidu.com/data2/music/64011734/Z2ZjZWZtamxfn6NndK6ap5WXcJmXZ2tvZpiUapmZaW1hYpVma5hqa5VqZ2dobm6ZYmpjmWdrmptlY2iZZ5tqcJZmalqin5t1YWBjaWxubWxpY2Rpa2tnaTE$64011734.mp3?xcode=eb1475fa6dc2500b26b33d843387a180e25cc415e2e38e47&mid=0.05786481156501

经比较,url的下载链接的歌名没有经过格式化,且容量较小,猜测应该是品质较低。
而durl中的下载链接的歌名经过格式化,容量也较大。建议利用durl返回的链接。

歌词下载

这是百度歌词的下载地址:

http://box.zhangmen.baidu.com/bdlrc/

需要在后面加上下载后返回的 lrcid。先去掉lrcid的后两位。如:

<lrcid>873341</lrcid>

去掉后两位为8733,然后加在下载地址后面,最后在加载完整的lrcid,最终格式如下:

http://box.zhangmen.baidu.com/bdlrc/8733/873341.lrc

下面借助OkHttp做个演示:

/**
 * Created by XSX on 2016/2/14.
 */
public class MusicDownLoad {
    public static OkHttpClient okHttpClient;

    /**
     * 下载歌曲
     *
     * @param title  歌名
     * @param author 歌手
     */
    public void downLoad(String title, String author) {
        String url = "http://box.zhangmen.baidu.com/x?op=12&count=1&title={title}$${author}$$$$";
        //替换掉关键词
        url = url.replace("{title}", title).replace("{author}", author);
        System.out.println(url);
        okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            String result = response.body().string();
            System.out.println("返回的xml为:\n" + result);
            parseResultXML(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 返回歌曲下载链接
     * @param result
     * @return
     */
    public String parseResultXML(String result) {
        try {
            XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
            pullParser.setInput(new StringReader(result));
            List<String> encodes = new ArrayList<>();
            List<String> decodes = new ArrayList<>();
            int eventType = pullParser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        break;
                    case XmlPullParser.START_TAG:
                        String tagName=pullParser.getName();
                    if (tagName.equals("count")){
                        //判断是否找到数据
                        if (pullParser.nextText().equals("0")){
                            //无数据
                            return null;
                        }
                    }
                    if (tagName.equals("encode")) {
                        encodes.add(pullParser.nextText());
                    } else if (tagName.equals("decode")) {
                        decodes.add(pullParser.nextText());
                    }
                        break;
                    case XmlPullParser.END_TAG:
                        break;
                }
                //去下个节点
                eventType = pullParser.next();
            }
            //下载链接都放在list中了
            //取出durl中的下载链接
            String encode = encodes.get(1);
            String decode = decodes.get(1);
            return encode+decode;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值