打造Telegram机器人,一键提取音乐平台的UPC与ISRC码
这款Telegram机器人可从10大主流音乐平台中自动提取专辑和单曲的UPC与ISRC编码。支持的平台包括Spotify、Apple Music、Yandex Music、YouTube Music、Deezer、Tidal、SoundCloud、VK Music、Zvuk以及Amazon Music。该功能源于现有分发渠道和平台界面无法直接获取UPC码的痛点。机器人通过解析链接、发行ID或文本查询,仅需1–2秒即可返回精准结果,得益于智能缓存机制。
UPC用于标识发行作品(如专辑或单曲),而ISRC则为每首歌曲提供唯一编号。这两类标识对版权注册、分销商迁移及版税追踪至关重要。
系统架构
系统采用模块化设计:
- URL解析器:使用正则表达式识别来源平台。
- 平台解析器:通过官方或逆向工程API获取元数据。
- UPC/ISRC匹配器:交叉验证多个数据源的信息。
- 存储层:Redis用于缓存(有效期24小时),PostgreSQL用于数据分析。
该架构支持高效扩展,同时显著降低对外部API的依赖压力。
import re
from dataclasses import dataclass
from enum import Enum
class Platform(Enum):
SPOTIFY = "spotify"
APPLE_MUSIC = "apple_music"
YANDEX_MUSIC = "yandex_music"
YOUTUBE_MUSIC = "youtube_music"
DEEZER = "deezer"
TIDAL = "tidal"
SOUNDCLOUD = "soundcloud"
VK_MUSIC = "vk_music"
ZVUK = "zvuk"
AMAZON_MUSIC = "amazon_music"
@dataclass
class ParsedLink:
platform: Platform
content_type: str # "album", "track", "artist"
content_id: str
PATTERNS = [
# Spotify
(r"open\.spotify\.com/(album|track)/([a-zA-Z0-9]+)",
Platform.SPOTIFY),
# Apple Music
(r"music\.apple\.com/.+/(album|song)/.+?/(")",
Platform.APPLE_MUSIC),
# 其他平台...
]
处理链接与短网址
解析器内置超过10组正则规则,适配各类URL格式。对于短链接(如spotify.link、youtu.be),系统通过HEAD请求并自动跟随重定向进行解析:
async def resolve_short_url(url: str) -> str:
async with aiohttp.ClientSession() as session:
async with session.head(
url, allow_redirects=True, timeout=5
) as resp:
return str(resp.url)
支持的资源类型涵盖专辑、单曲和艺术家主页。针对单曲,机器人能自动定位其所属专辑。
与Spotify API协作
Spotify Web API在专辑数据中以external_ids.upc字段返回UPC,在单曲信息中提供ISRC。主要挑战包括:
- 部分响应缺失UPC——需跨市场(美、英、德、日)重试。
- 区域限定发行版的UPC搜索不稳定。
- 接口限流:每分钟最多180次请求。
Redis缓存极大缓解了API压力:
async def get_album_data(album_id: str) -> dict | None:
cache_key = f"album:{album_id}"
cached = await redis.get(cache_key)
if cached:
return json.loads(cached)
for market in ["US", "GB", "DE", "JP"]:
album = await spotify.get_album(album_id, market=market)
upc = album.get("external_ids", {}).get("upc")
if upc:
# 保存至缓存
await redis.set(cache_key, json.dumps(result), ex=86400)
return result
return None
未公开接口:Yandex Music与VK
由于缺乏公开API,相关接口通过分析移动端应用流量逆向推导。UPC存在于专辑元数据中,ISRC则藏于曲目层级数据。接口响应格式频繁变动(三个月内两次变更),需持续监控维护。
发行版本检测
机器人可查找与单一ISRC关联的所有UPC版本——包括单曲、专辑及合集。这对更换分销商时保留流媒体播放记录极为关键。
/full命令将返回:
- 该发行的所有UPC版本。
- 每首曲目的ISRC码。
- 唱片公司、发行日期、流派信息。
- 曲目BPM(通过Spotify音频特征获取)。
用户输入处理
支持多种输入方式:
- 直接粘贴链接(自动解析)。
- 输入12–13位数字(按UPC查询)。
- 文本搜索(按名称+内联按钮筛选)。
示例:"upc Morozhern"、完整链接、无结构短语等。
经验总结与优化建议
运行3个月的数据统计:
- 月活跃用户:500人。
- 平均响应时间:1.5秒(启用缓存后降至0.3秒)。
- 成功率:89%。
改进建议:
- 集成MusicBrainz用于数据校验。
- 引入消息队列应对高峰负载。
- 增加API可用性健康检查。
架构启示:
- 至少使用两个数据源确保准确性。
- 实施激进缓存策略。
- 依赖未公开接口会积累技术债务。
核心收获:
- 解析与平台处理分离,便于后期维护。
- 基于市场的重试机制可修复Spotify不完整响应。
- 在限流环境下,Redis缓存不可或缺。
- 一ISRC多UPC是保障艺术家权益的关键。
- 未公开接口必须每日监控。
— Editorial Team
暂无评论。