微信开发二三事:功能应用三、点歌系统
来源:互联网 发布:apache参数优化 编辑:程序博客网 时间:2024/06/02 16:03
首先,得感谢柳峰老师的书,我是看了那本书,才知道有这么一个接口的。
OK,上两篇已经把微信聊天机器人讲完了,今天我们来讲讲微信点歌系统。
相信很多同学都喜欢听歌,但是.....我们也知道,现在的手机听歌APP越来越多,所以,我们用微信做点歌系统的话,有不足,也有优点。不足点为:功能不如专门的听歌软件强大,也没那么全面,无法下载。优点:不需要专门的听歌软件,只需要有微信即可(ps:个人观点)。为了完善我们的一个功能,我觉得点歌,还是很有必要的,so,那就不兜圈子了,进入正题。
给出接口:http://box.zhangmen.baidu.com/x?op=12&count=1&title={TITLE}$${AUTHOR}$$$$,这个是大掌门音乐网的隐藏接口,并没有公布(从柳峰老师的书中得知),根据接口我们可以知道,需要传输的参数,应该就是这个TITLE,歌曲名,和这个AUTHOR,演唱者了。所以这两个参数,就应该是用户传过来的值,我们只需要解析这个接口的响应值,然后拼接音乐格式的xml,然后发给用户即可,步骤如下:
1、创建music类
/** @auther yc*/public class Music {private String title;<span style="white-space:pre"></span>//歌曲名private String description;<span style="white-space:pre"></span>//描述private String musicUrl;<span style="white-space:pre"></span>//音乐播放地址private String hqMusicUrl;<span style="white-space:pre"></span>//高清<span style="font-family: Arial, Helvetica, sans-serif;">音乐播放地址</span>private String thumbMediaId;<span style="white-space:pre"></span>//小图标public Music() {super();}public Music(String title, String description, String musicUrl,String hqMusicUrl, String thumbMediaId) {super();this.title = title;this.description = description;this.musicUrl = musicUrl;this.hqMusicUrl = hqMusicUrl;this.thumbMediaId = thumbMediaId;}@XmlCDATA@XmlElement(name = "Title")public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}@XmlCDATA@XmlElement(name = "Description")public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}@XmlCDATA@XmlElement(name = "MusicUrl")public String getMusicUrl() {return musicUrl;}public void setMusicUrl(String musicUrl) {this.musicUrl = musicUrl;}@XmlCDATA@XmlElement(name = "HQMusicUrl")public String getHqMusicUrl() {return hqMusicUrl;}public void setHqMusicUrl(String hqMusicUrl) {this.hqMusicUrl = hqMusicUrl;}@XmlCDATA@XmlElement(name = "ThumbMediaId")public String getThumbMediaId() {return thumbMediaId;}public void setThumbMediaId(String thumbMediaId) {this.thumbMediaId = thumbMediaId;}@Overridepublic String toString() {return "Music [title=" + title + ", description=" + description+ ", musicUrl=" + musicUrl + ", hqMusicUrl=" + hqMusicUrl+ ", thumbMediaId=" + thumbMediaId + "]";}}2、搜索音乐:
public Music searchMusic(String musicTitle, String musicAuthor) throws Exception { String BaiduMusicService="http://box.zhangmen.baidu.com/x?op=12&count=1&title={TITLE}$${AUTHOR}$$$$";String requestUrl= BaiduMusicService.replace("{TITLE}", <span style="font-family: Arial, Helvetica, sans-serif;">URLEncoder.encode(</span><span style="font-family: Arial, Helvetica, sans-serif;">musicTitle</span><span style="font-family: Arial, Helvetica, sans-serif;">,"utf-8")</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span><span style="font-family: Arial, Helvetica, sans-serif;"></span>requestUrl=requestUrl.replace("{AUTHOR}", URLEncoder.encode(<span style="font-family: Arial, Helvetica, sans-serif;">musicAuthor</span><span style="font-family: Arial, Helvetica, sans-serif;">,"utf-8")</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>requestUrl=requestUrl.replaceAll("\\+", "%20");//这里用的是HttpRequest的另一个方法,和原先的差不多,只是返回的类型是String,不是JSONObjectString xmlResult=HttpRequest.httpRequest(requestUrl);Music music=parseMusic( xmlResult );<span style="white-space:pre"></span>//解析XMLif( music!=null){music.setTitle(musicTitle);if( musicAuthor!=null){music.setDescription(musicAuthor);}else{music.setDescription("来自源辰小助手");}}return music;}3、解析返回响应值
private Music parseMusic(String xmlResult) {Music music=null;//注意,导dom4j的包SAXReader reader=new SAXReader();try {Document doc=reader.read( new ByteArrayInputStream( xmlResult.getBytes()));Element root=doc.getRootElement();String count=root.element("count").getText();if( !"0".equals(count)){List<Element> urlList=root.elements("url");List<Element> durlList=root.elements("durl");String urlEncode=urlList.get(0).element("encode").getText();String urlDecode=urlList.get(0).element("decode").getText();//普通品质的音乐的urlString url=urlEncode.substring(0,urlEncode.lastIndexOf("/")+1)+urlDecode;if( urlDecode.lastIndexOf("&")!=-1){url=urlEncode.substring(0,urlEncode.lastIndexOf("/")+1)+urlDecode.substring(0,urlDecode.lastIndexOf("&"));}//高品质音乐String durl=url;//判断是否存在高品质音乐节点Element durlElement=durlList.get(0).element("encode");if( durlElement !=null){//高品质音乐节点数据String durlEncode=durlList.get(0).element("encode").getText();String durlDecode=durlList.get(0).element("decode").getText();//拼装高品质音乐durl=durlEncode.substring(0,durlEncode.lastIndexOf("/")+1)+durlDecode;if( durlDecode.lastIndexOf("&")!=-1){durl=durlEncode.substring(0,durlEncode.lastIndexOf("/")+1)+durlDecode.substring(0,durlDecode.lastIndexOf("&"));}}//创建音乐对象music=new Music();music.setMusicUrl( url );music.setHqMusicUrl(durl);}} catch (DocumentException e) {YcUtils.error(e);}return music;}5、如何调用,这里应该是要用户按照格式输入一个值,然后通关关键字匹配,截取出歌曲名或者歌手,然后传给刚才那个方法:
/** * 音乐操作 * @author yc * @param content * @throws Exception */public Music musicOp(String content) throws Exception {// 将歌曲两个字及后面的特殊字符去掉String keyword = content.replaceAll("^音乐[\\+ ~!@#%^-_=]?", "");// 如果歌曲名为空,则表明用户不明白该功能意思,将本功能描述再显示一次if ("".equals(keyword)) {throw new RuntimeException("无歌名,显示功能描述");}// 不为空,则取出歌曲名及作者String[] keywordArray = keyword.split("@");String musicTitle = keywordArray[0];String musicAuthor = "";if (keywordArray.length >= 2) {musicAuthor = keywordArray[1];}// 再查找Music music = musicService.searchMusic(musicTitle, musicAuthor);return music;}OK,接下来,就是拼接xml的事情了,相信到了现在,你们的xml也应该封装完毕,所以拼接XML我就不写了,你们都懂的,那么,点歌功能就是这么实现的。在这里,我想强调一句话,数据是死的,而人是活的~~
1 0
- 微信开发二三事:功能应用三、点歌系统
- 基于微信的【点歌台】功能开发
- 微信语音点歌系统
- 【php】微信公众平台--点歌功能
- 打造一个微信语音点歌系统
- 微信开发学习:点歌台
- C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍
- 微信开发二三事:功能应用一、天气预报
- 微信开发二三事:功能应用二、聊天机器人(1)
- 微信开发二三事:功能应用二、聊天机器人(2)
- C#开发微信门户及应用(46)-基于Bootstrap的微信门户应用管理系统功能介绍
- 可以点歌的微信公共账号
- 十分钟教你打造一个微信语音点歌系统
- 10分钟教你打造一个微信语音点歌系统
- 微信公众平台消息接口开发(50)在线点歌/在线音乐
- 微信公众平台消息接口开发(50)在线点歌/在线音乐
- 微信公众平台消息接口开发(50)在线点歌/在线音乐
- 微信公众平台消息接口开发(50)在线点歌/在线音乐
- 继承的相关注意事项
- [bin神带我飞系列]专题一 搜索入门
- 《操作系统》——存储管理
- magento xml配置详解(2)
- java实现极简单的 TXT小说阅读器
- 微信开发二三事:功能应用三、点歌系统
- 截取字符串中的子串
- 简介jni(三)
- ORACLE9i_性能调优基础四(Buffer Cache )
- Longest Common Prefix python题解
- 质数筛选方法
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- sql 笔试题
- 黑马程序员JAVA JDK1.5新特性