File size: 5,287 Bytes
0aee47a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
"""
bilibili_api.music
音乐相关 API
注意: 目前 B 站的音频并不和 B 站的音乐相关信息互通。这里的 Music 类的数据来源于视频下面的 bgm 标签和全站音乐榜中的每一个 bgm/音乐。get_homepage_recommend 和 get_music_index_info 来源于 https://www.bilibili.com/v/musicplus/
"""
from enum import Enum
from typing import Optional
from .utils.utils import get_api
from .utils.credential import Credential
from .utils.network import Api
API_audio = get_api("audio")
API = get_api("music")
class MusicOrder(Enum):
"""
音乐排序类型
+ NEW: 最新
+ HOT: 最热
"""
NEW = 1
HOT = 2
class MusicIndexTags:
"""
音乐索引信息查找可以用的标签,有语言和类型两种标签,每种标签选一个
- Lang: 语言标签枚举类
- Genre: 类型标签枚举类
"""
class Lang(Enum):
"""
- ALL: 全部
- CHINESE: 华语
- EUROPE_AMERICA: 欧美
- JAPAN: 日语
- KOREA: 韩语
- OTHER: 其他
"""
ALL = ""
CHINESE = 3
EUROPE_AMERICA = 6
JAPAN = 7
KOREA = 61
OTHER = 1
class Genre(Enum):
"""
- ALL: 全部
- POPULAR: 流行
- ROCK: 摇滚
- ELECTRONIC: 电子音乐
- COUNTRYSIDE: 乡村
- FOLK: 民谣
- LIVE: 轻音乐
- CLASSICAL: 古典
- NEW_CENTURY: 新世纪
- REGGAE: 雷鬼
- BLUES: 布鲁斯
- RHYTHM_BLUES: 节奏与布鲁斯
- ORIGINAL: 原声
- WORLD: 世界音乐
- CHILDREN: 儿童音乐
- LATIN: 拉丁
- PUNK: 朋克
- MEDAL: 金属
- JAZZ: 爵士乐
- HIP_HOP: 嘻哈
- SINGER_SONGWRITER: 唱作人
- AMUSEMENT: 娱乐/舞台
- OTHER: 其他
"""
ALL = ""
POPULAR = 1
ROCK = 2
ELECTRONIC = 3
COUNTRYSIDE = 4
FOLK = 5
LIVE = 6
CLASSICAL = 7
NEW_CENTURY = 8
REGGAE = 9
BLUES = 10
RHYTHM_BLUES = 12
ORIGINAL = 13
WORLD = 14
CHILDREN = 15
LATIN = 16
PUNK = 17
MEDAL = 18
JAZZ = 19
HIP_HOP = 20
SINGER_SONGWRITER = 21
AMUSEMENT = 22
OTHER = 23
async def get_homepage_recommend(credential: Optional[Credential] = None):
"""
获取音频首页推荐
Args:
credential (Credential | None): 凭据类. Defaults to None.
Returns:
dict: 调用 API 返回的结果
"""
credential = credential if credential else Credential()
api = API_audio["audio_info"]["homepage_recommend"]
return await Api(**api, credential=credential).result
async def get_music_index_info(
keyword: str = "",
lang: MusicIndexTags.Lang = MusicIndexTags.Lang.ALL,
genre: MusicIndexTags.Genre = MusicIndexTags.Genre.ALL,
order: MusicOrder = MusicOrder.NEW,
page_num: int = 1,
page_size: int = 10,
) -> dict:
"""
获取首页的音乐视频列表
Args:
keyword (str) : 关键词. Defaults to None.
lang (MusicIndexTags.Lang) : 语言. Defaults to MusicIndexTags.Lang.ALL
genre (MusicIndexTags.Genre): 类型. Defaults to MusicIndexTags.Genre.ALL
order (MusicOrder) : 排序方式. Defaults to OrderAudio.NEW
page_num (int) : 页码. Defaults to 1.
page_size (int) : 每页的数据大小. Defaults to 10.
"""
api = API_audio["audio_info"]["audio_list"]
params = {
"type": order.value,
"lang": lang.value,
"genre": genre.value,
"keyword": keyword,
"pn": page_num,
"ps": page_size,
}
return await Api(**api).update_params(**params).result
class Music:
"""
音乐类。
此处的“音乐”定义:部分视频的标签中有里面出现过的音乐的标签, 可以点击音乐标签查看音乐信息。此类将提供查询音乐信息的接口。
其中音乐的 ID 为 `video.get_tags` 返回值数据中的 `music_id` 键值
"""
def __init__(self, music_id: str):
"""
Args:
music_id (str): 音乐 id,例如 MA436038343856245020
"""
self.__music_id = music_id
def get_music_id(self):
return self.__music_id
async def get_info(self):
"""
获取音乐信息
Returns:
dict: 调用 API 返回的结果
"""
api = API["info"]["detail"]
params = {"music_id": self.__music_id}
return await Api(**api).update_params(**params).result
async def get_music_videos(self):
"""
获取音乐的音乐视频
Returns:
dict: 调用 API 返回的结果
"""
api = API["info"]["video_recommend_list"]
params = {"music_id": self.__music_id}
return await Api(**api).update_params(**params).result
|