微信群中实现点歌QQ音乐功能 微群宝贝点歌

想要在微信群中实现点歌功能,先要找到点歌的资源才行。这里用的是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种,一是点歌后跳转到歌曲所在的页面,再就是直接点播放时能直接播放声音,就类似播放器效果,不必打开播放页面。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值