在IOTQQ中發送音樂卡片消息的幾種方法

參考

概述

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

  • mid - 須要用這個來生成音樂連接
  • album.pmid - 須要用這個來生成預覽圖連接
  • title - 音樂的標題

第二步 獲取播放地址

這裏參考的是這個插件項目中的Music.lua,謝謝逆向大佬!
API地址:https://api.qq.jsososo.com/song/url?type=320&id=${mid}
注意:git

  • 按Music.lua的原始代碼,要僞造不少請求頭,經驗證只須要User-Agent,其它請求頭可忽略。
  • 響應數據是json格式,裏面的data就是播放地址,也就是音樂的MP3下載地址。
  • 傳入xml前,要把播放地址裏的&轉碼爲&amp;字符實體。
  • 後面模板中用songUrl來引用這個播放地址。

發送音樂卡片

準備參數

下面這四個參數不管JSON方式仍是XML方式中都會使用,請使用搜索結果中的字段來組裝:github

  • title: 卡片標題,直接使用音樂title
  • songUrl: 播放地址,見前文;點擊卡片的播放圖標可直接在聊天界面後臺播放
  • jumpUrl: 點擊卡片跳轉到的H5頁面連接;值爲https://y.qq.com/n/yqq/song/<mid>.html
  • coverUrl: 卡片上的預覽圖片;值爲http://y.gtimg.cn/music/photo_new/T002R300x300M00<album.pmid>.jpg?max_age=2592000
  • summary: 卡片內容,可自行定製;我這裏的取值爲<全部歌手名> - <專輯名>

JSON方式

調用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'
}

XML方式

調用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>

XML方式發送網易雲音樂卡片

與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

相關文章
相關標籤/搜索