首先通过你要下载的歌曲通过下列连接:

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>35220</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,于是这首歌完整的歌词地址就出来了:
http://box.zhangmen.baidu.com/bdlrc/352/35220.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获取百度音乐下载音乐和歌词下载链接

    首先,你必须通过以下连接下载歌曲: http://box.zhangmen.baidu.com/x?op=12&count=1&title={title}$${author}$$$$ ...

  2. 【备忘】Android获取正在使用网络的IP4地址

    [备忘]Android获取正在使用网络的IP4地址 public String getLocalIpAddress() { String ipaddress="";try { fo ...

  3. android 9下载地址,狂野飙车9安卓版下载地址 最新版本下载

    标签: 解锁 狂野飙车9安卓版下载地址 最新版本下载 好消息,时隔六年,狂野飙车系列最新续作<狂野飙车9:竞速传奇>国服版终于与大家见面啦!九游平台将为大家提供狂野飙车9安卓版的下载资源, ...

  4. S7-200Smart 软件下载地址,仿真下载地址

    S7-200Smart 软件下载地址,仿真下载地址! S7-200Smart 软件下载,官网放在下方,教程特别简单,不会可百度一下哦! 西门子官网:https://new.siemens.com/cn ...

  5. 实现财务自由 之 A 股上市公司的年报(年度财报)查阅查看、下载地址、以及下载的方法

    实现财务自由 之 A 股上市公司的年报(年度财报)查阅查看.下载地址.以及下载的方法 目录 实现财务自由 之 A 股上市公司的年报(年度财报)查阅查看.下载地址.以及下载的方法 A 股上市公司年报,下 ...

  6. Xcode4.3.2下载地址迅雷高速下载lwxshow

    Xcode4.3.2下载地址 官网下载 http://adcdownload.apple.com/Developer_Tools/xcode_4.3.2/xcode_432_lion.dmg 迅雷高速 ...

  7. jdk各种版本下载地址,直接下载,无需登录

    jdk各种版本下载地址,直接下载,无需登录 http://jdk.java.net/archive/

  8. Android 获取内部存储中音乐文件的正确姿势

    最近想写一个音乐的小APP出来(doge),借此熟悉音频开发的相关技术.但是在获取内部存储的音乐文件时踩了一些坑...所以有了这篇帖子,简单介绍下Android的存储类别,以及如何获取内部存储中的音乐 ...

  9. 车载android系统手机版下载地址,carlife官方下载-carlife车机端 安卓版v7.1.1-PC6安卓网...

    carlife车机端是一款由百度打造的手机车机智能互联产品,carlife安卓版只需在车内连接手机,即可将carlife汇集的车生活服务分享到车载屏幕上,享受驾驶中更安全便捷的车载体验. 软件介绍 百 ...

最新文章

  1. 椭圆形中间一个大写的v_年轻人想要的出街姿态,新CR-V整的明明白白
  2. 家里的狗为什么打不过猫
  3. 2021十大进销存软件排名
  4. 华中数控808系统说明书_国产数控系统的性能水平
  5. JESD204B时钟网络
  6. android 我叫mt 插件,叉叉我叫MT助手
  7. 欧格教育:差评对店铺有哪些影响
  8. Free-Form Image Inpainting with Gated Convolution
  9. 计算机领域牛人顶会期刊论文实验室高校整理
  10. 【Babylonjs】材质
  11. 全球及中国沥青基碳纤维市场需求格局与供给前景预测报告2022版
  12. python人生的不同阶段_TED演讲:人生的各个阶段
  13. ETF薛斯通道抄底指标表
  14. Html+Css+js实现春节倒计时效果(移动端和PC端)
  15. ts无损剪辑合并_音视频剪切合并器有哪些
  16. avue 按时间导出excel
  17. 并联型APF/有源电力滤波器/Matlab/Simulink仿真 dq/FBD谐波/无功检测
  18. 华为存储OceanStor5500 v3构建iSCSI详解
  19. odoo模块结构详解
  20. mac环境Android将屏幕录制视频转化成GIF动态图

热门文章

  1. Java - 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法
  2. 老调重弹:JDBC系列之驱动加载原理全面解析)
  3. Qt中事件过滤器eventFilter中所有枚举事件总结
  4. 【drawio笔记】向ERD表,列表和UML类添加行
  5. 二级c语言会考文件打开,2017计算机二级C语言文件知识点
  6. 右键栏添加管理员获取所有权
  7. SpringBoot之静态资源访问配置
  8. 张勋说:简述球磨机内介质(钢球|钢棒|衬板)运动动力学(图文)
  9. 【汇编语言】Arm处理器之中断处理
  10. CMS模板标签设计使用说明