首先,你必须通过以下连接下载歌曲:

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

能够获取一个xml文件通过解析xml文件就能够读取到音乐下载的地址和歌词下载的地址。

部分代码:

String title = "六月的雨";

  String singer = "胡歌";                    

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

  url=url.replace("{title}", URLEncoder.encode(title, "utf-8"));    

   //将String字符串转码

  if(singer == null) {

url=url.replace("$${author}$$$$", "");

 }else {

url=url.replace("{author}", URLEncoder.encode(singer, "utf-8"));

 }

以下这部分是依据url地址,下载xml文件的代码:

public static InputStream downLoad(String urlStr) {  
//依据网络地址获取输入流

InputStream inputStream = null;

    try {

    URL url = new URL(urlStr);

    HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();

    urlConn.setRequestMethod("GET");

    urlConn.setConnectTimeout(10000);

    urlConn.setDoOutput(true);

    urlConn.setDoInput(true);

    //urlConn.setUseCaches(true);

    urlConn.connect();

    System.out.println("UrlCode:"+urlConn.getResponseCode());

    if(urlConn.getResponseCode() != HttpURLConnection.HTTP_OK) {

    System.out.println("请求失败");

    }else {

    System.out.println("请求成功  ");

    }

    inputStream = urlConn.getInputStream();

    }catch(Exception e) {

    e.printStackTrace();

    }

    return inputStream;

   }

public static String downLoadTextFile(String url) {              

StringBuffer sb = new StringBuffer();

BufferedReader buffer = null;

InputStream instream = null;

String line=null;

try {

instream = downLoad(url);

buffer = new BufferedReader(new InputStreamReader(instream,"GB2312"));

while((line = buffer.readLine()) != null){

System.out.println(line);

sb.append(line+"\n");

}

}catch(IOException e) {

e.printStackTrace();

}finally {

try {

buffer.close();

instream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

return sb.toString();

}

下载的XML文件例如以下:

<<result>

<count>1</count>

<url>

<encode>

<![CDATA[

http://zhangmenshiting.baidu.com/data2/music/35447544/ZGdnaGxra2xfn6NndK6ap5WXcJppZ2ppZ2aWaWaXnWthlJSWmphucGJklZaWmJiakmlplpZuZ5xkaZZramdtbGFmbFqin5t1YWBnamVtcGhpaGhpa21rcTE$

]]>

</encode>

<decode>

<![CDATA[

35447544.mp3?xcode=f413164c51af30babeb7812bbababa76ba80d37c75164049&mid=0.46079086556749

]]>

</decode>

<type>8</type>

<lrcid></lrcid>

<flag>1</flag>

</url>

<durl>

<encode>

<![CDATA[

http://zhangmenshiting2.baidu.com/data2/music/35447547/ZGdnaGxra29fn6NndK6ap5WXcJppZ2ppZ2aWaWaXnWthlJSWmphucGJklZaWmJiakmlpZZaYZ2pnY2xobm1wbpOTaFqin5t1YWBnamVtcGhpaGhpa21rcTE$

]]>

</encode>

<decode>

<![CDATA[

35447547.mp3?

xcode=f413164c51af30babeb7812bbababa761ab0261949796ba5&mid=0.46079086556749

]]>

</decode>

<type>8</type>

<lrcid>35220</lrcid>

<flag>1</flag>

</durl>

<p2p>

<hash>9d1c20c4d3055f25acb6b61d727cafcfae096519</hash>

<url>

<![CDATA[ ]]>

</url>

<type>mp3</type>

<size>5511091</size>

<bitrate>192</bitrate>

</p2p>

</result>

当中的count值为1是说返回的是一个,,encode里的值是歌曲加密后的地址,加密仅仅是对文件名称加密
的,

我们须要的仅仅是前面的路径,也就是 http://zhangmenshiting.baidu.com/data2/music/35447544/

这部分,然后复制decode 的值:

35447544.mp3?

xcode=f413164c51af30babeb7812bbababa76ba80d37c75164049&mid=0.46079086556749

把他们连接起来就是mp3的url下载地址:

http://zhangmenshiting.baidu.com/data2/music/35447544/35447544.mp3?xcode=f413164c51af30babeb7812bbababa76ba80d37c75164049&mid=0.46079086556749

http://box.zhangmen.baidu.com/bdlrc/
这个是百度lrc歌词存放地址,

xml中的lrcid就是地址可是要把它转换一下。首先

35220/100 =352.20 取小于等于352.20 的最大整数就是352,于是这首歌完整的歌词地址就出来了:

/.lrc

这部分也是网上看到的,能够到网上查到的。好像就是这么个规则

以下是解析XML文件:

//使用dom解析xml文件

public static String parasXML(InputStream inputStream) {

try {

String lrcid = null,url = null;

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document dom = builder.parse(inputStream);

Element root =  dom.getDocumentElement();

Node count = root.getFirstChild();

NodeList items = root.getElementsByTagName("url");

if(items.getLength() <= 0) {

System.out.println("歌曲未找到");

return null;

}else {

Element urlNode = (Element)items.item(0);

//System.out.println(urlNode.getTextContent());

Element lrcidNode = (Element)(urlNode.getElementsByTagName("lrcid").item(0));

Element encodeNode = (Element)urlNode.getElementsByTagName("encode").item(0);

Element decodeNode = (Element)urlNode.getElementsByTagName("decode").item(0);

if(encodeNode == null) {

System.out.println("歌曲信息为空,无法下载");

return null;

}else {

System.out.println("encode="+encodeNode.getTextContent());

}

if(lrcidNode == null) {

System.out.println("lrcid == null");

}else {

System.out.println(lrcidNode.getNodeName());

}

if("lrcid".equals(lrcidNode.getNodeName())) {

System.out.println(lrcidNode.getTextContent());

lrcid = lrcidNode.getTextContent();

}else {

System.out.println(lrcidNode.getNodeName());

}

//获取encode里的值

String temp1 = encodeNode.getTextContent();   

//获取decodeNode的值

String temp2 = decodeNode.getTextContent();                                   

StringBuffer buffer = new StringBuffer();



//接下来是将temp1和temp2进行切割解码合并在一起

String [] arrayTemp1 = temp1.split("/"); 

for(int i=0;i<arrayTemp1.length-1;i++) {

buffer.append(arrayTemp1[i]+"/");

}

//把解码的地址合在一起

buffer.append(temp2);                                                    

url = buffer.toString();

url = url + "##"+ lrcid;

System.out.println("xml:url="+url);

return url;

}

}catch(Exception e) {

e.printStackTrace();

return null;

}

}

后面就能够通过##来分开url和lrcid的值从而获取对应的值

下载文件的就能够先获取InputStream然后通过这个流接口获取对应的值

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android获取百度音乐下载音乐和歌词下载链接的更多相关文章

  1. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

  2. 模仿《百度音乐HD》添加到下载框动画

    上次听有人说喜欢<百度音乐HD>添加到下载动画 ,我就尝试模仿了下,没想到,今天code4app(地址)也有了这个,但是 这个动画基本相同,我们的思路还是部一样的. 都可以参考 .主要关键 ...

  3. QQ音乐2019客户端-获取任意歌单完整歌曲列表和下载音乐文件方法

    步骤 1.在web网站上搜搜任意歌单 https://y.qq.com/#type=index/ 例如:中国好声音4.5.6.7.8季 打开后显示网址:  https://y.qq.com/n/yqq ...

  4. android快捷简单的实现音乐播放器

    自己做了一个相对完整的音乐播放器,现在把播放模块提取出来,分享给大家.音乐播放器基本功能都实现了的,可能有些BUG,希望谅解. 播放器功能如下: 1.暂停,播放 2.拖动条实现,快进,快退 3.歌词同 ...

  5. Android应用--简、美音乐播放器增加音量控制

    Android应用--简.美音乐播放器增加音量控制 2013年6月26日简.美音乐播放器继续完善中.. 题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难 ...

  6. C# WPF 低仿网易云音乐(PC)歌词控件

    原文:C# WPF 低仿网易云音乐(PC)歌词控件 提醒:本篇博客记录了修改的过程,废话比较多,需要项目源码和看演示效果的直接拉到文章最底部~ 网易云音乐获取歌词的api地址 http://music ...

  7. Python爬虫全网搜索并下载音乐

    现在写一篇博客总是喜欢先谈需求或者本内容的应用场景,是的,如果写出来的东西没有任何应用价值,确实也没有实际意义.今天的最早的需求是来自于如何免费[白嫖]下载全网优质音乐,我去b站上面搜索到了一个大牛做 ...

  8. Android命令行播放MP3音乐

    /*************************************************************************** * Android命令行播放MP3音乐 * 说 ...

  9. Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用

     Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...

随机推荐

  1. jQuery实现点击开关图片切换

    原型大概是这样的 image 需求:点击右侧的蓝色眼睛,会变成 关键代码: /* 实现图片切换 */ $(".imgclick").toggle(function(){ $(thi ...

  2. [CSS] Control Image Aspect Ratio Using CSS

    Resize images and videos to fill their parent and maintain their aspect ratio with pure CSS. The new ...

  3. windll对象

    回过头来,再看一下windll和oledll的差别,这两者之间最大的差别是oledll调用的函数都是固定返回HRESULT类型的值,而windll是不固定的类型的.在Python 3.3版本号之前,都 ...

  4. thinkphp将excel导入到数据库中

    首先下载phpexcel插件 http://pan.baidu.com/s/1hq56dFm 我用的是thinkphp框架的3.1版本,下载好压缩包,框架中的extend中的vendor文件夹中新建一 ...

  5. [React Router v4] Intercept Route Changes

    If a user has entered some input, or the current Route is in a “dirty” state and we want to confirm ...

  6. android获取和展示音乐的频谱

    做了个音乐播放器 就一直想做个加一个音乐频谱的展示界面 觉的这是一个好玩的东西,可以将耳边动听的声音形象化,仿佛眼前可以看到声音一样. 但是我在文档的开发者指南里没有讲任何有关音乐频谱的东西,最后还是 ...

  7. C 语言 —— ! 和 ~(感叹号和波浪号)

    ~ 表示按位取反,是位运算符,运算对象是 2 进制. !表示逻辑非,是逻辑运算符,运算对象是真或假.最终的结果也是 0/1 !!:则表示取过一次非之后,再取一次: !!5 ⇒ 1

  8. Javascript中的DOM实现显示鼠标的空间位置

    为了显示鼠标相对于浏览器的位置(相对于屏幕和页面类似),我们能够利用click事件,获得关于鼠标单击的事件对象event.这个事件对象里的clientX和clientY包括了鼠标的位置信息,所以我突发 ...

  9. Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能

    好久没写博客了 这几天在学习cocos studio,这个软件可以很方便的设计游戏的一些界面,并导入到cocos2dx中,今天就用button来做个样例 首先我们打开Cocos Studio1.6,选 ...

  10. K 线图的认识

    股市中的一个铁律就是:如果有个操盘规则广为所知,它会自动平衡,该规则就会失效. 1. 基本经济学概念 大盘:market index,上证综合指数(上海证券综合指数): 其样本股是全部上市股票,包括 ...