💩 Add geturl function
This commit is contained in:
parent
aaed23c058
commit
9f80eb39f0
1 changed files with 59 additions and 0 deletions
59
snippets/geturl.py
Normal file
59
snippets/geturl.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from bilibili_api import video, sync
|
||||||
|
|
||||||
|
|
||||||
|
def geturl(vn: str) -> str:
|
||||||
|
"""Get audio download URL from AV or BV number with bilibili-api-python.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
vn : str
|
||||||
|
AV or BV number.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
str
|
||||||
|
URL of audio stream.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
------
|
||||||
|
InvalidVideoNumberException
|
||||||
|
If the format of AV or BV video number is invalid.
|
||||||
|
BiliBiliAPIException
|
||||||
|
If bilibili-api-python raises exception.
|
||||||
|
BadVideoException
|
||||||
|
If video is in flv format.
|
||||||
|
"""
|
||||||
|
|
||||||
|
class InvalidVideoNumberException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class BiliBiliAPIException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class BadVideoException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if len(vn) <= 2:
|
||||||
|
raise InvalidVideoNumberException("Video number too short!")
|
||||||
|
if vn[:2].upper() == "AV":
|
||||||
|
if not vn[2:].isnumeric():
|
||||||
|
raise InvalidVideoNumberException("Invalid AV video number!")
|
||||||
|
else:
|
||||||
|
v = video.Video(aid="AV" + vn[2:])
|
||||||
|
if vn[:2].upper() != "BV":
|
||||||
|
raise InvalidVideoNumberException("Invalid video number!")
|
||||||
|
else:
|
||||||
|
v = video.Video(bvid="BV" + vn[2:])
|
||||||
|
|
||||||
|
try:
|
||||||
|
download_url_data = sync(v.get_download_url(0))
|
||||||
|
detecter = video.VideoDownloadURLDataDetecter(data=download_url_data)
|
||||||
|
streams = detecter.detect_best_streams()
|
||||||
|
except:
|
||||||
|
raise BiliBiliAPIException("Error happens with bilibili-api-python.")
|
||||||
|
if detecter.check_flv_stream() == True:
|
||||||
|
raise BadVideoException("Video is only available in flv format.")
|
||||||
|
|
||||||
|
return streams[1].url
|
Loading…
Reference in a new issue