注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

抓取豆瓣FM音乐进行批量下载(一)  

2011-10-22 14:05:18|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
由于本人非常喜欢豆瓣FM推荐的歌,于是就试着去写一个豆瓣FM音乐抓取Java方法。
1.首先要解决的问题是,数据来源问题。
数据当然是从豆瓣来了,那数据源在哪里,其实很简单,大家都是用过firebug吧,先访问豆瓣FM,打开网络查看相应的URL,拷出URL放在浏览器中试一下,就会弹出一个保存JSON数据的对话框。具体参数我不太清楚。总之可以做一个数据来源。
抓取数据的url  http://douban.fm/j/mine/playlist?type=n&channel=1

2.解析数据,因为是JSON数据,所以在Java中就需要解析JSON啦。
直接贴代码吧。
/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package getdoubanmusic.getmusic;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 *
 * @author hjzheng
 */
public class GetMusic {
     private InputStream getMusicJSON(String doubanUrl) throws IOException {
        URL url = new URL(doubanUrl);
        URLConnection connection = url.openConnection();
        return connection.getInputStream();
    }
   
    private List<Song> parseJSON(String doubanUrl) throws Exception{
        InputStream in = getMusicJSON(doubanUrl);
        //get JSON String from URL
        InputStreamReader is = new InputStreamReader(in);
        BufferedReader  br = new BufferedReader(is);
        StringBuilder sb = new StringBuilder();
        String line = "";
        while((line = br.readLine()) != null){
            sb.append(line);
        }
       
        JSONObject jo = JSONObject.fromObject(sb.toString());
        JsonBean jb = (JsonBean) JSONObject.toBean(jo, JsonBean.class);
        JSONArray songs = jb.getSong();
        List<Song> songList = new  ArrayList<Song>();
        for(Object obj:songs){
           Song song = (Song) JSONObject.toBean((JSONObject)obj, Song.class);
           songList.add(song);
        }
       
        br.close();
        is.close();
        in.close();
       
        return songList;
    }
   
    public List<Song> getSongs() throws Exception{
        //douban music url
        return parseJSON("http://douban.fm/j/mine/playlist?type=n&channel=1");
    }
   
    public static void main(String[] args) throws Exception {
        GetMusic gm = new GetMusic();
        List<Song> list = gm.getSongs();
        System.out.println(list.size());
        for(Song song : list){
            System.out.println(song.getTitle()+" "+song.getArtist()+" "+song.getAlbumtitle()+" "+song.getUrl());
        }
    }
}


Console输出

How I Feel About Businessmen 王若琳 Joanna & 王若琳 http://mr4.douban.com/201110221341/e35b133eaeb157e821c4669c642b0217/view/song/small/p1396265.mp3
十月 22, 2011 1:42:06 下午 net.sf.json.JSONObject toBean
相爱很难 张学友 / 梅艳芳 林夕字传 http://mr3.douban.com/201110221341/c042afaa941458e7e12995fa343b333e/view/song/small/p966148.mp3
在树上唱歌 郭静 在树上唱歌 http://mr4.douban.com/201110221341/eb61a47871a212355a5aade94444416c/view/song/small/p1395312.mp3
遗憾 许美静 许美静.Review.1996-1... http://mr4.douban.com/201110221341/69faf8fac215d0078182e553bee6c668/view/song/small/p660034.mp3
於心有愧 陈奕迅 / 陈奕迅 H?M http://mr4.douban.com/201110221341/6aaed24a7eb52ab42602adc64373fad9/view/song/small/p1383791.mp3
对不起我爱你 蔡淳佳 等一个晴天 http://mr4.douban.com/201110221341/51922b2c5ef715321c2b0b663907b07c/view/song/small/p1029694.mp3
曹操 林俊杰 曹操 http://mr4.douban.com/201110221341/270d5759296d6fee66d0b9b2979ffad9/view/song/small/p709541.mp3
警告: Tried to assign property rating_avg:java.lang.Float to bean of class getdoubanmusic.getmusic.Song
“I'll be there”新歌预告 梁晓雪 I'll be there http://mr3.douban.com/201110221341/a92bdc0fb090141d8528e751d66e9c74/rda/aud10166.mp3
我们的纪念日 范玮琪 我们的纪念日 http://mr4.douban.com/201110221341/d28acaa8845e95a04de8416add7055e8/view/song/small/p538285.mp3
某人 梁咏琪 给自己的情歌 http://mr3.douban.com/201110221341/cc5b2f6dae6e549ac279bbed4db877f6/view/song/small/p344256.mp3
十月 22, 2011 1:42:06 下午 net.sf.json.JSONObject toBean
十分.爱 - 方力申/邓丽欣 邓丽欣 Fantasy http://mr4.douban.com/201110221341/486bca8c78bd5fbadad3c252444d3176/view/song/small/p746222.mp3


3.根据它的输出的歌曲的URL就可以实现批量下载,当然最好写个多线程去处理。
当然也可以根据URL做一个播放器啦。

4.当然建议大家最好,不要这样做,这属于非法下载。

参考资料
http://s5s5.me/2531
  评论这张
 
阅读(2561)| 评论(7)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017