• 微信公众平台开发(33)在线点歌/在线音乐


    原文: http://www.cnblogs.com/imaker/p/5491433.html

    微信公众平台在年前开放了新的消息接口-音乐消息,这是广大微信公众平台开发者的福音。
    根据这一功能,如果能做出在微信中点歌功能,那么我们以后就可以不用安装其他APP,
    直接在微信里面关注一个账号,就可以听歌了,还省去了安装的麻烦,而且不用再占用空间。如果音乐资源足够好,那将秒杀一切手机上在线听歌软件也不是没有可能的。


    一、获取音乐资源

    调用方法:

    <a href="http://api2.sinaapp.com/search/music/?appkey=0020130430&appsecert=fa6095e1133d28ad&reqtype=music&keyword">http://api2.sinaapp.com/search/music/?appkey=0020130430&appsecert=fa6095e1133d28ad&reqtype=music&keyword</a>=歌曲名称

      返回格式:与微信音乐格式类似,json型:

    {
        "errcode": 0,
        "msgtype": "music",
        "music": {
            "title": "歌曲名称",
            "description": "music",
            "musicurl": "音乐地址",
            "hqmusicurl": "音乐地址"
        }
    }

    失败时返回文本信息

    {
        "errcode": "1",
        "msgtype": "text",
        "text": {
            "content": "检索音乐失败!"
        }
    }

      

    二、封装音乐消息

    获取该音乐消息的代码如下:

    public string GetMusic(string MusicName)
           {
               WebClient MyWebClient = new WebClient();
               MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于对向Internet资源的请求进行身份验证的网络凭据。
     
               Byte[] Comp = MyWebClient.DownloadData("http://api2.sinaapp.com/search/music/?appkey=0020130430&appsecert=fa6095e1133d28ad&reqtype=music&keyword=" + MusicName); //获取快递公司数据
               var pageHtml = Encoding.UTF8.GetString(Comp); //如果获取网站页面采用的是UTF-8,则使用这句
               JavaScriptSerializer js = new JavaScriptSerializer();
               var obj = js.DeserializeObject(pageHtml);
               Dictionary<string, object> dic = obj as Dictionary<string, object>;
               if (dic["errcode"].ToString() == "0")
               {
                   Dictionary<string, object> dic2 = dic.Values.ToArray()[2] as Dictionary<string, object>;
                   string title = dic2["title"].ToString();
                   string musicurl = dic2["musicurl"].ToString();
                   string hqmusicurl = dic2["hqmusicurl"].ToString();
                   return ResponseMusicMsg(title, "按住可转发好友,播放失败请换首歌!", musicurl, hqmusicurl);
               }
               else {
                   return ResponseText("[流泪] Sorry~ 你要的音乐我没有找到~ [流泪]");
               }
               
           }

      

    生成微信相对应的xml

    /// <summary>
           /// 回复音乐内容
           /// </summary>
           /// <param name="to">接收者</param>
           /// <param name="from">消息来源</param>
           /// <param name="title">标题</param>
           /// <param name="description">描述信息</param>
           /// <param name="musicurl">音乐链接</param>
           /// <param name="hqmusicurl">高质量音乐链接,WIFI环境优先使用该链接播放音乐</param>
           /// <returns>生成的输出文本</returns>
           public string ResponseMusicMsg(string title, string description, string musicurl, string hqmusicurl)
           {
               StringBuilder sb = new StringBuilder();
               sb.AppendFormat("<xml>");
               sb.AppendFormat("<ToUserName><![CDATA[{0}]]></ToUserName>", clientUser);
               sb.AppendFormat("<FromUserName><![CDATA[{0}]]></FromUserName>", serverUser);
               sb.AppendFormat("<CreateTime>{0}</CreateTime>", DateTime.Now.Ticks.ToString());
               sb.AppendFormat("<MsgType><![CDATA[music]]></MsgType>");
               sb.AppendFormat("<Music>");
               sb.AppendFormat("   <Title><![CDATA[{0}]]></Title>", title);
               sb.AppendFormat("   <Description><![CDATA[{0}]]></Description>", description);
               sb.AppendFormat("   <MusicUrl><![CDATA[{0}]]></MusicUrl>", musicurl);
               sb.AppendFormat("   <HQMusicUrl><![CDATA[{0}]]></HQMusicUrl>", hqmusicurl);
               sb.AppendFormat("   <FuncFlag>0</FuncFlag>");
               sb.AppendFormat("</Music>");
               sb.AppendFormat("</xml>");
               return sb.ToString();
           }

      

    二、效果展示

    建议使用wifi时候听歌

  • 相关阅读:
    (一)Python入门-2编程基本概念:18字符串-驻留机制-内存分析-字符串同一判断-值相等判断
    (一)Python入门-2编程基本概念:07内置数据类型-基本算数运算符
    (一)Python入门-2编程基本概念:08整数-不同进制-其他类型转换成整数
    (一)Python入门-2编程基本概念:09浮点数-自动转换-强制转换-增强赋值运算符
    (一)Python入门-2编程基本概念:10时间表示-unix时间点-毫秒和微妙-time模块
    (一)Python入门-2编程基本概念:11布尔值-比较运算符-逻辑运算符及短路问题
    (一)Python入门-2编程基本概念:12同一运算符-整数缓存问题
    (一)Python入门-2编程基本概念:01程序的构成
    (一)Python入门-2编程基本概念:02对象的基本组成和内存示意图
    有关位运算的基础知识总结
  • 原文地址:https://www.cnblogs.com/imaker/p/6285501.html
Copyright © 2020-2023  润新知