2015-05-27
上次第一次http://blog.csdn.net/tjpu_lin/article/details/21275619 搭建平台后一直在研究这个订阅号可以实现的功能,后来做了天气查询,由于天气数据获取的接口不太好,只能查到即时的简单的天气情况,所以就不写文章叙述了。废话不多说了,开始音乐点播功能的实现。
如果你的语言用的是java,那么你不用往下看了,直接看上面的链接的博客,里面是用java写的,我用的是PHP,所以只能用到里面的思路,代码什么的得自己去写。
看完后大体说一下思路,首先微信提供了接口,只要数据格式满足它所给的接口的XML格式即可以发送给关注者对应的音乐。
1.构造微信提供的XML格式的音乐消息
音乐的XML格式是这样的:
12345678
我们写个函数将数据转换成这样的格式,这里面主要的数据是MusicUrl和HQMusicUrl里面的数据,前者普通品质的音乐,后面HQ是高品质的,wifi下会优先播放HQ的。
private function transmitMusic($object, $musicArray, $flag = 0) { $itemTpl =
; $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']); $textTpl = %s $item_str %d ; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag); return $resultStr; }
$musicArray = array(Title=>$songstr, Description=>歌手:.$singerstr, MusicUrl=>$this->getMusicUrl($this->getMusic($songstr,$singerstr)),HQMusicUrl=>$this->getHQMusicUrl($this->getMusic($songstr,$singerstr)));
我是这么写的,其中的$keyword就是用户输入的内容,我要求的格式是这样:格式为音乐+歌名 歌手;例如:音乐大约在冬季 齐秦,歌曲名称和歌手中间用空格分隔。
$aa = substr($keyword,strpos($keyword,音乐)+strlen(音乐));//一个汉字2个位置 $song = substr($aa,0,strpos($aa, )); $singer = substr($aa,strpos($aa, )); $songstr = trim((string)$song); $singerstr = trim((string)$singer); $musicArray = array(Title=>$songstr, Description=>歌手:.$singerstr, MusicUrl=>$this->getMusicUrl($this->getMusic($songstr,$singerstr)),HQMusicUrl=>$this->getHQMusicUrl($this->getMusic($songstr,$singerstr))); $resultStr = $this->transmitMusic($object, $musicArray, $funcFlag);具体字符串截取的函数用法可以去w3c上去查阅我就不细讲了,主要是MusicUrl和HQMusicUrl内容的获取。上面那个博客中也讲到的,
百度音乐接口http://box.zhangmen.baidu.com/x?op=12&count=1&title=TITLE$$AUTHOR$$$$
你在浏览器中输入http://box.zhangmen.baidu.com/x?op=12&count=1&title=大约在冬季$$齐秦$$$$观察一下接口提供的XML数据的内容,主要是要encode和decode中的数据,这两个数据是连在一起的,里面的CDATA中的内容取到xcode后面为止,即&mid=0.74155984312224这些内容不要,我试过,加上这部分歌曲是放不出来的。拼接好的数据就是所要的MusicUrl和HQMusicUrl。
3.下面是重点,用PHP解析XML数据,由于不懂PHP语法,我花了许多时间
//音乐点播 function read_child($node) { global $musicstr ; $children = $node->childNodes; //获得$node的所有子节点 foreach($children as $e) //循环读取每一个子节点 { /*if($e->nodeType == XML_TEXT_NODE) //如果子节点为文本型则输出 { echo $e->nodeValue.---------.; }*/ if($e->nodeType == XML_ELEMENT_NODE&&$e->nodeName=='encode') //如果子节点为文本型则输出 { $musicstr.=$e->nodeValue; } if($e->nodeType == XML_ELEMENT_NODE&&$e->nodeName=='decode') //如果子节点为文本型则输出 { $musicstr.=$e->nodeValue.|; } if($e->nodeType == XML_ELEMENT_NODE) //如果子节点为节点对象,则调用函数处理 { $this->read_child($e); //注意这里的$this->是因为的这些方法都是写在微信的那个wechatCallbackapiTest类中的,所以得加才能调用到这些函数。 } } return $musicstr ; } function getMusic($song,$singer) { $dom = new DomDocument(); //创建 DOM对象 $dom->load('http://box.zhangmen.baidu.com/x?op=12&count=1&title='.$song.'$$'.$singer.'$$$$'); //读取 XML文件 $root = $dom->documentElement; //获取 XML数据的根 return $this->read_child($root); //return $b; //调用 read_child函数读取根对象 } function getMusicUrl($url) { // echo strpos($url,&).musciURL; return substr($url,0,strpos($url,&)); } function getHQMusicUrl($url) { //echo strripos($url,&).HQmusicURL; return substr($url,strripos($url,http),strripos($url,&)-strripos($url,http)); }我是用DOM做的,百度知道上问别人的。当然取XML数据中的MusicUrl还有更好的方法,CSDN上有人给的解答http://bbs.csdn.net/topics/390734766?page=1#post-396973304
主要是截取字符串大家应该能看的懂。
最后实现成果截图:

关键的内容和知识点都已经讲完了,叙述能力拙计,可能讲不太清楚,有什么不懂的欢迎给我评论,尽力回答。
求喜欢java的关注一下我的公众平台jLoveInterview,每天都有发一些相关的知识,求关注,你有平台也可以叫我关注,互相关注,共同监督完善平台。
1
CI框架连接数据库配置操作以及多数据库操作
09-05
2
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
05-17
3
C语言关键字及其解释介绍 C语言32个关键字详解
04-05
4
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
04-26
5
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
09-05
6
将视频设置为Android手机开机动画的教程
12-11
7
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
8
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
04-12
常用dos命令及语法
2014-09-27
PHP中include和require区别之我见
2014-09-05
php递归返回值的问题
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
PHP数组函数array
2014-09-05
学ug编程如何快速入门?
2022-03-17
学习使用C语言/C++编程的7个步骤!超赞~
2022-03-20
零基础的初学者怎样学习java,或者应该先学什么?
2022-03-21
像素拼图最新版下载v5.01 安卓版
其它手游 23.76MB
下载
机器人战斗竞技场手机版下载v3.71 安卓版
其它手游 77.19MB
下载
果冻人大乱斗最新版下载v1.1.0 安卓版
其它手游 113.98MB
下载
王者100刀最新版下载v1.2 安卓版
其它手游 72.21MB
下载
trueskate真实滑板正版下载v1.5.102 安卓版
其它手游 83.48MB
下载
矢量跑酷2最新版下载v1.2.1 安卓版
其它手游 119.39MB
下载
休闲解压合集下载v1.0.0 安卓版
其它手游 33.41MB
下载
指尖游戏大师最新版下载v4.0.0 安卓版
其它手游 74.77MB
下载飞天萌猫下载v3.0.3 安卓版
下载
火柴人越狱大逃脱下载v1.1 安卓版
下载
末日战场生死局下载v1.0 安卓版
下载
安静书女孩世界下载v1.0 安卓版
下载
消个寿司下载v1.00 免费版
下载
趣味找猫猫下载v1.1.2 安卓版
下载
方块男孩大战恶霸最新版下载v1.0.18 安卓版
下载
根本难不倒我下载v1.0.1 最新版
下载