Welcome to bilibibili-voice's documentation!

Install & Usage - 安装和使用说明

安装 & 使用

安装

依赖

以下为为必要依赖,需要单独安装。

1. mpv

Mac OS

$ brew install mpv

Ubuntu/Debian

$ (sudo)apt-get install mpv

注解

提示

请自行判定是否要加上``sudo``命令

2. youtube-dl

Mac OS下安装mpv会自动安装youtube-dl

Ubuntu/Debain

$ (sudo)apt-get install youtube-dl

或者

$ (sudo)pip3 install youtube-dl
选项1 通过pip安装
$ (sudo)pip3 install bilibili-voice
选项2 通过Git Clone安装
$ git clone https://github.com/gogoforit/bilibili-voice
$ cd bilibili-voice
$ python3 setup.py install

注解

注意

如果mpv和youtube-dl安装完毕,还是出现解析错误的话,可以尝试升级mpv和youtube-dl。可能仓库里的软件版本太低,不支持链接解析。

使用说明

按键说明
S Down 下移
W Up 上移
A Back 后退
D Forword 前进
Space Play/Pause 播放/暂停
Z Add Song 添加音乐
Q Quit 退出
运行命令
$ bilibilivoice
功能介绍
1. 分区

B站主要的版块栏目

2. 最近播放

会记录您最近在BiliBili-Voice中的播放记录

3. 搜索

提供个性化搜索功能

4. 帮助

项目帮助文档

Developer references - 开发人员参考

相关模块类

bilibilivoice.api - B站数据请求api

class bilibilivoice.api.BiliBiliVoice[源代码]

Bases: object

解析BiliBili的接口类

各栏目请求的id号

栏目名 id
原创音乐 28
翻唱 31
VOCALOID·UTAU 30
演奏 59
三次元音乐 29
OP/ED/OST 54
音乐选集 130
宅舞 20
三次元舞蹈 154
舞蹈教程 156
单机游戏 17
电子竞技 171
手机游戏 172
网络游戏 65
桌游棋牌 173
GMV 121
音游 136
Mugen 19
趣味科普人文 124
野生技术协会 122
演讲• 公开课 39
星海 96
数码 95
机械 98
汽车 176
搞笑 138
日常 21
美食圈 76
动物圈 75
手工 161
绘画 162
ASMR 175
运动 163
其他 174
鬼畜调教 22
音MAD 26
人力VOCALOID 126
教程演示 127
美妆 157
服饰 158
健身 164
资讯 159
综艺 71
明星 137
Korea 131
影视杂谈 182
影视剪辑 183
短片 85
预告 资讯 184
特摄 86
人文历史 37
科学探索 178
热血军事 179
舌尖上的旅行 180
华语电影 147
欧美电影 145
日本电影 146
其他国家 83
国产剧 185
海外剧 187

歌曲信息的返回格式

{
  'up_name': '叫我BAT',
  'aid': '11794042',
  'tname': '搜索',
  'title': '【神奇女侠】高潮部分【1080P超清片段】'
}
channel_list(channel)[源代码]

用于获取各种子栏目信息的生成器

参数:channel -- 各种子栏目名
返回:信息列表
get_auditorium_channel_detailed(name)[源代码]

获取"放映厅"二级目录下的子栏目

参数:name -- 二级下的目录频道名
返回:二级目录下的子栏目列表
get_channel(name)[源代码]

获取每个频道下具体的子栏目

参数:name -- 频道名
返回:子栏目列表
get_play_total_time(av_number)[源代码]

获取播放的总时间

参数:av_number -- 播放id号
返回:总共的播放时间
>>> bilibili = BiliBiliVoice()
>>> a = bilibili.get_play_total_time('17100583')
>>> 210

根据关键词,获取搜索结果

参数:keyword -- 搜索关键词
返回:搜索结果
handle_mp3_url(av_number)[源代码]

处理出唧唧上的mp3的下载地址,其中有两次重定向,然后要通过ref中的一个加密字符串来解析出最终 的下载地址,通过直接执行js代码,来获取出最红mp3的下载地址

参数:av_number -- 想要下载的av号
返回:av_number对应的mp3下载地址
http_request(method, url, query=None, urlencoded=None, callback=None, timeout=None)[源代码]

封装api的网络请求

参数:
  • method -- 请求的方法, GET/POST
  • url -- 请求的地址
  • query -- 查询的参数
  • urlencoded --
  • callback --
  • timeout --
返回:

返回的字符串

raw_http_request(method, url, query=None, urlencoded=None, callback=None, timeout=None)[源代码]

bilibilivoice.cache - 歌曲缓存

Class to cache songs into local storage.

class bilibilivoice.cache.Cache[源代码]

Bases: bilibilivoice.singleton.Singleton

将来要使用到的缓存类,当前版本还未使用到

add(song_id, song_name, artist, url, onExit)[源代码]
quit()[源代码]
start_download()[源代码]

bilibilivoice.const - 使用常量

class bilibilivoice.const.Constant[源代码]

Bases: object

常量使用地址

参数:
  • conf_dir -- 整个文件目录地址
  • download_dir -- 缓存文件夹地址
  • config_path -- 配置文件地址
  • storage_path -- 播放信息等存储地址
  • cookie_path -- cookie存储地址
  • log_path -- 日志存储地址
conf_dir = '/home/docs/.bilibili-voice'
config_path = '/home/docs/.bilibili-voice/config.json'
cookie_path = '/home/docs/.bilibili-voice/cookie'
download_dir = '/home/docs/.bilibili-voice/cached'
log_path = '/home/docs/.bilibili-voice/bilibili-voice.log'
storage_path = '/home/docs/.bilibili-voice/database.json'

bilibilivoice.logger - 日志

bilibilivoice.logger.getLogger(name)[源代码]

重新构造了日志的使用方式

bilibilivoice.menu - 主菜单

class bilibilivoice.menu.Menu[源代码]

Bases: object

整体程序的逻辑控制

choice_channel(idx)[源代码]

主页面的功能选择

dispatch_enter(idx)[源代码]

不同的逻辑具体操作,当按下D键时的后续选择操作

注解

提示

先把当前页面的信息存入stack中,方便回退的时候直接回退

pop(idx)[源代码]

没有下一级目录,就不进入下一级目录 :param idx: 选择想要进入目录的位置id

start()[源代码]

整体程序的运行入口,首先程序会先构建UI的header和主菜单,然后会根据用户 的不同操作,进行不同地逻辑处理

返回类型:Ui
返回类型:BiliBiliVoice
返回类型:Player

参见

Ui.build_menu

bilibilivoice.menu.carousel(left, right, x)[源代码]

bilibilivoice.mpv - mpv播放器使用

class bilibilivoice.mpv.MPV(*args, **kwargs)[源代码]

Bases: bilibilivoice.mpv.MPVBase

Class for communication with the mpv media player via unix socket based JSON IPC. It adds a few usable methods and a callback API.

To automatically register methods as event callbacks, subclass this class and define specially named methods as follows:

def on_file_loaded(self):
# This is called for every 'file-loaded' event. ...
def on_property_time_pos(self, position):
# This is called whenever the 'time-pos' property is updated. ...

Please note that callbacks are executed inside a separate thread. The MPV class itself is completely thread-safe. Requests from different threads to the same MPV instance are synchronized.

command(*args, timeout=1)[源代码]

Execute a single command on the mpv process and return the result.

get_property(name)[源代码]

Return the value of property name.

register_callback(name, callback)[源代码]

Register a function callback for the event name.

register_property_callback(name, callback)[源代码]

Register a function callback for the property-change event on property name.

set_property(name, value)[源代码]

Set the value of property name.

unregister_callback(name, callback)[源代码]

Unregister a previously registered function callback for the event name.

unregister_property_callback(name, callback)[源代码]

Unregister a previously registered function callback for the property-change event on property name.

class bilibilivoice.mpv.MPVBase(window_id=None, debug=False)[源代码]

Bases: object

Base class for communication with the mpv media player via unix socket based JSON IPC.

用于控制mpv的类,因为尝试通过管道控制mpv,但是好像mpv不支持管道...所有就 只能通过json来中间控制了

注解

提示

可以参考mpv的官方文档

https://mpv.io/manual/stable/

close()[源代码]

Shutdown the mpv process and our communication setup.

default_argv = ['--idle', '--no-input-default-bindings', '--no-terminal', '--no-video']
executable = None
is_running()[源代码]

Return True if the mpv process is still active.

exception bilibilivoice.mpv.MPVCommandError[源代码]

Bases: bilibilivoice.mpv.MPVError

exception bilibilivoice.mpv.MPVCommunicationError[源代码]

Bases: bilibilivoice.mpv.MPVError

exception bilibilivoice.mpv.MPVError[源代码]

Bases: Exception

exception bilibilivoice.mpv.MPVProcessError[源代码]

Bases: bilibilivoice.mpv.MPVError

exception bilibilivoice.mpv.MPVTimeoutError[源代码]

Bases: bilibilivoice.mpv.MPVError

bilibilivoice.player - 歌曲播放

class bilibilivoice.player.MyMPV(path)[源代码]

Bases: bilibilivoice.mpv.MPV

根据mpv基类,构造自己需要的mpv功能

例如获取当前的播放进度

def on_property_time_pos(self, position=None):
    if position is None:
        return
    self.process_location = int(position)
        return

例如构造播放功能

def play(self):
    self.set_property("pause", False)

注解

提示

具体需要获取哪些属性和方法,可以参考mpv的官方文档

https://mpv.io/manual/stable/

add_music_list(url)[源代码]
new_play(url)[源代码]
on_file_loaded()[源代码]
on_property_length(length=None)[源代码]
on_property_time_pos(position=None)[源代码]

返回时间,单位:秒 :return: 时间,单位:秒

on_property_time_remaining(remaining=None)[源代码]
pause()[源代码]
play()[源代码]
resume()[源代码]
seek(position)[源代码]
stop()[源代码]
class bilibilivoice.player.Player[源代码]

Bases: object

音乐播放播放的类

add_music_list(av_number)[源代码]

加入歌曲到播放列表

参数:av_number -- 播放的B站av_id
new_play(av_number)[源代码]

切换新的播放歌曲

参数:av_number -- 播放的B站av_id
pause()[源代码]

暂停播放 如果当前没有正在播放音乐,或者播放类为空则直接跳过

play(av_number)[源代码]

启动播放器

参数:av_number -- 播放的B站av_id
play_and_pause()[源代码]

播放或者暂停播放

pause()

resume()

quit()[源代码]

退出播放

resume()[源代码]

继续播放

stop_music()[源代码]

退出播放

bilibilivoice.scrollstring - 字符串滚动

class bilibilivoice.scrollstring.scrollstring(content, START)[源代码]

Bases: object

构造滚动标题的类

update()[源代码]
bilibilivoice.scrollstring.truelen(string)[源代码]

It appears one Asian character takes two spots, but __len__ counts it as three, so this function counts the dispalyed length of the string.

将汉字的所占的长度进行重新地换算,因为单纯地用Python自带的长度计算方法有 错误

>>> truelen('abc')
3
>>> truelen('你好')
4
>>> truelen('1二3')
4
>>> truelen('')
0

bilibilivoice.singleton

members:
undoc-members:
show-inheritance:
 

bilibilivoice.storage - 信息本地储存

Class to stores everything into a json file.

class bilibilivoice.storage.Storage[源代码]

Bases: bilibilivoice.singleton.Singleton

check_version()[源代码]
load()[源代码]
save()[源代码]

bilibilivoice.terminalsize - 终端信息

bilibilivoice.terminalsize.get_terminal_size()[源代码]

getTerminalSize() - get width and height of console - works on linux,os x,windows,cygwin(windows) originally retrieved from: http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python # NOQA

bilibilivoice.ui - UI

class bilibilivoice.ui.Ui[源代码]

Bases: object

构造UI的类

addstr(*args)[源代码]
build_add_av()[源代码]
build_add_av_bar()[源代码]
build_header()[源代码]

生成头部bilibili voice的颜文字

build_loading()[源代码]
build_loading_process()[源代码]

播放进度条缓冲

build_menu(datatype, datalist, offset, step, index, title, start)[源代码]

菜单栏UI构造,大部分的菜单选项都由该方法构造生成

参数:
  • datatype -- 菜单类型
  • datalist -- 菜单列表
  • offset -- 该页面起始位置
  • step -- 该页面包括的菜单数
  • index -- 光标所处位置
  • title -- 进度菜单

BiliBili Voice > 栏目 > 音乐

参数:start -- 时间
build_process_bar(now_playing, total_length, playing_flag, now_time, total_time, pause_flag, start, song_info=None)[源代码]

生成音乐播放的进度条

参数:
  • now_playing -- 当前播放音乐的进度,单位:秒
  • total_length -- 当前播放音乐的总时间,单位:秒
  • playing_flag -- 是否正在播放的标记
  • now_time -- 当前播放音乐的进度,字符串
  • total_time -- 当前播放音乐的总时间,字符串
  • pause_flag -- 播放是否暂停的标记
  • start -- 时间
  • song_info -- 当前播放的歌曲的信息
build_request_error()[源代码]

网络情况不好时,错误信息返回

构造搜索页面,并完成整体的搜索功能

返回:关于搜索keyword的生成器

构造搜索页面的头部

get_av_number()[源代码]
get_search_keyword()[源代码]

获取搜索关键词,keyword

bilibilivoice.utils - 工具

bilibilivoice.utils.handle_time_stamp()[源代码]

获取13位的时间戳

bilibilivoice.utils.str_to_time(time_str)[源代码]

字符串到时间的转换,单位:秒

参数:time_str -- 时间字符串
返回:换算的时间
bilibilivoice.utils.time_to_str(seconds)[源代码]

时间(秒)换算成时间字符串

参数:seconds -- 时间
返回:时间字符串
bilibilivoice.utils.utf8_data_to_file(f, data)[源代码]

数据编码转换

Indices and tables