博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信服务开发——读取百度音乐接口返回音乐
阅读量:6649 次
发布时间:2019-06-25

本文共 5704 字,大约阅读时间需要 19 分钟。

            

           最近用了很多网上的坑爹接口,都泪奔了,不说了,都是泪啊~

            前两天做了个微信返回音乐的接口,先来看下效果:

            

            出来之后在手机微信里面就可以实现音乐播放了。

            技术很简单,首先访问百度音乐接口,传入音乐名称和歌手名称,然后百度会返回一个XML格式给你,里面包括音乐的链接地址等信息。但是比较坑爹的是,这里的链接地址是写在两个node里面的,我要先从一个encode里面拿到前半段,然后再从deconde里面拿到后半段,然后拼起来,拿到URL之后,就要把这个信息放到返回给用户的音乐信息里面。

          先来看下微信里面返回给用户的音乐消息的XML的格式:

         

          其中,MusicUrl跟HQMusicUrl都写成从百度拿到的音乐地址就ok了。对于一般公众号,缩略图是不需要的。

           其实返回给用户的信息是比较坑爹的,除了音乐链接地址是真的,音乐名称和歌手都是根据用户输入的东西显示的。

           当@歌手的时候,上述XML的描述里面写的是就是被@的歌手。

           下面是具体代码:

            先来看看调用百度音乐接口返回的XML里是什么

         如下,红字的部分,为歌曲名称和歌手名称:

            http://box.zhangmen.baidu.com/x?op=12&count=1&title=东风破$$周杰伦$$$$

          调用完成之后,返回XML为:

          

1
http://zhangmenshiting.baidu.com/data2/music/120892918/YmRjbG5ocGlpYKCkaHWvm6CWmHFub5qbaJeWlWponG9lmGVkmWppcGZiaGpomphrYWZqlmhuam9la2uWbG6acWpklJZbo6CcbmJhbGxubm5ha2xka2dpcGcy
120892918.mp3?xcode=99cc7eca52e74f20d42850563da3047b3837498b78c992ab&mid=0.87876099061286
8
29026
1
http://zhangmenshiting2.baidu.com/data2/music/120892919/YmRjbG5ocGlqYKCkaHWvm6CWmHFub5qbaJeWlWponG9lmGVkmWppcGZiaGpomphrYWZqlm6bb5xhlWiXZ2ybbJJkY5Zbo6CcbmJhbGxubm5ha2xka2dpcGcy
120892919.mp3?xcode=99cc7eca52e74f20d42850563da3047b9e8d0c5c26d4a20b&mid=0.87876099061286
8
29026
1
acf1ed82375d608f50d630248cf3d04a72ec6699
mp3
7674555
192
           之后,拿到拼接地址:http://zhangmenshiting.baidu.com/data2/music/120892918/120892918.mp3?xcode=99cc7eca52e74f20d42850563da3047b3837498b78c992ab

           注意,这里要去掉:&mid=0.87876099061286

          

            代码如下:(c#版):

 

private string strSonger = null; //歌手        private string strSongName = null; //歌曲名称        ///         /// 获取音乐        ///         /// 服务类型        /// 用户OpenId        /// 公众号        /// 传入参数:查询歌曲所用        /// 返回的XML        public void GetMusic(string strType, string strOpenId, string strWxAccount, string strParams, out string strXML)        {            strXML = null;            try            {                ComponentServiceMessge comServiceMessage = ComponentServiceMessgeAdapter.Instance.GetUrlByComType(strType);                if (comServiceMessage == null)  //未找到服务                {                    return;                }                else //找到服务                {                    //发给微信用户                    strXML = this.ReturnWxMusic(strOpenId, strWxAccount, this.GetMusicFromBaiDu(comServiceMessage.ComponentURL, strParams));                }            }            catch            {                strXML = null;            }        }        ///         /// 从百度接口拿到音乐信息        ///         /// 传入的参数        /// 
public string GetMusicFromBaiDu(string strUrl, string strParams) { string strMusicXml = null; //拆参数 int posOne = strParams.IndexOf("@"); if (posOne >= 0) //有歌手 { strSongName = strParams.Substring(0, posOne);//歌曲名称 strSonger = strParams.Substring(posOne + 1, strParams.Length - posOne - 1);//歌手 strUrl = strUrl + strSongName + "$$" + strSonger + "$$$$"; strMusicXml = base.RequestMyWebClient(EnumSubmitMethod.Get, "", strUrl); } else//只有歌曲的名称 { strSongName = strParams; strUrl = strUrl + strParams + "$$"; strMusicXml = base.RequestMyWebClient(EnumSubmitMethod.Get, "", strUrl); } return strMusicXml; } /// /// 得到发给微信的XML /// /// 传入从百度拿到的XML ///
private string ReturnWxMusic(string strOpenId, string strWxAccount, string strXml) { string strWxMusicXml = null; //拼入,返回给微信用户 strWxMusicXml = string.Format(@"
{2}
<![CDATA[{3}]]>
", strOpenId, strWxAccount, this.DateTimeToStamp(DateTime.Now).ToString(), strSongName, strSonger, this.GetMusicUrl(strXml), this.GetMusicUrl(strXml)); return strWxMusicXml; } /// /// 获取百度音乐链接的URL地址 /// /// 访问百度音乐得到的XML ///
private string GetMusicUrl(string strXml) { string strMusicUrl = null; //读取xml XDocument doc = XDocument.Parse(strXml); XElement RootEle = doc.Root; List
XEleColl = RootEle.Elements().ToList(); strMusicUrl = HttpUtility.UrlDecode(XEleColl.ElementAt(1).Element("encode").Value); //拼接地址:取前面的一段地址+decode节点地址 int posFlag = strMusicUrl.LastIndexOf("/"); strMusicUrl = strMusicUrl.Substring(0, posFlag + 1); string strValue = XEleColl.ElementAt(1).Element("decode").Value; strValue = strValue.Substring(0, strValue.IndexOf("&")); strMusicUrl += strValue;//加上后一段地址 return strMusicUrl; } ///
/// DateTime时间格式转换为Unix时间戳格式 /// ///
///
private int DateTimeToStamp(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; }

           

            

             接着,在配置的服务器地址

     

            

                 中的处理用户消息页面做出对音乐消息的处理,然后服务器处理后将音乐消息返给用户。

               

         

        

你可能感兴趣的文章