Coder Social home page Coder Social logo

bilix's Issues

Version 0.8.3下载bilibili视频出现问题

测试了新版本Version 0.8.3下载bilibili视频时,下载到一半时出现进程错误,尝试卸载新版本,重新安装0.7.2版本没有问题,视频可以正常下载完,应该是新版本问题,望解决
Snipaste_2022-08-20_22-03-14
Snipaste_2022-08-20_22-05-57
Snipaste_2022-08-20_22-12-17

发现一个虫

OSError: [Errno 36] File name too long: '/mnt/e/tmp//extra/【Udemy付费课程】Node JS 高级概念-进阶课程 学习使用 Redis
进行缓存,通过集群加速,使用 S3 和 Node 添加图片上传!(中英文字幕)-P80-082 Solving Authentication Issues with
Automation Testing-英语(美国).srt'

关于视频中的附属数据下载

您好,请问可以在批量下载视频的同时,爬取对应个视频的数据(如,弹幕数量,播放量,投币数据,视频的url,转发,收藏量..)吗?

基于相同的技术有可能做成downie那样所有视频网站都能下载吗

并发下载速度刚开始都突破我的带宽上限了,下载确实快,能保证满速,奉上一个小小的star,感谢作者!
我用m1 max macbookpro效果很好,然后macos上有个app叫downie可以下载所有视频网站的视频,我就有点好奇,这个项目能不能扩展成支持所有视频网站或者主要视频平台,那就太方便了,一个命令就能下载,不需要扩展或脚本,速度还满速

unhandled exception during asyncio.run() shutdown

下载链接:https://www.bilibili.com/video/BV1JP4y1K774

unhandled exception during asyncio.run() shutdown
task: <Task finished name='Task-1813' coro=<Downloader._get_media() done, defined at
/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py:336>
exception=LocalProtocolError('Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED')>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 224,
in process_input
func, target_state = self.transitions[(self.state, input)]
KeyError: (<ConnectionState.CLOSED: 3>, <ConnectionInputs.RECV_DATA: 11>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 111, in handle_async_request
status, headers = await self._receive_response(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 228, in _receive_response
event = await self._receive_stream_event(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 259, in _receive_stream_event
await self._receive_events(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 278, in _receive_events
events = await self._read_incoming_data(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 340, in _read_incoming_data
events = self._h2_state.receive_data(data)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1463,
in receive_data
events.extend(self._receive_frame(frame))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1487,
in _receive_frame
frames, events = self._frame_dispatch_tableframe.class
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1673,
in _receive_data_frame
events = self.state_machine.process_input(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 228,
in process_input
raise ProtocolError(
h2.exceptions.ProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 60, in map_httpcore_exceptions
yield
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 253, in handle_async_request
raise exc
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 237, in handle_async_request
response = await connection.handle_async_request(request)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http_proxy.py", line
310, in handle_async_request
return await self._connection.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 141, in handle_async_request
raise LocalProtocolError(exc) # pragma: nocover
httpcore.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 349, in _get_media
await asyncio.gather(*cors)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 366, in _get_media_part
async with self.client.stream("GET", random.choice(media_urls),
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 199, in aenter
return await anext(self.gen)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1549,
in stream
response = await self.send(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1593,
in send
response = await self._send_handling_auth(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1621,
in _send_handling_auth
response = await self._send_handling_redirects(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1658,
in _send_handling_redirects
response = await self._send_single_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1695,
in _send_single_request
response = await transport.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 352, in handle_async_request
with map_httpcore_exceptions():
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 224,
in process_input
func, target_state = self.transitions[(self.state, input)]
KeyError: (<ConnectionState.CLOSED: 3>, <ConnectionInputs.RECV_DATA: 11>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 111, in handle_async_request
status, headers = await self._receive_response(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 228, in _receive_response
event = await self._receive_stream_event(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 259, in _receive_stream_event
await self._receive_events(request, stream_id)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 278, in _receive_events
events = await self._read_incoming_data(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 340, in _read_incoming_data
events = self._h2_state.receive_data(data)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1463,
in receive_data
events.extend(self._receive_frame(frame))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1487,
in _receive_frame
frames, events = self._frame_dispatch_tableframe.class
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 1673,
in _receive_data_frame
events = self.state_machine.process_input(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/h2/connection.py", line 228,
in process_input
raise ProtocolError(
h2.exceptions.ProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 60, in map_httpcore_exceptions
yield
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 253, in handle_async_request
raise exc
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/connection_pool.py",
line 237, in handle_async_request
response = await connection.handle_async_request(request)
File
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http_proxy.py", line
310, in handle_async_request
return await self._connection.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpcore/_async/http2.py",
line 141, in handle_async_request
raise LocalProtocolError(exc) # pragma: nocover
httpcore.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/bili_cmd.py", line 56, in
asyncio.run(main(parser.parse_args()))
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 646, in
run_until_complete
return future.result()
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/bili_cmd.py", line 9, in main
await d.get_series(args.key, quality=args.q, image=args.image)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 255, in get_series
await asyncio.gather(*cors)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 309, in get_video
await asyncio.gather(
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 349, in _get_media
await asyncio.gather(*cors)
File "/Users/biandan/Desktop/Lighting-bilibili-download-0.3/lighting_downloader.py", line 366, in _get_media_part
async with self.client.stream("GET", random.choice(media_urls),
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 199, in aenter
return await anext(self.gen)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1549,
in stream
response = await self.send(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1593,
in send
response = await self._send_handling_auth(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1621,
in _send_handling_auth
response = await self._send_handling_redirects(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1658,
in _send_handling_redirects
response = await self._send_single_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_client.py", line 1695,
in _send_single_request
response = await transport.handle_async_request(request)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 352, in handle_async_request
with map_httpcore_exceptions():
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/httpx/_transports/default.py",
line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.LocalProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

即使挂了全局代理,也不能下载港澳台区的番剧

bilix get_video https://www.bilibili.com/bangumi/play/ep398594 --cookie ************************
WARNING GET ConnectError url: https://www.bilibili.com/bangumi/play/ep398594
WARNING GET ConnectError url: https://www.bilibili.com/bangumi/play/ep398594
WARNING GET ConnectError url: https://www.bilibili.com/bangumi/play/ep398594
ERROR GET 超过重复次数 https://www.bilibili.com/bangumi/play/ep398594

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\anyio\streams\tls.py", line 130, in _call_sslobject_method
result = func(*args)
File "C:\Program Files\Python310\lib\ssl.py", line 974, in do_handshake
self._sslobj.do_handshake()
ssl.SSLSyscallError: Some I/O error occurred (_ssl.c:997)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\httpcore_exceptions.py", line 10, in map_exceptions
yield
File "C:\Program Files\Python310\lib\site-packages\httpcore\backends\asyncio.py", line 76, in start_tls
raise exc
File "C:\Program Files\Python310\lib\site-packages\httpcore\backends\asyncio.py", line 67, in start_tls
ssl_stream = await anyio.streams.tls.TLSStream.wrap(
File "C:\Program Files\Python310\lib\site-packages\anyio\streams\tls.py", line 122, in wrap
await wrapper._call_sslobject_method(ssl_object.do_handshake)
File "C:\Program Files\Python310\lib\site-packages\anyio\streams\tls.py", line 151, in _call_sslobject_method
raise BrokenResourceError from exc
anyio.BrokenResourceError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 60, in map_httpcore_exceptions
yield
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection_pool.py", line 253, in handle_async_request
raise exc
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection_pool.py", line 237, in handle_async_request
response = await connection.handle_async_request(request)
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\http_proxy.py", line 258, in handle_async_request
connect_response = await self._connection.handle_async_request(
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection.py", line 86, in handle_async_request
raise exc
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection.py", line 63, in handle_async_request
stream = await self._connect(request)
File "C:\Program Files\Python310\lib\site-packages\httpcore_async\connection.py", line 150, in _connect
stream = await stream.start_tls(**kwargs)
File "C:\Program Files\Python310\lib\site-packages\httpcore\backends\asyncio.py", line 64, in start_tls
with map_exceptions(exc_map):
File "C:\Program Files\Python310\lib\contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "C:\Program Files\Python310\lib\site-packages\httpcore_exceptions.py", line 14, in map_exceptions
raise to_exc(exc)
httpcore.ConnectError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\Python310\lib\runpy.py", line 86, in run_code
exec(code, run_globals)
File "C:\Program Files\Python310\Scripts\bilix.exe_main
.py", line 7, in
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Program Files\Python310\lib\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
File "C:\Program Files\Python310\lib\site-packages\bilix_main
.py", line 322, in main
loop.run_until_complete(cor)
File "C:\Program Files\Python310\lib\asyncio\base_events.py", line 641, in run_until_complete
return future.result()
File "C:\Program Files\Python310\lib\site-packages\bilix\download\downloader_bilibili.py", line 387, in get_video
video_info = await api.get_video_info(self.client, url)
File "C:\Program Files\Python310\lib\site-packages\bilix\api\bilibili.py", line 173, in get_video_info
res = await req_retry(client, url, follow_redirects=True)
File "C:\Program Files\Python310\lib\site-packages\bilix\utils.py", line 46, in req_retry
raise pre_exc
File "C:\Program Files\Python310\lib\site-packages\bilix\utils.py", line 28, in req_retry
res = await client.request(method, url, follow_redirects=follow_redirects, **kwargs)
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1533, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1620, in send
response = await self._send_handling_auth(
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1648, in _send_handling_auth
response = await self._send_handling_redirects(
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1685, in _send_handling_redirects
response = await self._send_single_request(request)
File "C:\Program Files\Python310\lib\site-packages\httpx_client.py", line 1722, in _send_single_request
response = await transport.handle_async_request(request)
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 352, in handle_async_request
with map_httpcore_exceptions():
File "C:\Program Files\Python310\lib\contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "C:\Program Files\Python310\lib\site-packages\httpx_transports\default.py", line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectError

文件名超长

WARNING  STREAM Unexpected Exception class:OSError [Errno 36] Filename too long:
         'videos/【收藏夹】不吐橙子皮-默认收藏夹/马士兵主讲:JVM真的不难!从零  
         学会Java                                                               
         JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识/  
         马士兵主讲:JVM真的不难!从零学会Java                                  
         JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识-  
         P34-程序员必懂的GC知识:从本质谈起,只要冯诺依曼计算机体系存在,这个流 
         !-audio-0-458303'                                                     
Traceback (most recent call last):
  File "/app/main.py", line 36, in <module>
    schedule.run_pending()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 780, 
in run_pending
    default_scheduler.run_pending()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 100, 
in run_pending
    self._run_job(job)
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 172, 
in _run_job
    ret = job.run()
  File "/usr/local/lib/python3.9/site-packages/schedule/__init__.py", line 661, 
in run
    ret = self.job_func()
  File "/app/main.py", line 25, in job
    asyncio.run(main())
  File "/usr/local/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/lib/python3.9/asyncio/base_events.py", line 642, in 
run_until_complete
    return future.result()
  File "/app/main.py", line 19, in main
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 197, in get_favour
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 210, in _get_favor_by_page
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 365, in get_series
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/downloader_bilibili.py", 
line 431, in get_video
    await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py",
line 70, in get_media
    file_list = await asyncio.gather(*cors)
  File 
"/usr/local/lib/python3.9/site-packages/bilix/download/base_downloader_part.py",
line 98, in _get_media_part
    async with aiofiles.open(file_path, 'ab') as f:
  File "/usr/local/lib/python3.9/site-packages/aiofiles/base.py", line 78, in 
__aenter__
    self._obj = await self._coro
  File "/usr/local/lib/python3.9/site-packages/aiofiles/threadpool/__init__.py",
line 80, in _open
    f = yield from loop.run_in_executor(executor, cb)
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
OSError: [Errno 36] Filename too long: 
'videos/【收藏夹】不吐橙子皮-默认收藏夹/马士兵主讲:JVM真的不难!从零学会Java 
JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识/马士兵主讲 
JVM真的不难!从零学会Java 
JVM虚拟机全套教程;JVM基础丨GC丨C1丨JVM面试丨锁丨等【构建完整JVM知识-P34-程
序员必懂的GC知识:从本质谈起,只要冯诺依曼计算机体系存在,这个流程就永远不变!-a
58303'
马士兵主讲:JVM真的不难!从...向未来,学习路线指引与职业规划 100.0% ╸ … … ETA 0…
                                                                      … …       
马士兵主讲:JVM真的不难!从...体系存在,这个流程就永远不变!  0.0%  ━ … ? ETA -…
                                                                      …   

辛苦帮忙看下

收藏夾

想請問可以下載個人收藏夾裡面的影片嗎?如果可以,請提供程式範例,感謝

关于弹幕,各位可以在这里讨论

各位如果对这个问题有什么看法可以在这里讨论 🤗

通过分析b站前端js,以及API收集项目中提供的文档(感谢🙏),获取b站弹幕的方式主要有两种方式,一个是旧的XML形式,另一种是b站前端现在采用的protobuf形式,本项目使用的是protobuf形式的获取方式。

  • 有一些项目可以直接将XML格式的弹幕转换成ASS格式的字幕,为什么下载不用XML形式的弹幕?

考虑到本项目主要目的是快速下载视频,以及视频的各种附属文件(弹幕,字幕,封面),经过我测试XML接口如果访问过快容易被限流,并且未来可能被b站废弃,初步判断并不适合在本项目中采用。

  • protobuf解析

在目前的下载过程中,会先访问b站弹幕API的view元数据接口,然后解析出弹幕的分片总数,从而并发获取各个分片弹幕文件。因此,在python依赖中添加了protobuf以解析元数据。

对于弹幕本体,在下载完各个分片后会将其合成为一个二进制文件,经过测试,在弹幕非常多的时候解析这个二进制文件比较耗时,不适合在下载的过程中进行解析,并且这个解析说的是json解析,即使解析好了也不能直接放到本地播放器中使用,所以目前仅下载好所有分片文件,合并后不做任何额外操作,在下载目录下的extra文件夹中可以看到二进制文件xxx-弹幕.bin

  • 未来会提供protobuf解析成ASS的方式吗?

作者暂时不知道是否有项目可以高效的将protobuf解析成ASS,各位如果知道可以在下面告诉我,如果有可以引入进来,这样就能在本地播放器中使用了。但是作者自己并不熟悉这两种格式,可能也不是本项目的重点,我可能在未来不会提供这方面的支持

  • 目前能对拿到的bin文件做些什么事情

你可以自己解析成json形式保存,我提供了一个方法

from bilix.dm import parse_seg

with open('videos/extra/xxx-弹幕.bin', 'rb') as f:
    d = parse_seg(f.read())
print(d)

TikTok currently unavailable

In tiktok api

    res = await req_retry(
        client, f'https://api-h2.tiktokv.com/aweme/v1/feed/?aweme_id={key}&version_code=2613&aid=1180')
>>> res.text
''

@Evil0ctal
API可能出了点问题?返回空的信息

Bug: 命令行的输入及输出显示

首先参数不知道怎么弄,按照多年 CV 经验,有以下几种方法,或许需要一个 example

bilix -cookie "xxxxx"
bilix -cookie="xxxx"
bilix -cookie SEEDATE=xxxxx

然后就是输出问题,可以像包管理器一样的 y/n 确认就更好了

我这里好像还有个 bug 终端不能原地刷新了

image

Win1021H2+PowerShell+新版微软终端

感觉都是无关紧要的小细节 XD

下载合集的疑问?

B站的合集和列表似乎是两个东西。

当我在试图下载这个合集https://space.bilibili.com/481361060/channel/seriesdetail?sid=1941597 时报错。
get_collect无法获取到合集信息,或者应该说是列表?下图是请求示例:
image

项目使用文档中的示例:

630是合集id,如果要知道一个合集的id是什么,最简单的办法是在该合集详情页的url找到sid参数,例如 https://space.bilibili.com/369750017/channel/collectiondetail?sid=630

这个630是可以在get_collect使用的api https://api.bilibili.com/x/space/fav/season/list 正常获取合集信息。

@HFrost0 另外,我想请问你的api是在哪获取的,我在 bilibili-API-collect 这个项目中没有查到get_collect中所使用的api?

version 0.8.6下载视频后自动删除

使用最新版0.8.6版本尝试下载bilibili视频,能出现下载框,下载过程中,有缓存文件,下载结束后自动删除全部文件,也没有合并文件。上一版本正常下载。
Snipaste_2022-08-22_19-02-42
Snipaste_2022-08-22_19-03-11

下载时,HEAD 404异常

bilix 版本

image

下载命令

bilix s https://www.bilibili.com/video/BV1kt411k7A3 --dir E:\tmp --max-con 20

问题描述

重复执行上述命令总是报下方相同的异常,无法定位是某一p的地址404或者是某个分片404。也无法知道是不是我本地的网络导致的问题。

异常信息

Traceback (most recent call last):
  File "c:\python38\lib\runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\python38\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "c:\users\showt\.local\bin\bilix.exe\__main__.py", line 7, in <module>
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\_cli.py", line 268, in main
    loop.run_until_complete(task)
  File "c:\python38\lib\asyncio\base_events.py", line 616, in run_until_complete
    return future.result()
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 371, in get_series
    await asyncio.gather(*cors)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 441, in get_video
    await asyncio.gather(*cors)
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 577, in _get_media
    res = await self._req(media_urls[0], method='HEAD')
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\bilix\download.py", line 545, in _req
    res.raise_for_status()
  File "C:\Users\showt\.local\pipx\venvs\bilix\lib\site-packages\httpx\_models.py", line 1510, in raise_for_status
    raise HTTPStatusError(message, request=request, response=self)
httpx.HTTPStatusError: Client error '404 Not Found' for url 'https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/16/18/76821816/76821816-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1653679938&gen=playurlv2&os=cosbv&oi=1885228412&trid=fd2cf300307c48e6aa28300fe24ec4d6u&platform=pc&upsig=ec230dd69a0462df746fde23b8ef006e&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=139942&logo=80000000'
For more information check: https://httpstatuses.com/404

下载bilibili收藏夹报错:KeyError:'data'

bilix 0.10.4,下载bilibili收藏夹报错:KeyError:'data'
下载单个视频没问题

E:\videos>bilix get_favour 'https://space.bilibili.com/37856001/favlist?fid=1740742701'

Traceback (most recent call last):
  File "E:\anaconda3\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "E:\anaconda3\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "E:\anaconda3\Scripts\bilix.exe\__main__.py", line 7, in <module>
  File "E:\anaconda3\lib\site-packages\click\core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "E:\anaconda3\lib\site-packages\click\core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "E:\anaconda3\lib\site-packages\click\core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "E:\anaconda3\lib\site-packages\click\core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "E:\anaconda3\lib\site-packages\bilix\__main__.py", line 301, in main
    loop.run_until_complete(cor)
  File "E:\anaconda3\lib\asyncio\base_events.py", line 647, in run_until_complete
    return future.result()
  File "E:\anaconda3\lib\site-packages\bilix\download\downloader_bilibili.py", line 179, in get_favour
    fav_name, up_name, total_size, bvids = await api.get_favour_page_info(self.client, url_or_fid, keyword=keyword)
  File "E:\anaconda3\lib\site-packages\bilix\api\bilibili.py", line 95, in get_favour_page_info
    data = json.loads(res.text)['data']
KeyError: 'data'

get_up() RuntimeError: Event loop is closed

(BilibiliDownloadEnv) D:\Downloads\Lighting-bilibili-download-0.3.2>python bili_cmd.py get_up 'xxx' -num 10
Traceback (most recent call last):
File "D:\Downloads\Lighting-bilibili-download-0.3.2\bili_cmd.py", line 63, in
asyncio.run(main(parser.parse_args()))
File "D:\Program Files\Python310\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "D:\Program Files\Python310\lib\asyncio\base_events.py", line 646, in run_until_complete
return future.result()
File "D:\Downloads\Lighting-bilibili-download-0.3.2\bili_cmd.py", line 15, in main
await d.get_up_videos(
File "D:\Downloads\Lighting-bilibili-download-0.3.2\lighting_downloader.py", line 195, in get_up_videos
total = min(info['data']['page']['count'], total)
KeyError: 'data'
Exception ignored in: <function _ProactorBasePipeTransport.del at 0x0000017215A7E5F0>
Traceback (most recent call last):
File "D:\Program Files\Python310\lib\asyncio\proactor_events.py", line 116, in del
File "D:\Program Files\Python310\lib\asyncio\proactor_events.py", line 108, in close
File "D:\Program Files\Python310\lib\asyncio\base_events.py", line 750, in call_soon
File "D:\Program Files\Python310\lib\asyncio\base_events.py", line 515, in _check_closed
RuntimeError: Event loop is closed

未知异常<class 'ssl.SSLError'>

原始下载命令:

bilix get_series 'https://www.bilibili.com/video/BV1p3411J7CE?spm_id_from=333.999.0.0' 

报错信息如下:

警告:未知异常<class 'ssl.SSLError'> HEAD https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXB
vEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&n
bs=1&deadline=1653043143&gen=playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk
,nbs,deadline,gen,os,oi,trid,platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
警告:未知异常<class 'ssl.SSLError'> HEAD https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXB
vEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&n
bs=1&deadline=1653043143&gen=playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk
,nbs,deadline,gen,os,oi,trid,platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
警告:未知异常<class 'ssl.SSLError'> HEAD https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXB
vEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&n
bs=1&deadline=1653043143&gen=playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk
,nbs,deadline,gen,os,oi,trid,platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
超过重复次数 https://upos-sz-mirrorbsct.bilivideo.com/upgcxcode/50/86/568858650/568858650-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_
YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1653043143&gen=
playurlv2&os=bsctbv&oi=3663232801&trid=e66a5540f58f4e1f86dca54c35897fe2u&platform=pc&upsig=81cd3214949cfdcb5fbf598c2e4d1cd6&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,
platform&mid=99329590&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=22437&logo=80000000
Traceback (most recent call last):
  File "/Users/peakchao/Code/Python/bilix/venv/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/_cli.py", line 268, in main
    loop.run_until_complete(task)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 371, in get_series
    await asyncio.gather(*cors)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 441, in get_video
    await asyncio.gather(*cors)
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 577, in _get_media
    res = await self._req(media_urls[0], method='HEAD')
  File "/Users/peakchao/Code/Python/bilix/venv/lib/python3.8/site-packages/bilix/download.py", line 544, in _req
    raise Exception('超过重复次数')
Exception: 超过重复次数

备注:换过几个视频都会出这个错误,反复执行下载命令,同样会因为这个错误中断。

B站前端代码更改导致无法下载封面,进而导致下载整体失败?

以我的b站首页推荐的一个视频举例:
bilix v 'https://www.bilibili.com/video/BV1KK411Z7m1' --image
会提示错误信息
WARNING GET ValueError 未知异常 url: //i1.hdslb.com/bfs/archive/c84c0d409451ce5cf6c379156b5d6d2122dc9ed7.jpg@100w_100h_1c.png
ERROR 超过重复次数 //i1.hdslb.com/bfs/archive/c84c0d409451ce5cf6c379156b5d6d2122dc9ed7.jpg@100w_100h_1c.png

我没注意过之前封面的url格式,但现在的这个url没有指定协议,另外即使用HTTP请求到了也只是一个100*100的图片,@前面的才是原图。而代码里好像没见到有对这部分的处理,因此猜测可能是b站改了前端的代码。
另外由于无法请求到图片,因此导致超过重复次数,最终导致抛出异常,甚至连可以正常下载的视频都无法下载。

ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2635)

使用get_series 下载的时候经常会报这个错误,调低并发数也会报同样的错误。
使用get_video下载报错的单个视频时,没有再报错。
下载命令如下,不不知道能不能复现:
bilix s https://www.bilibili.com/video/BV1hS4y1m7Ma --dir /mnt/e/tmp --subtitle --max-con 20

异常信息如下:

Traceback (most recent call last):
  File "/home/liy/.local/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/_cli.py", line 249, in main
    asyncio.run(download(**kwargs))
  File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/_cli.py", line 135, in download
    await d.get_series(key, quality=quality,
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 287, in get_series
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 360, in get_video
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 492, in _get_media
    await asyncio.gather(*cors)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/bilix/download.py", line 512, in _get_media_part
    async for chunk in r.aiter_bytes():
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_models.py", line 1680, in aiter_bytes
    async for raw_bytes in self.aiter_raw():
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_models.py", line 1734, in aiter_raw
    async for raw_stream_bytes in self.stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_client.py", line 145, in __aiter__
    async for chunk in self._stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpx/_transports/default.py", line 239, in
__aiter__
    async for part in self._httpcore_stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/connection_pool.py", line 346, in
__aiter__
    async for part in self._stream:
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 295, in __aiter__
    raise exc
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 288, in __aiter__
    async for chunk in self._connection._receive_response_body(**kwargs):
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 160, in
_receive_response_body
    event = await self._receive_event(timeout=timeout)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/_async/http11.py", line 172, in
_receive_event
    data = await self._network_stream.read(
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/httpcore/backends/asyncio.py", line 31, in read
    return await self._stream.receive(max_bytes=max_bytes)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/anyio/streams/tls.py", line 171, in receive
    data = await self._call_sslobject_method(self._ssl_object.read, max_bytes)
  File "/home/liy/.local/pipx/venvs/bilix/lib/python3.8/site-packages/anyio/streams/tls.py", line 108, in
_call_sslobject_method
    result = func(*args)
  File "/usr/lib/python3.8/ssl.py", line 888, in read
    v = self._sslobj.read(len)
ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2635)

分区获取不全

分区获取不完整,显示了一页的子分区,但其实又许多分区

(bilix) D:\python_project\bilix>bilix get_cate 舞蹈 --order click --num 100
ERROR    舞蹈 是主分区,仅支持子分区,试试 ['宅舞', '街舞', '明星舞蹈', '**舞', '舞蹈综合', '舞蹈教程']

关于多P下载时的异常处理

当一个投稿有多p被同时下载时,某p的请求可能会出异常。
这时程序会重试请求,当超过重试次数时,整个程序就会退出。
但这个时候其他p的请求并没有出问题,貌似还可以继续下载。
请问能不能让程序只是停止出现异常的视频下载,而不中断整个程序?

会提出这个请求的原因是,b站的HEAD请求好像总是抽风,然后过一段时间就好了。
但是我的下载总是被某一p的请求失败而打断就很痛苦。

我不能下载合集和列表的视频

input:
bilix col 'https://space.bilibili.com/698029620/channel/seriesdetail\?sid\=254092' --dir ~/Downloads --only-audio

output:
Traceback (most recent call last): File "/opt/homebrew/bin/bilix", line 8, in <module> sys.exit(main()) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 1130, in __call__ return self.main(*args, **kwargs) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) File "/opt/homebrew/lib/python3.9/site-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) File "/opt/homebrew/lib/python3.9/site-packages/bilix/_cli.py", line 268, in main loop.run_until_complete(task) File "/opt/homebrew/Cellar/[email protected]/3.9.13_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete return future.result() File "/opt/homebrew/lib/python3.9/site-packages/bilix/download.py", line 86, in get_collect_or_list sid = re.search(r'sid=(\d+)', url).groups()[0] AttributeError: 'NoneType' object has no attribute 'groups'
请问如何解决呢?

B站下载报错

File "d:\study\language\python\software\python-3.9\lib\site-packages\bilix\api\bilibili.py", line 144, in get_up_info
up_name = info['data']['list']['vlist'][0]['author']
KeyError: 'data'

请问这应该如何修复呢

Version 0.8.2无法更新

旧版本0.7.2下运行更新命令pip install click bilix --upgrade,无法更新,提示错误,尝试卸载:pip uninstall bilix后,运行:
pip install bilix安装,提示同样错误。也尝试过卸载python重新安装新版本的Python,重启PC,问题依旧。安装旧版本使用没问题,pip install bilix==0.7.2使用正常,安装0.8版本时均无法安装。
Snipaste_2022-08-20_21-10-06
Snipaste_2022-08-20_21-10-23
Snipaste_2022-08-20_21-10-41

Apple Music 无法播放下载的音频

使用Vox播放器或其他播放器才可以播放下载的mp3视频,Apple Music 不行
但是 Apple Music 其他 mp3 格式的都可以播放
还有能否将封面和音频合并呢

testError

image
你好,我在运行 pytest tests/api 时候出现了如上错误

Feature: 下载合集的文件夹输出问题

首先非常好用,给 UP 主 一键三连 点赞了

下载合集时能否自动根据名称创建一个文件夹

这样屯视频非常方便,也不需要很复杂的分类,每次一个合集任务放一起就很行

QAQ

格式输入正确但仍不能下载杜比音频格式的视频

jialiang@jiadeMacBook-Pro ~ % bilix info https://www.bilibili.com/video/BV1wY411d7wi
[4K 杜比7.1] 小さなてのひら(小小的手心)-riya麻枝准 Voicemeeter+Logic
Pro重混音 音频可视化 5,199👀 367👍 173🪙
┣━━ 画面 Video
┃ ┣━━ 4K 超清
┃ ┃ ┣━━ codec: avc1.640034 total: 31.48MB
┃ ┃ ┗━━ codec: av01.0.13M.08.0.110.01.01.01.0 total: 20.40MB
┃ ┣━━ 1080P 60帧
┃ ┃ ┣━━ codec: avc1.640032 total: 10.97MB
┃ ┃ ┗━━ codec: av01.0.09M.08.0.110.01.01.01.0 total: 6.13MB
┃ ┣━━ 1080P 高清
┃ ┃ ┣━━ codec: avc1.640032 total: 8.27MB
┃ ┃ ┗━━ codec: av01.0.08M.08.0.110.01.01.01.0 total: 5.45MB
┃ ┣━━ 720P 高清
┃ ┃ ┣━━ codec: avc1.640028 total: 5.05MB
┃ ┃ ┗━━ codec: av01.0.05M.08.0.110.01.01.01.0 total: 3.26MB
┃ ┣━━ 480P 清晰
┃ ┃ ┣━━ codec: avc1.64001F total: 2.98MB
┃ ┃ ┗━━ codec: av01.0.04M.08.0.110.01.01.01.0 total: 1.97MB
┃ ┗━━ 360P 流畅
┃ ┣━━ codec: avc1.64001E total: 2.13MB
┃ ┗━━ codec: av01.0.01M.08.0.110.01.01.01.0 total: 1.55MB
┗━━ 声音 Audio
┣━━ 默认音质
┃ ┗━━ codec: mp4a.40.2 total: 6.76MB
┗━━ 杜比全景声 Dolby
┗━━ codec: ec-3 total: 59.16MB

jialiang@jiadeMacBook-Pro ~ % bilix v https://www.bilibili.com/video/BV1wY411d7wi --codec hev:ec-3
WARNING [4K 杜比7.1] 小さなてのひら(小小的手心)-riya麻枝准 Voicemeeter+Logic
Pro重混音 音频可视化 清晰度<0>
编码hev:ec-3不可用,请检查输入是否正确或是否需要大会员

请问下这是什么原因呢,我看readme里面写了已经支持了杜比音频,望解惑谢谢

install bilix的方式能否增加homebrew?

install bilix的方式能否增加homebrew? homebrew更新比较方便,一条命令就把所有库和包都更新到最新,希望大佬能考虑下,谢谢~ lux和you-get都能用Homebrew安装,方便更新版本,希望bilix也能加入brew

报错:Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

python:3.11.0
执行:bilix --cookie xxx get_series https://www.bilibili.com/video/BV1MP4y1D7s8/
报错:
WARNING STREAM Unexpected Exception class:ProtocolError Invalid input ConnectionInputs.RECV_DATA in state
ConnectionState.CLOSED
Traceback (most recent call last):
File "C:\Python311\Lib\site-packages\h2\connection.py", line 224, in process_input
func, target_state = self.transitions[(self.state, input)]
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
KeyError: (<ConnectionState.CLOSED: 3>, <ConnectionInputs.RECV_DATA: 11>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in run_code
File "C:\Python311\Scripts\bilix.exe_main
.py", line 7, in
File "C:\Python311\Lib\site-packages\click\core.py", line 1130, in call
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\click\core.py", line 1055, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\click\core.py", line 760, in invoke
return _callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\bilix_main
.py", line 322, in main
loop.run_until_complete(cor)
File "C:\Python311\Lib\asyncio\base_events.py", line 650, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\bilix\download\downloader_bilibili.py", line 365, in get_series
await asyncio.gather(*cors)
File "C:\Python311\Lib\site-packages\bilix\download\downloader_bilibili.py", line 431, in get_video
await asyncio.gather(*cors)
File "C:\Python311\Lib\site-packages\bilix\download\base_downloader_part.py", line 70, in get_media
file_list = await asyncio.gather(*cors)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\contextlib.py", line 222, in aexit
await self.gen.athrow(typ, value, traceback)
File "C:\Python311\Lib\site-packages\httpx_client.py", line 1583, in stream
yield response
File "C:\Python311\Lib\contextlib.py", line 222, in aexit
await self.gen.athrow(typ, value, traceback)
File "C:\Python311\Lib\site-packages\bilix\download\base_downloader.py", line 100, in _stream_context
yield
File "C:\Python311\Lib\site-packages\bilix\download\base_downloader_part.py", line 99, in _get_media_part
async for chunk in r.aiter_bytes(chunk_size=self.chunk_size):
File "C:\Python311\Lib\site-packages\httpx_models.py", line 923, in aiter_bytes
async for raw_bytes in self.aiter_raw():
File "C:\Python311\Lib\site-packages\httpx_models.py", line 981, in aiter_raw
async for raw_stream_bytes in self.stream:
File "C:\Python311\Lib\site-packages\httpx_client.py", line 147, in aiter
async for chunk in self._stream:
File "C:\Python311\Lib\site-packages\httpx_transports\default.py", line 239, in aiter
async for part in self._httpcore_stream:
File "C:\Python311\Lib\site-packages\httpcore_async\connection_pool.py", line 346, in aiter
async for part in self._stream:
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 468, in aiter
raise exc
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 459, in aiter
async for chunk in self._connection._receive_response_body(
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 249, in _receive_response_body
event = await self._receive_stream_event(request, stream_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 262, in _receive_stream_event
await self._receive_events(request, stream_id)
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 283, in _receive_events
events = await self._read_incoming_data(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\httpcore_async\http2.py", line 345, in _read_incoming_data
events: typing.List[h2.events.Event] = self._h2_state.receive_data(data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 1463, in receive_data
events.extend(self._receive_frame(frame))
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 1487, in _receive_frame
frames, events = self._frame_dispatch_tableframe.class
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 1673, in _receive_data_frame
events = self.state_machine.process_input(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\h2\connection.py", line 228, in process_input
raise ProtocolError(
h2.exceptions.ProtocolError: Invalid input ConnectionInputs.RECV_DATA in state ConnectionState.CLOSED

jable 视频不能下载

bilix 已经更新到最新 Version 0.10.1

$ bilix v https://jable.tv/videos/ssis-448/

Traceback (most recent call last):
  File "/usr/local/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/bilix/__main__.py", line 301, in main
    loop.run_until_complete(cor)
  File "/usr/local/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.10/site-packages/bilix/download/downloader_jable.py", line 17, in get_video
    video_info = await api.get_video_info(self.client, url)
  File "/usr/local/lib/python3.10/site-packages/bilix/api/jable.py", line 35, in get_video_info
    model_name = soup.find("span", class_="placeholder rounded-circle")['title']
TypeError: 'NoneType' object is not subscriptable

NICE

It was only 20 stars yesterday, but it's over 100 today! Waooooooo~~~~~~~~~~

--quality 直接指定画质?

有的用户一般下载 720p 的,现在的情况:

如果有 1080p 的,则需要指定 -q 1,如果只有 720p 以下的,-q 0

能否去除这种不确定性?

比如直接 -q 720

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.