下载豆瓣电台所有的加心歌曲
喜欢音乐的朋友应该都知道douban.fm,比如我,加心的歌曲已经有多达600首,所以特别想把加心的歌曲全部下载下来放在本地,随机播放便可以随机的都听自己都喜欢的音乐。这个想法促使我写了这样一个小程序:)
实现这一功能首先要得到自己的加心列表,然后找网站下载歌曲。
1.得到加心列表。
这个过程可以看成一个小小的爬虫。由于豆瓣只能登录用户才能看见自己的所有加心的歌曲,因此需要得到cookies。使用firebug得到cookies,如图:
得到cookies以后,可以根据以下方式下载网页:
1 url = new URL(urlStr);
3 httpConn.setRequestProperty("User-Agent",
4 "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)");
5 httpConn.setRequestProperty("Content-Type",
6 "application/x-www-form-urlencoded");
7 httpConn.setRequestProperty("Cookie", cookies);
8 httpConn.setDoInput(true);
9 InputStream in = httpConn.getInputStream();
首先分析一下网页:http://douban.fm/mine?start=0&type=liked,这个便列出了自己所有喜欢的网页,其中start=*是参数(每页的歌曲数为9首),代表起始的歌曲是第几首。然后分析网页的代码,可以发现“<span>*首喜欢的</span>”,根据正则表达式匹配可以得到喜欢歌曲的总数。同理也可以根据正则表达式匹配到喜欢的歌曲名。so,我们可以很容易得到喜欢的歌曲列表。
2.下载歌曲
得到加心列表了以后,便需要找地方下载咱们喜欢的歌曲了。我选择的是baidu zhangmenren,分析下这个链接http://box.zhangmen.baidu.com/x?op=12&count=1&title=hello%20world$$,表示搜索的歌曲是hello world。:)
仔细观察此页面的源代码, 对于url有加密的,不过解密太简单了:
<encode>http://listen.idj.126.net/uf/920/Y2Zla26Za2plZGpsaZtvm2ljlWaab2hul2dkaJhubm8x.mp3</encode><decode>24279c4242784e8c81b2e916f514c877.mp3</decode>
把上面的encode中的url最后一个/的部分替换成decode中的数据便ok,上面的解密后的url是:
http://listen.idj.126.net/uf/920/24279c4242784e8c81b2e916f514c877.mp3
接下来该怎么做大家应该都知道了吧,大概的代码就是:
httpConn.connect();
in = httpConn.getInputStream();
File musicFile = new File(musicName);
if (musicFile.exists()) {
System.out.println(musicName + " already exists");
return;
}
System.out.println("downloading music ***" + musicName + "*** in url:"
+ urlStr);
out = new FileOutputStream(musicFile, false);
while (true) {
byte[] reads = new byte[100000];//100k
int readSum = in.read(reads);
if(readSum == -1)
break;
out.write(reads,0,readSum);
Date date2 = new Date();
if(date2.getTime()-date1.getTime()>300000){//300s
System.out.println("over time:"+(date2.getTime()-date1.getTime()));
break;
}
}
out.flush();
in.close();
out.close();
ok,搞定,大家尽情享受加心音乐吧。
原创文章,转载请注明: 转载自shallshell的博客