通过爬虫爬取酷狗的音乐资源

首先搜索json数据获取地址:
https://songsearch.kugou.com/song_search_v2?keyword=许嵩&page=1&pagesize=30&platform=WebFilter&tag=em&filter=2
然后获取关键参数是Hash
https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash=973F18E12220A68B77BCD3B0BDB32FF1
接下来就至少需要4个包了,省略了调度层和持久层
第一个 下载包
第一个方法是通过ui获取到包含hash,歌名,歌手的网页源代码,然后通过解析成json数组传递带前端展示,但只是把歌名,歌手和hash传过去,并没有把MP3文件地址传过去
第二个方法是通过传过来的hash获取MP3文件地址和歌词,封面图片地址

public class DownloadUtil {public static String getKugouSource(String url,String charset) throws IOException{HttpURLConnection urlobject=(HttpURLConnection)new URL(url).openConnection();InputStream is=urlobject.getInputStream();InputStreamReader ir=new InputStreamReader(is,charset);BufferedReader br=new BufferedReader(ir);StringBuffer sb=new StringBuffer();String temp=null;while ((temp=br.readLine())!=null){sb.append(temp);}br.close();return  sb.toString();}public static String getMp3ByHash(String url) throws Exception{//String url="https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash="+hash;String charset="utf-8";String sourse= DownloadUtil.getKugouSource(url, charset);return sourse;

第二个 解析包
在这里通过传过来的resourse进行处理,解析过程用到了***json***对象,所以还需拷jar包,其次还用到了***正则表达式***和***jsoup***

public class Jiexi {public static String getKugouHtml(String sourse) throws Exception{JSONObject jsonObject1 = JSONObject.fromObject(sourse) ;JSONObject jsonObject2=jsonObject1.getJSONObject("data");JSONArray jsonArray=jsonObject2.getJSONArray("lists");JSONArray jSONArray2=new JSONArray();for (int i=0;i<jsonArray.size();i++){JSONObject jsonObject3=jsonArray.getJSONObject(i);String songname=null;String singer=null;String  hash=null;if (jsonObject3.containsKey("SongName")){songname=jsonObject3.getString("SongName");songname=songname.replaceAll("<em>","").replaceAll("<\\/em>","");//System.out.println(songname);}if (jsonObject3.containsKey("SingerName")) {singer = jsonObject3.getString("SingerName");singer=singer.replaceAll("<em>","").replaceAll("<\\/em>","");}if (jsonObject3.containsKey("FileHash")) {hash = jsonObject3.getString("FileHash");}JSONObject jsonObject=new JSONObject();jsonObject.put("songname",songname);jsonObject.put("singer",singer);jsonObject.put("address",hash);jSONArray2.add(jsonObject);}return jSONArray2.toString();}public  static String getMp3(String hash) throws Exception{String url= Ui.geturl2(hash);String sourse1=DownloadUtil.getMp3ByHash(url);//StringBuilder sb=new  StringBuilder();//StringBuffer sb=new StringBuffer("{'img':'");String regex1=".*?img\":\"(.*?)\".*?lyrics\":\"(.*?)\".*?play_url\":\"(.*?)\".*?";JSONObject jsonObject=new JSONObject();JSONArray jsonArray=new JSONArray();Pattern pattern1=Pattern.compile(regex1);Matcher matcher1=pattern1.matcher(sourse1);if (matcher1.find()) {//sb.append(matcher1.group(1)).append("','address':'").append(matcher1.group(2)).append("'}");jsonObject.put("img",matcher1.group(1));// System.out.println("address:"+matcher1.group(1));if(matcher1.group(3)!=""&&matcher1.group(3).toString().contains(".mp3")){jsonObject.put("address",matcher1.group(3));}if(matcher1.group(2)!=""&&matcher1.group(2).toString().contains("]")){String x= Diaodu.uToCn(matcher1.group(2));jsonObject.put("geci",x.trim());}}///JSONArray jsonArray=new JSONArray(sb.toString());jsonArray.add(jsonObject);System.out.println("jjiio"+jsonArray);return jsonArray.toString();}

然后是 ui包
所以的链接都写在ui包中

public class Ui {public static String getUrl1(String name){String url1="https://songsearch.kugou.com/song_search_v2?keyword="+name+"&page=1&pagesize=30&platform=WebFilter&tag=em&filter=2";return url1;}public static String geturl2(String hash){String url2="https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash="+hash;return url2;}public  static String getImgsUrl(){String urlImg="http://www.kugou.com/";return urlImg;}public  static String getbiaoshengUrl(){String url="https://www.kugou.com/yy/rank/home/1-31308.html?from=rank";return url;}public  static String getregeUrl(){String url="https://www.kugou.com/yy/rank/home/1-8888.html?from=rank";return url;}

还有一个方法使来处理Unicode编码的,因为小程序不支持这种编码,所以在后台需要转换

   public static String uToCn(String unicode) {String returnStr = "";unicode = "\\u0020" + unicode ;String[] strs =unicode.split("\\\\u");// 由于unicode字符串以 \ u 开头,因此分割出的第一个字符是""。for (int j = 1; j < strs.length; j++) {returnStr += (char) Integer.valueOf(strs[j].substring(0 , 4) , 16).intValue() + strs[j].substring(4);}return returnStr;}

最后是servlet,这里就不做过多赘述了,比较简单

Java爬虫后台微信小程序之音乐播放器(下)相关推荐

  1. Java爬虫后台+微信小程序之音乐播放器(上)

    微信小程序–音乐播放器(Java爬虫后台在下文篇章公布) 主页面: wxml: css就不展示了,比较多 <view class='container' style='width:{{wid}} ...

  2. html5音乐播放器设计论文,基于微信小程序的音乐播放器设计和毕业论文

    摘  要 随着通信技术的发展和智能设备的普及,移动互联网在近两年发展迅猛,新兴的移动社交软件"微信"逐渐走进了手机用户的生活,深受全国数亿用户的欢迎.随着微信版本的不断更新,微信也 ...

  3. 微信小程序实现音乐播放器(2)

    文章目录 前情提要 BackgroundAudioManager API:wx.setNavigationBarTitle() 搭建静态资源服务器 小程序项目 app.json app.wxss pa ...

  4. 微信小程序实现音乐播放器(5)

    文章目录 前情提要 pubsubjs实现页面通信 moment.js实现时间格式化 BackgroundAudioManager 小程序项目 app.json app.wxss app.js page ...

  5. 许嵩音乐智能问答系统微信小程序之音乐播放器

    许嵩音乐智能问答系统微信小程序之音乐播放器 - 项目简介 项目简介. 音乐播放器搭建. 获取数据及文本分类. 智能客服聊天界面. 连接前端微信小程序输入和后端python,并返回值 连接知识图谱 你还 ...

  6. 微信小程序实现音乐播放器(3)(使用全局数据实现数据共享)

    文章目录 前情提要 搭建静态资源服务器 小程序项目 app.json app.js app.wxss pages/index/index.json pages/index/index.wxml pag ...

  7. 2023基于微信小程序的音乐播放器+后台管理系统(SSM+mysql)-JAVA.VUE毕业设计源码论文(论文+开题报告+运行)

    摘 要 随着信息化时代的到来,各种程序都趋向于智能化.系统化:微信音乐播放器小程序也不例外,目前国内的市场仍都使用人工管理,随着市场规模越来越大,信息量也越来越庞大,人工管理显然已无法应对时代的变化, ...

  8. 微信小程序017音乐播放器系统 php java

    小程序前端框架:uniapp 小程序运行软件:微信开发者 后端技术:java+Ssm(Spring+SpringMVC+MyBatis)+vue.js 后端开发环境:idea/eclipse 数据库: ...

  9. 基于微信小程序的音乐播放器设计

    目 录 1绪论 1 1.1选题背景及意义 1 1.2发展现状 1 1.2.1什么是微信小程序 1 1.2.2小程序市场的现状 4 1.3研究主要内容 4 2系统技术 5 2.1 Java语言 5 2. ...

最新文章

  1. 科普丨深度神经网络与生命的意义
  2. 桌面程序explorer_备份Internet Explorer 7搜索提供程序列表
  3. Java 常见的 30 个误区与细节!
  4. java 实现中文排序,Java自定义比较器实现中文排序
  5. pycharm 怎么快速生成文件夹结构_为什么Python代码能运行但是PyCharm给我画红线?...
  6. linux服务占用的真实内存,为什么TOP看不出真实的内存占用情况?
  7. html表单实现ajax登陆,node.js+jQuery实现用户登录注册AJAX交互
  8. Xamarin University-----Xamarin Mobile Certification Exam考试经历(还没写完)
  9. C语言练习题目录索引
  10. Python爬虫系列(一)——手把手教你写Python爬虫
  11. 调整计算机硬盘大小,详细教您怎么调整硬盘分区
  12. 将数字转为ASCII码
  13. 在Excel中快速选择数据
  14. VS2019创建基于SDL+ffmpeg的工程
  15. python aks_使用环回aks和terraform构建基于打字稿的游戏后端
  16. shell脚本:介绍、语法、运算、流程控制、对文件/输出流处理、案例
  17. xxl-job 带参数执行和高可用部署
  18. 打击电商假货的社会意义
  19. 微步在线:半年融资8亿,综合型网络安全“新贵”诞生
  20. 软件设计师笔记之信息安全知识

热门文章

  1. Java 对象排序完整版
  2. Chrome浏览器无法翻译
  3. python余弦定理求角_python余弦定理计算相似度
  4. 【Python 跟书学习笔记】
  5. 北京:外地社保卡可以在北京19家医院实现住院费用即时结算!
  6. js - 在指定位置添加指定字符
  7. 未来-区块链-Aliyun:阿里云IoT - 所知不止于感知
  8. 绪言 前端性能的重要性 HTTP概述
  9. CSGO开箱C++小程序。(229行)
  10. 英语小学口语测试软件,你们的小学英语口语测试怎么搞?