1.构造微信提供的可扩展置标语言格式的音乐消息音乐的可扩展置标语言格式是这样的:复制代码代码如下:xml ToUserName![CData[用户]]/用户名称来自用户名![CData[来自用户]]/来自用户名创建时间12345678/创建时间MsgType![CDATA[音乐]]/MsgType音乐标题![CDATA[标题]]/标题描述![CData[描述]]/描述音乐Url![CData[MUSIC _ URl]]/MUSIC URl hqmusicul![Cdata[HQ _ MUSIC _ URl]/Hqmusiculr拇指媒体身份证![CData[media _ id]]/拇指媒体Id /Music /xml我们写个函数将数据转换成这样的格式,这里面主要的数据是音乐全球资源定位器(Uniform Resource Locator)和HQMusicUrl里面的数据,前者普通品质的音乐,后面总部是高品质的,wifi下会优先播放总部的。复制代码代码如下:私有函数transmitMusic($object,$musicArray,$flag=0) { $itemTpl='Music Title![CDATA[% s]]/标题说明![CData[% s]]/描述音乐Url![CData[% s]]/MusicURL hQmusicul![CData[% s]]/hqmusiculr/Music ';$item_str=sprintf($itemTpl,$musicArray['Title'],$musicArray['Description'],$musicArray['MusicUrl'],$ music array[' hqmusicul ']);$textTpl='xml ToUserName![CData[% s]]/从用户名使用用户名![CData[% s]]/来自用户名创建时间% s/创建时间MsgType![CData[音乐]]/MSgtype $ item _ str FuncFlag % d/FuncFlag/XML ';$resultStr=sprintf($textTpl,$object-FromUserName,$object-ToUserName,time(),$ flag);返回$ resultStr}2。构造参数$musicArray复制代码代码如下:美元musicArray=数组(' Title '=$ songstr,' Description'='歌手:'.$singerstr,' MusicUrl '=$ this-getMusicUrl($ this-getMusic($ sonstr,$singerstr)),' hqmusicull '=$ this-gethqmusicull($ this-getMusic($ sonstr,$ singer str));其中的$ songstr和$singerstr变量是得从接受关注者的文本,你先提醒关注者按照一定的格式输入文本,安然按这个固定格式截取出其中的歌曲歌手名。这个不难实现我是这么写的,其中的$关键字就是用户输入的内容,我要求的格式是这样:格式为音乐歌名歌手;例如:音乐大约在冬季齐秦,歌曲名称和歌手中间用空格分隔。复制代码代码如下:美元aa=substr($关键字,字符串位置($关键字,)音乐)strlen('音乐'));//一个汉字2个位置$song=substr($aa,0,str pos($ aa ' ');$singer=substr($aa,str pos($ aa ' ');$ songstr=trim((string)$ song);$ singer str=trim((string)$ singer);$musicArray=数组(' Title '=$ songstr,' Description'='歌手:'.$singerstr,' MusicUrl '=$ this-getMusicUrl($ this-getMusic($ sonstr,$singerstr)),' hqmusicull '=$ this-gethqmusicull($ this-getMusic($ sonstr,$ singer str));$ resultStr=$ this-transmitMusic($ object,$musicArray,$ Funcflag);具体字符串截取的函数用法可以去w3c上去查阅我就不细讲了,主要是音乐全球资源定位器(Uniform Resource Locator)和HQMusicUrl内容的获取。百度音乐接口http://box.zhangmen.baidu.com/x?op=12计数=1 TITLE=TItle $ $ AUTHOR $ $你在浏览器中输入http://box.zhangmen.baidu.com/x?op=12count=1title=大约在冬季$$齐秦$$$$观察一下接口提供的可扩展置标语言数据的内容,主要是要编码和译中的数据,这两个数据是连在一起的,里面的CDATA中的内容取到xcode后面为止,即mid=0.74155984312224这些内容不要,我试过,加上这部分歌曲是放不出来的。拼接好的数据就是所要的音乐全球资源定位器(Uniform Resource Locator)和HQMusicUrl。
3.下面是重点,用服务器端编程语言(专业超文本预处理器的缩写)解析可扩展置标语言数据由于不懂服务器端编程语言(专业超文本预处理器的缩写)语法,我花了许多时间复制代码代码如下://音乐点播函数read _ child($ node){ global $ music str;$ children=$ node-childNodes;//获得$node的所有子节点foreach($儿童为$e) //循环读取每一个子节点{/* if($ e-NodeType==XML _ TEXT _ NODE)//如果子节点为文本型则输出{ echo $e-nodeValue .' - '.BR ';} */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);//注意这里的$这个-是因为的这些方法都是写在微信的那个微信回调加速测试类中的,所以得加才能调用到这些函数} }返回$ musicstr}函数getMusic($song,$ singer){ $ DOM=new DOM document();//创建数字正射影像图对象$ DOM-加载(' http://框。张的手下。百度。com/x?op=12count=1title=' .$歌曲。'$$'.歌手。'$$$$');//读取可扩展置标语言文件$ root=$ DOM-文档元素;//获取可扩展置标语言数据的根返回$ this-read _ child($ root);//返回$ b;//调用读取子级函数读取根对象}函数GetMusicURl($ URL){//echo str pos($ URL ' ').muscuirl ';返回substr($url,0,strpos($url,');}函数GethQmusicull($ URL){//echo str pos($ URL ' ').“hqmusiculr”;返回substr($url),strripos($url,' http '),str ripos($ URL ' ')-str ripos($ URL,' http ');}我是用数字正射影像图做的,百度知道上问别人的。当然取可扩展置标语言数据中的音乐全球资源定位器(Uniform Resource Locator)还有更好的方法:复制代码代码如下: XML=file _ get _ contents(' http://框。张的手下。百度。com/x?op=12count=1title=大约在冬季$$齐秦$$$$');$ result=simple XML _ load _ string($ XML);回显字符串值($ result-URL-encode);回显字符串值($ result-URL-decode);//输出:http://章门庭。百度。com/data 2/music/64380827/z2zmbgvuaw9fn 6 nndk 6 a5 wxcgvpzpazjdrbgtqmm 1 my 2 ollpnmpsxzwzubzyclmlzammxa3c tzjezm w1 cgvll 1 Qin 5 t1 ywmbgxsamxlagvrbg 9 state $ 64380827。MP3?xcode=140 db3e 8864 c 55164 ad 0 BCE 2297 ede 73 EAA 48 B2 de d 70843 mid=0。58860 .88888888861最后实现成果截图
关键内容和知识点已经讲完,叙述能力比较笨拙,可能不太清楚。什么都不懂的请评论,尽量回答。