微信开发二三事:功能应用三、点歌系统

来源:互联网 发布: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
原创粉丝点击