Android获取百度音乐的音乐下载地址和歌词下载连接

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

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获取百度音乐的音乐下载地址和歌词下载连接,布布扣,bubuko.com

时间: 2024-10-27 12:09:36

Android获取百度音乐的音乐下载地址和歌词下载连接的相关文章

Android获取百度音乐下载音乐和歌词下载链接

首先,你必须通过以下连接下载歌曲: http://box.zhangmen.baidu.com/x?op=12&count=1&title={title}$${author}$$$$ 能够获取一个xml文件通过解析xml文件就能够读取到音乐下载的地址和歌词下载的地址. 部分代码: String title = "六月的雨"; String singer = "胡歌"; String url = "http://box.zhangmen.ba

keil下载地址和pack下载地址

https://www.keil.com/dd2/pack/  pack包下载地址 或者https://www.veryarm.com/117866.html  奇手下载(百度网盘) https://www.keil.com/download/product/ MDK下载 原文地址:https://www.cnblogs.com/huang-y-x/p/12638136.html

oracle10G/11G【官方】 下载地址集合 (迅雷下载)

oracle10G/11G官方下载地址 Oracle Database 11g Release 2 (11.2.0.1.0) for Microsoft Windows (64-bit) http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_2of

sql server 2008 r2 直接下载地址,可用迅雷下载

sqlserver 2008 r2 直接下载地址,可用迅雷下载 下载sqlserver 2008 r2 ,微软用了一个下载器,经过从下载器上,将他的地址全部用键盘敲了下来.最终的简体中文版地址如下: 32位: http://care.dlservice.microsoft.com/dl/download/1/e/6/1e626796-588a-495c-917B-321093fb98eb/2052/sqlfull_x86_chs.exe?lcid=2052&ptype=pcare 64位: ht

Android 获取联系人手机号码、姓名、地址、公司、邮箱、生日

public void testGetAllContact() throws Throwable { //获取联系人信息的Uri Uri uri = ContactsContract.Contacts.CONTENT_URI; //获取ContentResolver ContentResolver contentResolver = ContactListActivity.this.getContentResolver(); //查询数据,返回Cursor Cursor cursor = con

Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

原文:http://blog.csdn.net/shulianghan/article/details/38023959 最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; 1. 百度网盘下载地址 Android集成环境 NDK JDK 总链接 : http://pan.baidu.com/s/1bnjaDKb; Android Studio Linux版 : http://pan.baidu.com/s/1eQjA6MA ; Adt B

Android 开发环境下载地址

原文:http://blog.csdn.net/shulianghan/article/details/38023959 最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; 1. 百度网盘下载地址 Android集成环境 NDK JDK 总链接 : http://pan.baidu.com/s/1bnjaDKb; Android Studio Linux版 : http://pan.baidu.com/s/1eQjA6MA ; Adt B

Android adt-bundle android-studio sdk adt 下载地址

备份一下,好用. 最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; 1. 百度网盘下载地址 Android集成环境 NDK JDK 总链接 : http://pan.baidu.com/s/1bnjaDKb; Android Studio Linux版 : http://pan.baidu.com/s/1eQjA6MA ; Adt Bundle windows 64位版 : http://pan.baidu.com/s/1bnvlVnL

纯手工获取的WINDOWS 7 32位 SP1后续补丁集ver201509的官方下载地址

虽然不是纯手工咖啡,但是对于一个微软操作系统封装爱好者来说,纯手工获取的WINDOWS 7 32位 SP1后续补丁集ver201509的官方下载地址应该比手工咖啡更香醇. 下面是手工获取的补丁列表: 截至到20150920,以后有空闲时间的话可以每个月更新一次,只含WINDOWS 7 32位系统的重要补丁,不含可选补丁,不含IE 9,IE 10,IE 11补丁,不含netframe 4.52的补丁(这个有netframe 4.52本身安装包): Windows 7 Service Pack 1