HFrost0 / bilix

⚡️Lightning-fast async download tool for bilibili and more
Apache License 2.0
1.58k stars 165 forks source link

当长的视频的标题和长的部分的标题放在一起时,该命令会失败 #190

Closed rodrigomorales1 closed 5 months ago

rodrigomorales1 commented 8 months ago
$ bilix get_video 'https://www.bilibili.com/video/BV145411s7vG?p=4'
$ echo Exit code: $?
WARNING  filename too long for os, truncate will be applied. filename:          
         【你会怎么做】高三女孩早恋被老师当场抓包,男孩们心疼女孩,喊话男朋友: 
         -P4-学生早恋被抓个现行,老师当众以“通报批评”处分来要挟两人分手。知心   
         姐姐们集体上线,谁没早恋过嘛!.mp4                                     

Traceback (most recent call last):
  File "/home/myuser/e/venv/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/home/myuser/e/venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/home/myuser/e/venv/lib/python3.10/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/home/myuser/e/venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/myuser/e/venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/myuser/e/venv/lib/python3.10/site-packages/bilix/cli/main.py", line 374, in main
    loop.run_until_complete(cor)
  File "/gnu/store/0p4nxla50wii7qpnvnpfgrg7w70w4vda-python-3.10.7/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/myuser/e/venv/lib/python3.10/site-packages/bilix/sites/bilibili/downloader.py", line 433, in get_video
    path_lst, _ = await asyncio.gather(asyncio.gather(*media_cors), asyncio.gather(*add_cors))
  File "/home/myuser/e/venv/lib/python3.10/site-packages/bilix/download/base_downloader.py", line 75, in wrapper
    return await func(*new_args, **kwargs)
  File "/home/myuser/e/venv/lib/python3.10/site-packages/bilix/download/base_downloader_part.py", line 162, in get_file
    if not path.is_dir():
  File "/gnu/store/0p4nxla50wii7qpnvnpfgrg7w70w4vda-python-3.10.7/lib/python3.10/pathlib.py", line 1305, in is_dir
    return S_ISDIR(self.stat().st_mode)
  File "/gnu/store/0p4nxla50wii7qpnvnpfgrg7w70w4vda-python-3.10.7/lib/python3.10/pathlib.py", line 1097, in stat
    return self._accessor.stat(self, follow_symlinks=follow_symlinks)
OSError: [Errno 36] File name too long: 'videos/【你会怎么做】高三女孩早恋被老师当场抓包,男孩们心疼女孩,喊话男朋友:追啊!-P4-学生早恋被抓个现行,老师当众以“通报批评”处分来要挟两人分手。知心姐姐们集体上线,谁没早恋过嘛!-v'
Exit code: 1
HFrost0 commented 8 months ago

ok,记下了

HFrost0 commented 6 months ago

请问你的系统是什么呢?这个错误应该是path.is_dir()中产生的,目前我在win和mac上没有复现,可以试下在你的环境里面试一下把162行换成

if not os.path.isdir(path):
rodrigomorales1 commented 6 months ago

@HFrost0 我的系统是 GNU Guix System (Linux) 。

rodrigomorales1 commented 6 months ago

@HFrost0 你指的是这个行吗?

https://github.com/HFrost0/bilix/blob/336a65e7bec6f3c16dd509c01e4325950c4f5829/bilix/download/base_downloader_part.py#L162-L162

我换了它但是我仍然遇到了问题。

        if not path.is_dir(path):
$ bilix get_video 'https://www.bilibili.com/video/BV145411s7vG?p=4'
WARNING  filename too long for os, truncate will be applied. filename:          
         【你会怎么做】高三女孩早恋被老师当场抓包,男孩们心疼女孩,喊话男朋友: 
         追啊!-P4-学生早恋被抓个现行,老师当众以“通报批评”处分来要挟两人分手。 
         知心姐姐们集体上线,谁没早恋过嘛!.mp4                                 

Traceback (most recent call last):
  File "/home/myusername/e/venv/bin/bilix", line 8, in <module>
    sys.exit(main())
  File "/home/myusername/e/venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/home/myusername/e/venv/lib/python3.10/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/home/myusername/e/venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/myusername/e/venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/myusername/e/venv/lib/python3.10/site-packages/bilix/cli/main.py", line 374, in main
    loop.run_until_complete(cor)
  File "/gnu/store/kmls34ib3n46lmxmhshx07qk13qxy633-python-3.10.7/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/myusername/e/venv/lib/python3.10/site-packages/bilix/sites/bilibili/downloader.py", line 433, in get_video
    path_lst, _ = await asyncio.gather(asyncio.gather(*media_cors), asyncio.gather(*add_cors))
  File "/home/myusername/e/venv/lib/python3.10/site-packages/bilix/download/base_downloader.py", line 75, in wrapper
    return await func(*new_args, **kwargs)
  File "/home/myusername/e/venv/lib/python3.10/site-packages/bilix/download/base_downloader_part.py", line 162, in get_file
    if not path.is_dir(path):
TypeError: Path.is_dir() takes 1 positional argument but 2 were given
HFrost0 commented 6 months ago

你前面忘了个os,用os.path.isdir这个方法判断path变量是否为一个目录