微信公众平台开发(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时候听歌

技术分享