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 = ; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag); return $resultStr; } %s $item_str %d
$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
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
7
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
04-12
8
常用dos命令及语法
09-27
PHP中include和require区别之我见
2014-09-05
将视频设置为Android手机开机动画的教程
2014-12-11
php递归返回值的问题
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
java中的info是什么意思
2022-03-24
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
学ug编程如何快速入门?
2022-03-17
PHP数组函数array
2014-09-05
IcePHP框架中的快速后台中的通用CRUD功能框架
2014-09-05
真实枪械武器模拟器游戏下载v2.177 安卓版
射击枪战 194.6M
下载果汁四溅2中文版下载v1.9.8 安卓版
休闲益智 81.7M
下载我飞刀玩得贼6手游下载v2.2.7 安卓版
休闲益智 73.9M
下载方块冒险下载v1.1.9 安卓版
休闲益智 19.7M
下载我是鸽手游戏下载v2.0.0 安卓版
休闲益智 41.3M
下载耶小兔子2最新中文版下载v1.2.9 安卓版
休闲益智 60.9M
下载弓箭大师你就是王者游戏下载v2.0.1 安卓最新版
其它手游 164.4M
下载弓箭大师你就是王者官方版下载v2.0.1 安卓版
其它手游 164.4M
下载3d狙击王者手机游戏下载v1.5 安卓版
下载
足球冲鸭手机版下载v1.0.16.404.401.0116 安卓版
下载
有种来找我手游下载v1.4.8 安卓版
下载
忍者跳跳跳官方版下载v1.0.2 安卓版
下载
百战斗斗堂拇指游戏下载v5.8 安卓版
下载
梦幻斗斗堂手游下载v5.8 安卓版
下载
百战斗斗堂4399版下载v5.8 安卓版
下载
百战斗斗堂九游手游下载v5.8 安卓版
下载