通常來講,手機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