三、点播歌曲

来源:互联网 发布:武汉软件新城 大巴 编辑:程序博客网 时间:2024/05/02 02:19

 微信点歌其实已有很多博客写过,不过重复超超轮子就当锻炼锻炼身体嘛。先上效果图


   回复2.2@谢谢你的爱,它先会去找这首歌,然后返回回来,如果找的不是你想点的歌曲,则需要中上歌手名称,如2.2@谢谢你的爱谢霆锋


代码部分如下

   1、统一回复调用方法


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//这里只对文本消息进行处理
private function reply($data){
    if('text' == $data['MsgType']){
        $text=$data["Content"];
        if($text=="?"){
            return $this->get_main_datas();
        }
        $_menu_text=strpos($text,"@")===false?$text:(string)doubleval($text);//当需要查询时,指令为1.1@xxx使用进行doubleval转换
        if(array_key_exists($_menu_text$this->all_info)){//存在于菜单中,当输入,1 2 3 时
            return $this->get_replay_datas($_menu_text,$text,$data["FromUserName"]);
        }
        return $this->hello();
    elseif('event' == $data['MsgType'] && 'subscribe' == $data['Event']){
        //订阅写入数据表
        return $this->hello();
        //$reply = array('欢迎您关注桂林小魔方童装公众助手! 打开我们的网站:http://aidemofang.com 可以了解最新的款式和价格.', 'text');
    else {
        exit;
    }
}
     
    //取得回复的信息
    private function get_replay_datas($_menu_text,$text,$fromUser){
        $menu_text=strlen($_menu_text)==1?$_menu_text-1:$_menu_text;
        $method $this->get_method($menu_text);
        $param=null;
        if(strpos($text,"@")!==false){
            $arr = preg_split("/@/"$text);
            $param=$arr[1];
        }
        return $this->$method($param,$fromUser);
    }

   2、点歌实现


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//歌曲点播
    public function get_song($song_title,$fromUser){
        //$song_title="春天里";
  
        $m_param=array(
            "op"    =>"7",
            "mode"  =>"1",
            "count" =>"1",
            "title" =>$song_title
        );
        $song_datas=http("http://box.zhangmen.baidu.com/x",$m_param);  
        $song_utf8=utf8($song_datas,"gbk");
  
        preg_match_all('/\<name\>(.*?)\<\/name\>/s'$song_utf8$matchs); 
        if(count($matchs)>1){
            $song_name=$matchs[1][0];
        }
        if(empty($song_name)){
            return array("未找到这首歌,检查一下网络或咱们换一首吧.","text");
        }
  
        $param=array(
            "op"    =>"12",
            "count" =>"1",
            "title" =>trim("$song_name")
        );
        //查找作者的这首歌
        $datas=http("http://box.zhangmen.baidu.com/x",$param);
  
        $xml new DOMDocument(); 
        $xml->loadXML($datas);
  
        $lst=$xml->getElementsByTagName('encode');
  
        //普通质量地址
        $item=$lst->item(0);
        $pre=$item->nodeValue;
        $suffix=$item->nextSibling->nodeValue;
        $MusicURL=str_replace(strrchr($pre"/"),"",$pre)."/".str_replace(strrchr($suffix"&"),"",$suffix);
  
  
        //高质量地址
        $item=$lst->item(0);
        $pre=$item->nodeValue;
        $suffix=$item->nextSibling->nodeValue;
        $HQMusicUrl=str_replace(strrchr($pre"/"),"",$pre)."/".str_replace(strrchr($suffix"&"),"",$suffix);
  
  
        $datas=array();
        $datas[]=str_replace('$'""$song_name);//音乐标题
        $datas[]="来自互联网";//音乐描述
        $datas[]="$MusicURL";//音乐链接
        $datas[]="$HQMusicUrl";//高质量音乐链接,WIFI环境优先使用该链接播放音乐
  
        $this->sendLyric(str_replace('$$'"-"$song_name),$fromUser);
        return array($datas,"music");
  
    }
  
    private function sendLyric($song_name,$fromUser){
        $param=array(
            "key"   => "free",
            "appid" =>   "0",
            "msg"   =>   "歌词".$song_name
        );
        $datas=http("http://api.ajaxsns.com/api.php",$param);
        $json=json_decode($datas);
        if($json->result==0){
            $content=str_replace("{br}","\n",$json->content);
            $content.="\n\n小助手:回复 @ 进入主界面";
            import('@.ORG.ThinkWechat');
            $weixin new ThinkWechat ();
            $result=$weixin->sendMsg($content$fromUser"text" );//发送歌词
  
            Log::write(" init data ->".$fromUser." ,content =$content");
            Log::write("result -> ".print_r($result,true));
        }
          
    }</name\>


*上面增加了发送歌词接口,自动发送给客户端,可惜我是订阅号,似乎没有那上权限,so,放弃吧.

0 0
原创粉丝点击