Google音乐都是正版音乐, 不像百度全部都是盗链, 而且死链也多. 但有一个麻烦就是要下载Google音乐的时候得一个一个的点击下载链接, 进入下载页面再点"下载", 才能下载, 为此写了这个读取Google音乐详细信息(当然包括下载地址)的工具类, 只要稍微加功(将输出结果保存为一个HTML文件)即可以用迅雷的"下载全部链接" 进行批量下载.

GoogleMusicUtil.java

package com.hmw.web; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GoogleMusicUtil{ /**正则表达式Pattern: 提取歌曲*/ private Pattern patternName; /**正则表达式Pattern: 提取Artist*/ private Pattern patternSonger; /**正则表达式Pattern: 提取文件大小*/ private Pattern patternSize; /**正则表达式Pattern: 提取格式*/ private Pattern patternFormat; /**正则表达式Pattern: 提取下载地址*/ private Pattern patternUrl; /** * 构造方法 */ public GoogleMusicUtil(){ int flags = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; patternName = Pattern.compile("<tr class=/"meta-data-tr/"><td class=/"td-song-name/">(.*?)</td>", flags); patternSonger = Pattern.compile("<tr class=/"meta-data-tr/">.+?<td class=/"td-singer/">(.*?)</td>", flags); patternSize = Pattern.compile("<tr class=/"meta-data-tr/">.+?<td class=/"td-size/">(.*?)</td>", flags); patternFormat = Pattern.compile("<tr class=/"meta-data-tr/">.+?<td class=/"td-format/">(.*?)</td>", flags); patternUrl = Pattern.compile("<a href="/" mce_href="/""/music/top100/url//?q=(.*?)&ct=.+?", flags); } public static void main(String[] args) { String url = "http://www.google.cn/music/homepage"; //首页 /* * 同时还可以用以下 URL 进行测试 * "http://www.google.cn/music/chartlisting?q=chinese_new_songs_cn&cat=song&grouping=new-release_music" //排行版-->华语新歌 * http://www.google.cn/music/chartlisting?q=chinese_new-release_albums_cn&cat=album" //排行版-->最新专辑 * "http://www.google.cn/music/topiclisting?q=top100_new_age1_2009&cat=song" //专题-->天籁新世纪之音1 * http://www.google.cn/music/album?id=Befc2c2000898fb75" //专辑-->《我的黄金时代》 * http://www.google.cn/music/artist?id=A745deb6e0af83070" //歌手-->王力宏 */ GoogleMusicUtil g = new GoogleMusicUtil(); List<String> list = g.getMusicIds(url); if (!list.isEmpty()) { System.out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.0 Transitional//EN/" /"http://www.w3.org/TR/html4/loose.dtd/"><html><head><meta http-equiv=/"Content-type/" content=/"text/html; charset=UTF-8/"><title>谷歌音乐批量下载</title></head><body><table>"); String id; GoogleMusic music; String alink; for (int i=0; i<list.size(); i++) { if(i>0 && i%10==0){ //每循环10次后休息2.5秒再进行请求, 否则可能被Google当作网络攻击 try { Thread.sleep(2500); } catch (InterruptedException e) { e.printStackTrace(); } } id = list.get(i); music = g.getGoogleMusic(id); if(music.getUrl() == null){ alink = "<a href="/" mce_href="/""http://g.top100.cn/7872775/html/download.html?id=" + id + "/" target=/"_blank/">点击进入下载页面</a>"; }else{ alink = "<a href="/" mce_href="/""" + music.getUrl().replaceAll("%3A", ":").replaceAll("%2F", "/") + "/" target=/"_blank/">下载</a>";; } System.out.println("<tr><td>"+music.getId()+"</td><td>"+music.getName()+"</td><td>"+music.getSonger()+"</td><td>"+music.getSize()+"</td><td>"+music.getFormat()+"</td><td>"+alink+"</td><tr>"); } System.out.println("</table></body></html>"); }else{ System.out.println(url + "不包含任何GOOGLE音乐的ID"); } } /** * 根据 URL 读取应对页面的HTML源码 * @param url Google音乐的URL * @return String URL应对页面的HTML源码, 如果连接到指定URL, 则返回一个空字符串("") */ public String getHtmlCode(String url) { try { URL u = new URL(url); URLConnection urlConnection = u.openConnection(); urlConnection.setAllowUserInteraction(false); // 使用openStream得到一输入流并由此构造一个BufferedReader对象 BufferedReader in = new BufferedReader(new InputStreamReader(u.openStream())); String inputLine; StringBuffer tempHtml = new StringBuffer(); while ((inputLine = in.readLine()) != null){ // 从输入流不断的读数据,直到读完为止 tempHtml.append(inputLine).append("/n"); } return tempHtml.toString(); }catch (IOException e) { return ""; } } /** * 根据 URL 获取对应页面上的所有歌曲ID * @param url google音乐的URL * @return URL对应页面的所有歌曲ID的List, 如果此页面,没有歌曲ID,则返回一个长度为 0 的List */ public List<String> getMusicIds(String url){ String html = getHtmlCode(url); String idPatternStr = "οnclick=/"return _sl_onclickStreaming//("/music/url//?qx3dhttp%3A%2F%2Fwww//.google//.cn.*?id%3D(.+?)%26type%3Dsong%26autoplay%3D.+?"//);/">"; Pattern p = Pattern.compile(idPatternStr, Pattern.CASE_INSENSITIVE); Matcher matcher = p.matcher(html); List<String> list = new ArrayList<String>(); String id = null; while(matcher.find()){ id = matcher.group(1); if(!list.contains(id)){ list.add(id); } } return list; } /** * 根据歌曲ID查询歌曲的详细信息 * @param id 歌曲ID * @return 返回一个 GoogleMusic 对象, 此 GoogleMusic 对象的ID即为传过来的ID */ public GoogleMusic getGoogleMusic(String id){ String html = getHtmlCode("http://www.google.cn/music/top100/musicdownload?id=" + id); Matcher mName = patternName.matcher(html); Matcher mSonger = patternSonger.matcher(html); Matcher mSize = patternSize.matcher(html); Matcher mFormat = patternFormat.matcher(html); Matcher mUrl = patternUrl.matcher(html); GoogleMusic music = new GoogleMusic(); music.setId(id); if(mName.find()){ music.setName(mName.group(1)); } if(mSonger.find()){ music.setSonger(mSonger.group(1)); } if(mSize.find()){ music.setSize(mSize.group(1)); } if(mFormat.find()){ music.setFormat(mFormat.group(1)); } if(mUrl.find()){ music.setUrl(mUrl.group(1)); } return music; } }

PO类: GoogleMusic.java

public class GoogleMusic{ /**歌曲ID*/ private String id; /**歌曲名称*/ private String name; /**演唱者*/ private String songer; /**文件大小*/ private String size; /**文件格式*/ private String format; /**下载地址*/ private String url; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSonger() { return songer; } public void setSonger(String songer) { this.songer = songer; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }

输入结果如下图:

保存为HTML文件时, 显示如下图

获取Google音乐的详细信息(方便对Google音乐批量下载)相关推荐

  1. Android获取酷狗音乐歌曲详细信息

    Android获取酷狗音乐歌曲详细信息 一.目标 二.实现方案 三.最终方案 四.网易云音乐 五.遗留问题 六.接下来 七.Finally 在<Android获取歌曲详细信息>一文中,介绍 ...

  2. Android获取网易云音乐歌曲详细信息

    Android获取网易云音乐歌曲详细信息 一.目标 二.实现方案 三.最终方案 四.遗留问题 五.接下来 六.Finally 在<Android获取歌曲详细信息>一文中,介绍了几种获取网易 ...

  3. Python爬取网易云各类音乐的详细信息

    python爬虫:通过selenium+requests爬取各类音乐的详细信息 完整代码如下: from selenium import webdriver from lxml import etre ...

  4. 用WMI获取远程机器操作系统的详细信息

    使用WMI获取远程机器操作系统的详细信息 大杂烩-.NET 代码主题部分的OperatingSystem类,是使用工具(Management (WMI) Extensions for Visual S ...

  5. linux 获取模块,get_module - 获取Linux内核模块的详细信息

    补充说明 get_module命令 用于获取Linux内核模块的详细信息. 语法 get_module 模块名 实例 使用lsmod命令查看内核模块: lsmod | head -5 Module S ...

  6. taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )、淘宝店铺卖出订单详情接口,店铺订单明文接口,店铺订单解密接口,店铺订单消息推送接口

    taobao.trade.fullinfo.get( 获取单笔交易的详细信息 ),淘宝店铺卖出订单详情接口,对接该接口可用于获取淘宝店铺订单详情信息,包括卖出订单详情,买家姓名,买家电话,买家收货地址 ...

  7. taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )、淘宝店铺卖出订单详情接口,淘宝店铺订单明文接口,淘宝店铺订单解密接口

    taobao.trade.fullinfo.get( 获取单笔交易的详细信息 ),淘宝店铺卖出订单详情接口,对接该接口可用于获取淘宝店铺订单详情信息,包括卖出订单详情,买家姓名,买家电话,买家收货地址 ...

  8. taobao.trade.fullinfo.get( 获取单笔交易的详细信息API接口),淘宝店铺订单明文接口代码分享

    采用官方taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )接口拿到店铺订单详情,包括:买家信息,交易创造时间,商品交易数据,商品订单号,付款时间,付款金额,收货人手机号码 ...

  9. PC企业微信HOOK接口,获取指定好友的详细信息

    简要描述 获取指定好友的详细信息 操作码 102017 请求说明 参数名 必选 类型 说明 type 是 int 类型 user_id 是 string 用户id syncKey 是 string 同 ...

最新文章

  1. java50车架适合身高,【经验分享】身高与车架的选择
  2. Linux必学的系统管理命令-1
  3. ZJOI2019游记
  4. js实现线路流动_52期:实现redux与reactredux
  5. PAT 1079. Total Sales of Supply Chain
  6. mysql语句 java变量_Java操作Mysql的方法
  7. 英语不会读怎么办?它来教你……
  8. python做自动化控制postman_使用postman+newman+python做接口自动化测试
  9. Moodle中的角色与权限控制
  10. 叶子结点和分支节点_教你玩转二叉查找树的结点插入操作
  11. python函数参数的部分求值方法
  12. latex 之好看的字体格式
  13. html设置为壁纸win10,win10系统怎么设置桌面壁纸
  14. 万网域名是否注册批量查询工具
  15. java 图文混排_图文混排的几种实现方案
  16. stm32f103gd32的usb虚拟串口,打印类printer组合设备
  17. 「B端零售业」那些你不知道的事儿
  18. android各个版本的新特性
  19. 疫情下的科技内卷:租房被卷进“网购”时代
  20. pip离线安装第三方包

热门文章

  1. “智慧”引领视频监控新时代_智能视频分析
  2. 打开 政务上链 应用场景
  3. skywalking链路追踪实战(docker)
  4. 图解剖析CPU架构和生产全过程
  5. 仿途牛养车省养车平台源码/买卖新车租车二手车维修装潢共享O2O程序源码
  6. CCNA学习笔记(2020.2.20)
  7. 竞价教程:新手如何快速寻找暴利产品
  8. NVIDIA可编程推理加速器TensorRT学习笔记(三)——加速推理
  9. Dinornis – Rendering your Model in Mudbox by RenderMan Directly !
  10. cute cut pro 中文安卓版使用教程-手机短视频如何剪辑