通常来讲,手机APP的分享到QQ功能,在聊天界面中表现为一个分享卡片,在IOTQQ中则对应的体现为一条JsonMsg或XmlMsg。
IOTQQ能够接收和发送JsonMsg,XmlMsg,可是目前没有这方面的详细说明,只能本身实际验证总结。
笔者研究了一下根据关键词搜索QQ音乐,并在IOTQQ中发QQ音乐卡片消息的方法,这里记录一下。html
这里参考的是IOTQQ项目Plugins目录下的music.lua,看来以前已经有逆向大佬把网页的AJAX请求扒出来了,我就不本身费力气了。惋惜的是这个插件后面的发送卡片部分如今已经不能成功了,所以不得不本身摸索。
API地址:https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=<搜索关键字>
注意关键字用UrlEncode一下便可。
响应数据是一段jsonp文本,须要把前面的callback(
和最后的)
去掉以后再JSON解码。
结果列表中,每一个元素都包含该音乐在QQ音乐平台中的相关信息,其中关键的几项包括:android
这里参考的是这个插件项目中的Music.lua,谢谢逆向大佬!
API地址:https://api.qq.jsososo.com/song/url?type=320&id=${mid}
注意:git
&
转码为&
字符实体。下面这四个参数不管JSON方式仍是XML方式中都会使用,请使用搜索结果中的字段来组装:github
https://y.qq.com/n/yqq/song/<mid>.html
http://y.gtimg.cn/music/photo_new/T002R300x300M00<album.pmid>.jpg?max_age=2592000
<全部歌手名> - <专辑名>
调用sendMsg发送JsonMsg时,参数中content字段的值为下面的对象stringify后的字符串,注意[]
中的值用前面的参数替换:web
{ app: 'com.tencent.structmsg', config: { autosize: true, ctime: 0, forward: true, token: '6a2658ee487631c2c2d77aa583792dc1', type: 'normal' }, desc: '音乐', meta: { music: { action: '', android_pkg_name: '', app_type: 1, appid: 100497308, desc: '[summary]', jumpUrl: '[jumpUrl]', musicUrl: '[songUrl]', preview: '[coverUrl]', sourceMsgId: '0', source_icon: '', source_url: '', tag: 'QQ音乐', title: '[title]' } }, prompt: '[分享][title] - QQ音乐', ver: '0.0.0.1', view: 'music' }
调用sendMsg发送XmlMsg时,参数中content字段的值为下面的XML字符串,注意[]
中的值用前面的参数替换:json
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <msg serviceID="2" templateID="1" action="web" brief="[分享] [title] - QQ音乐" sourceMsgId="0" url="[jumpUrl]" flag="0" adverSign="0" multiMsgFlag="0"> <item layout="2"> <audio cover="[coverUrl]" src="[songUrl]" /> <title>[title]</title> <summary>[summary]</summary> </item> <source name="QQ音乐" icon="https://i.gtimg.cn/open/app_icon/01/07/98/56/1101079856_100_m.png?date=20200503" url="http://web.p.qq.com/qqmpmobile/aio/app.html?id=1101079856" action="app" a_actionData="com.tencent.qqmusic" i_actionData="tencent1101079856://" appid="1101079856" /> </msg>
与QQ音乐相似,也能够发送网易云音乐的分享卡片,XmlMsg内容以下:segmentfault
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <msg serviceID="146" templateID="1" action="web" brief="[分享] 芒种 - 网易云音乐" sourceMsgId="0" url="https://y.music.163.com/m/song?id=1369798757" flag="0" adverSign="0" multiMsgFlag="0"> <item layout="2" advertiser_id="0" aid="0"> <picture cover="http://p1.music.126.net/KFWbxh1ZLyy9WR77Ca08tA==/109951164866828786.jpg" w="0" h="0" /> <title>芒种</title> <summary>音阙诗听,赵方婧 - 二十四节气</summary> </item> <source name="网易云音乐" icon="https://url.cn/55gqiDG" url="http://url.cn/5pl4kkd" action="app" a_actionData="com.netease.cloudmusic" i_actionData="tencent100495085://" appid="100495085" /> </msg>
这里主要须要解决的就是经过搜索获取歌曲在网易云音乐中的id, 以及封面图url,我目前使用的是经过搜你妹引擎获取到的这些信息api