歌曲点播
微信点歌其实已有很多博客写过,不过重复超超轮子就当锻炼锻炼身体嘛。先上效果图
回复2.2@谢谢你的爱,它先会去找这首歌,然后返回回来,如果找的不是你想点的歌曲,则需要中上歌手名称,如2.2@谢谢你的爱谢霆锋
代码部分如下
1、统一回复调用方法//这里只对文本消息进行处理<br>
private function reply($data){<br>
if('text' == $data['MsgType']){<br>
$text=$data["Content"];<br>
if($text=="?"){<br>
return $this->get_main_datas();<br>
}<br>
$_menu_text=strpos($text,"@")===false?$text:(string)doubleval($text);//当需要查询时,指令为1.1@xxx使用进行doubleval转换<br>
if(array_key_exists($_menu_text, $this->all_info)){//存在于菜单中,当输入,1 2 3 时<br>
return $this->get_replay_datas($_menu_text,$text,$data["FromUserName"]);<br>
}<br>
return $this->hello();<br>
} elseif('event' == $data['MsgType'] && 'subscribe' == $data['Event']){<br>
//订阅写入数据表<br>
return $this->hello();<br>
//$reply = array('欢迎您关注桂林小魔方童装公众助手! 打开我们的网站:http://aidemofang.com 可以了解最新的款式和价格.', 'text');<br>
} else {<br>
exit;<br>
}<br>
}<br>
<br>
//取得回复的信息<br>
private function get_replay_datas($_menu_text,$text,$fromUser){<br>
$menu_text=strlen($_menu_text)==1?$_menu_text-1:$_menu_text;<br>
$method = $this->get_method($menu_text);<br>
$param=null;<br>
if(strpos($text,"@")!==false){<br>
$arr = preg_split("/@/", $text);<br>
$param=$arr[1];<br>
}<br>
return $this->$method($param,$fromUser);<br>
}
2、点歌实现//歌曲点播<br>
public function get_song($song_title,$fromUser){<br>
//$song_title="春天里";<br>
<br>
$m_param=array(<br>
"op" =>"7",<br>
"mode" =>"1",<br>
"count" =>"1",<br>
"title" =>$song_title<br>
);<br>
$song_datas=http("http://box.zhangmen.baidu.com/x",$m_param); <br>
$song_utf8=utf8($song_datas,"gbk");<br>
<br>
preg_match_all('/\<name>(.*?)\/s', $song_utf8, $matchs); <br>
if(count($matchs)>1){<br>
$song_name=$matchs[1][0];<br>
}<br>
if(empty($song_name)){<br>
return array("未找到这首歌,检查一下网络或咱们换一首吧.","text");<br>
}<br>
<br>
$param=array(<br>
"op" =>"12",<br>
"count" =>"1",<br>
"title" =>trim("$song_name")<br>
);<br>
//查找作者的这首歌<br>
$datas=http("http://box.zhangmen.baidu.com/x",$param);<br>
<br>
$xml = new DOMDocument(); <br>
$xml->loadXML($datas);<br>
<br>
$lst=$xml->getElementsByTagName('encode');<br>
<br>
//普通质量地址<br>
$item=$lst->item(0);<br>
$pre=$item->nodeValue;<br>
$suffix=$item->nextSibling->nodeValue;<br>
$MusicURL=str_replace(strrchr($pre, "/"),"",$pre)."/".str_replace(strrchr($suffix, "&"),"",$suffix);<br>
<br>
<br>
//高质量地址<br>
$item=$lst->item(0);<br>
$pre=$item->nodeValue;<br>
$suffix=$item->nextSibling->nodeValue;<br>
$HQMusicUrl=str_replace(strrchr($pre, "/"),"",$pre)."/".str_replace(strrchr($suffix, "&"),"",$suffix);<br>
<br>
<br>
$datas=array();<br>
$datas[]=str_replace('$', "", $song_name);//音乐标题<br>
$datas[]="来自互联网";//音乐描述<br>
$datas[]="$MusicURL";//音乐链接<br>
$datas[]="$HQMusicUrl";//高质量音乐链接,WIFI环境优先使用该链接播放音乐<br>
<br>
$this->sendLyric(str_replace('$$', "-", $song_name),$fromUser);<br>
return array($datas,"music");<br>
<br>
}<br>
<br>
private function sendLyric($song_name,$fromUser){<br>
$param=array(<br>
"key" => "free",<br>
"appid" => "0",<br>
"msg" => "歌词".$song_name<br>
);<br>
$datas=http("http://api.ajaxsns.com/api.php",$param);<br>
$json=json_decode($datas);<br>
if($json->result==0){<br>
$content=str_replace("{br}","\n",$json->content);<br>
$content.="\n\n小助手:回复 @ 进入主界面";<br>
import('@.ORG.ThinkWechat');<br>
$weixin = new ThinkWechat ();<br>
$result=$weixin->sendMsg($content, $fromUser, "text" );//发送歌词<br>
<br>
Log::write(" init data ->".$fromUser." ,content =$content");<br>
Log::write("result -> ".print_r($result,true));<br>
}<br>
<br>
}</name>\>
休闲豆http://www.xiuxiandou.com
AD:真正免费,域名+虚机+企业邮箱=0元