# -*- coding: utf-8 -*- """同步兼容函数接口(内部经 run_sync 桥接异步实现)。 (自 music_api.py 拆出,行为与原实现一致。) """ from typing import Any from core.async_bridge import run_sync # 模块级同步兼容接口用的同步/异步桥 from .api import ( NeteaseAPI, ) from .qr import ( QRLoginManager, ) # 向后兼容的函数接口 def url_v1(song_id: int, level: str, cookies: dict[str, str]) -> dict[str, Any]: """获取歌曲URL(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_song_url(song_id, level, cookies)) def name_v1(song_id: int) -> dict[str, Any]: """获取歌曲详情(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_song_detail(song_id)) def lyric_v1(song_id: int, cookies: dict[str, str]) -> dict[str, Any]: """获取歌词(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_lyric(song_id, cookies)) def search_music(keywords: str, cookies: dict[str, str], limit: int = 10, search_type: int = 1, offset: int = 0) -> list[dict[str, Any]]: """搜索音乐(向后兼容)""" api = NeteaseAPI() return run_sync(api.search_music(keywords, cookies, limit, search_type, offset=offset)) def toplist_list() -> list[dict[str, Any]]: """获取官方榜单列表(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_toplist()) def artist_songs(artist_id: int) -> dict[str, Any]: """获取歌手信息和热门歌曲(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_artist_hot_songs(artist_id)) def song_comments(song_id: int, limit: int = 20, offset: int = 0) -> dict[str, Any]: """获取歌曲评论(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_song_comments(song_id, limit, offset)) def account_info(cookies: dict[str, str]) -> dict[str, Any] | None: """获取当前账号信息(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_account_info(cookies)) def user_playlists(user_id: int, cookies: dict[str, str]) -> list[dict[str, Any]]: """获取用户收藏/创建的歌单列表(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_user_playlists(user_id, cookies)) def detect_vip_by_probe(cookies: dict[str, str], probe_song_id: int = 347230) -> dict[str, Any]: """通过歌曲URL接口探测账号会员类型(向后兼容)""" api = NeteaseAPI() return run_sync(api.detect_vip_by_probe(cookies, probe_song_id)) def playlist_subscribe(playlist_id: int, cookies: dict[str, str], action: int = 1) -> dict[str, Any]: """收藏/取消收藏歌单(向后兼容)""" api = NeteaseAPI() return run_sync(api.subscribe_playlist(playlist_id, cookies, action)) def album_subscribe(album_id: int, cookies: dict[str, str], action: int = 1) -> dict[str, Any]: """收藏/取消收藏专辑(向后兼容)""" api = NeteaseAPI() return run_sync(api.subscribe_album(album_id, cookies, action)) def post_comment(thread_id: str, content: str, action: int = 1, comment_id: int | None = None, cookies: dict[str, str] | None = None) -> dict[str, Any]: """发送/回复歌曲评论(向后兼容)""" api = NeteaseAPI() return run_sync(api.post_comment(thread_id, content, action, comment_id, cookies)) def probe_levels(cookies: dict[str, str], probe_song_id: int = 347230) -> list[str]: """实测账号可解析的音质列表(向后兼容)""" api = NeteaseAPI() return run_sync(api.probe_levels(cookies, probe_song_id)) def playlist_detail(playlist_id: int, cookies: dict[str, str]) -> dict[str, Any]: """获取歌单详情(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_playlist_detail(playlist_id, cookies)) def album_detail(album_id: int, cookies: dict[str, str]) -> dict[str, Any]: """获取专辑详情(向后兼容)""" api = NeteaseAPI() return run_sync(api.get_album_detail(album_id, cookies)) def get_pic_url(pic_id: int | None, size: int = 300) -> str: """获取图片URL(向后兼容)""" api = NeteaseAPI() return api.get_pic_url(pic_id, size) def qr_login() -> str | None: """二维码登录(向后兼容)""" manager = QRLoginManager() return run_sync(manager.qr_login())