概述
想要在微信群中实现点歌功能,先要找到点歌的资源才行。这里用的是QQ音乐的资源。获取音乐相关地址后就可以发送XML消息给微信,效果如下:
通过QQ音乐的搜索来获取播放地址:
void CFunctionWnd::StartQueryMusic(Message * msg)
{
CString strKey(msg->content);
strKey.Replace(_T("点歌"), _T(""));
CString strMUsicName = /*_T("年少有为")*/strKey;
CString strMusicDataUrl, strSongmid;
if (GetQQMusicUrl(strMUsicName, strMusicDataUrl, strSongmid))
{
//WriteLog(m_parent, strMusicDataUrl);
strMusicDataUrl.Replace(_T("&"), _T("&"));
CString strPlayUrl;
strPlayUrl.Format(_T("https://y.qq.com/n/yqq/song/%s.html"), strSongmid);
CString strPicPath;
strPicPath.Format(_T("%s\temp\musicbg.png"), GetAppDir());
SendXmlArticleStruct xmlMsg1;
wcscpy_s(xmlMsg1.picpath, strPicPath);
wcscpy_s(xmlMsg1.recverwxid, msg->wxid);
wcscpy_s(xmlMsg1.selfwxid, m_selfWxid);
int szsubtitle = sizeof(xmlMsg1.subtitle);
wcscpy_s(xmlMsg1.subtitle, 200, strMUsicName);
wcscpy_s(xmlMsg1.title, strMUsicName);
wcscpy_s(xmlMsg1.urllink, strPlayUrl);
wcscpy_s(xmlMsg1.strType, _T("3")); //5为图文,3为音乐
wcscpy_s(xmlMsg1.strDataUrl, strMusicDataUrl);
SendXmlToUser(m_parent, xmlMsg1);
}
return;
}
//获取音乐地址,发送XML消息给微信的时候要用到
BOOL CFunctionWnd::GetQQMusicUrl(CString strMUsicName, CString& strSongUrl, CString& strSongmid)
{
CWeb html;
SENDINFO si;
CString strRet, strPostData;
CString strUrl;
strUrl.Format(_T("https://c.y.qq.com/soso/fcgi-bin/client_search_cp?new_json=1&remoteplace=txt.yqq.song&t=0&aggr=1&cr=1&w=%s&format=json&platform=yqq.json"), strMUsicName);
//获取songmid
if (!html.Get(strUrl, strPostData, strRet, si))
{
return FALSE;
}
CStringA strAJson = _W2A(strRet);
Json::Reader reader;
Json::Value root;
if (!reader.parse(strAJson.GetBuffer(strAJson.GetLength()), root))
{
CString strInfo;
strInfo.Format(_T("GetQQMusicUrl_数据格式有误1"));
MessageBox(this->m_hWnd, strInfo, _T("提示"), 0);
return FALSE;
}
strAJson.ReleaseBuffer();
if (root.isNull())
{
MessageBox(m_hWnd, _T("数据为空!"), _T("提示"), 0);
return FALSE;
}
if (!root["data"]["song"]["list"].isArray() || root["data"]["song"]["list"].size() <= 0)
{
return FALSE;
}
Json::Value songList = root["data"]["song"]["list"];
int iIndex = 0;
if (!songList[iIndex]["mid"].isString())
{
return FALSE;
}
CString songmid = CWeb::UTF82WCS(songList[iIndex]["mid"].asCString());
strSongmid = songmid;
//获取purl
strUrl.Empty();
strRet.Empty();
strUrl.Format(_T("https://u.y.qq.com/cgi-bin/musicu.fcg?data={"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"602087500","songmid":["%s"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}"), songmid);
if (!html.Get(strUrl, strPostData, strRet, si))
{
return FALSE;
}
strAJson = _W2A(strRet);
root.clear();
if (!reader.parse(strAJson.GetBuffer(strAJson.GetLength()), root))
{
CString strInfo;
strInfo.Format(_T("GetQQMusicUrl_数据格式有误1"));
MessageBox(this->m_hWnd, strInfo, _T("提示"), 0);
return FALSE;
}
strAJson.ReleaseBuffer();
if (root.isNull())
{
MessageBox(m_hWnd, _T("数据为空!"), _T("提示"), 0);
return FALSE;
}
if (!root["req_0"]["data"]["midurlinfo"].isArray() || root["req_0"]["data"]["midurlinfo"].size() <= 0)
{
return FALSE;
}
if (!root["req_0"]["data"]["midurlinfo"][iIndex]["purl"].isString())
{
return FALSE;
}
CString strPurlTemp = CWeb::UTF82WCS( root["req_0"]["data"]["midurlinfo"][iIndex]["purl"].asCString());
CString strSiteRoot = _T("http://dl.stream.qqmusic.qq.com/");
strSiteRoot.Append(strPurlTemp);
strSongUrl = strSiteRoot;
return TRUE;
}
获取QQ地址有2种,一是点歌后跳转到歌曲所在的页面,再就是直接点播放时能直接播放声音,就类似播放器效果,不必打开播放页面。
最后
以上就是勤恳吐司为你收集整理的微信群中实现点歌QQ音乐功能 微群宝贝点歌的全部内容,希望文章能够帮你解决微信群中实现点歌QQ音乐功能 微群宝贝点歌所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复