首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

微信公眾平台音樂訊息接口開發:串接百度音樂 API 實現線上點歌功能

     編輯:更多程式設計知識

功能架構

  1. 使用者發送「點歌 歌名」至公眾號。
  2. 後端呼叫百度音樂盒子 API 取得歌曲播放連結。
  3. 組裝微信音樂訊息格式回覆,使用者點擊即可播放。

百度音樂 API (非官方)

GET https://box.zhangmen.baidu.com/x?op=12&count=1&title=歌名$$歌手$$$$
# 回傳 XML,解析  取得播放 URL

⚠️ 此 API 非公開文檔,隨時可能失效;生產環境建議使用正版音樂開放平台 (QQ音樂、網易雲音樂開放平台)。

微信音樂訊息格式

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[music]]></MsgType>
  <Music>
    <Title><![CDATA[歌名]]></Title>
    <Description><![CDATA[歌手]]></Description>
    <MusicUrl><![CDATA[https://...mp3]]></MusicUrl>
    <HQMusicUrl><![CDATA[https://...高品質.mp3]]></HQMusicUrl>
    <ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
  </Music>
</xml>

核心處理流程 (Python Flask 範例)

import requests, xml.etree.ElementTree as ET
from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/wechat', methods=['POST'])
def wechat():
    xml = request.data
    msg = ET.fromstring(xml)
    if msg.find('MsgType').text == 'text':
        content = msg.find('Content').text.strip()
        if content.startswith('點歌'):
            song = content[2:].strip()
            music_url = fetch_baidu_music(song)
            if music_url:
                return build_music_reply(msg, song, music_url)
    return 'success'

def fetch_baidu_music(query):
    url = f'https://box.zhangmen.baidu.com/x?op=12&count=1&title={query}$$'
    try:
        resp = requests.get(url, timeout=5)
        root = ET.fromstring(resp.content)
        encode = root.find('.//encode')
        if encode is not None and encode.text:
            return encode.text.strip()
    except Exception as e:
        app.logger.error(f"Baidu music fetch failed: {e}")
    return None

def build_music_reply(msg, title, music_url):
    reply = f'''<xml>
  <ToUserName><![CDATA[{msg.find('FromUserName').text}]]></ToUserName>
  <FromUserName><![CDATA[{msg.find('ToUserName').text}]]></FromUserName>
  <CreateTime>{int(time.time())}</CreateTime>
  <MsgType><![CDATA[music]]></MsgType>
  <Music>
    <Title><![CDATA[{title}]]></Title>
    <Description><![CDATA[點歌服務]]></Description>
    <MusicUrl><![CDATA[{music_url}]]></MusicUrl>
    <HQMusicUrl><![CDATA[{music_url}]]></HQMusicUrl>
  </Music>
</xml>'''
    response = make_response(reply)
    response.headers['Content-Type'] = 'application/xml'
    return response

體驗優化建議

  • 快取熱門歌曲:Redis 緩存歌曲查詢結果,減少外部 API 呼叫。
  • 關鍵字模糊匹配:使用者輸入「最炫民族風」自動補全為完整歌名+歌手。
  • 高品質連結:若 API 提供 HQMusicUrl,優先填入,WiFi 環境自動切換高音質。
  • 錯誤友善提示:找不到歌曲時回覆文字訊息引導正確格式。
  • HTTPS 強制:微信要求 MusicUrl 必須 HTTPS,若來源為 HTTP 需自建反向代理轉 HTTPS。

效果展示

使用者發送「點歌 最炫民族風」→ 收到音樂卡片 → 點擊播放 → 頂部迷你播放條顯示進度 → 全螢幕播放介面含封面、歌詞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved