原文: 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时候听歌