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>
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
HQMusicUrl,優先填入,WiFi 環境自動切換高音質。MusicUrl 必須 HTTPS,若來源為 HTTP 需自建反向代理轉 HTTPS。使用者發送「點歌 最炫民族風」→ 收到音樂卡片 → 點擊播放 → 頂部迷你播放條顯示進度 → 全螢幕播放介面含封面、歌詞。