Modify usage of videoinfo
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
from . videoinfo import VideoInfo
|
||||||
|
def videoinfo(video_id):
|
||||||
|
return VideoInfo(video_id)
|
||||||
@@ -5,10 +5,11 @@ import traceback
|
|||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
|
||||||
from . import parser
|
from . import parser
|
||||||
|
from . import videoinfo
|
||||||
from .. import config
|
from .. import config
|
||||||
from .. import util
|
from .. import util
|
||||||
from .. paramgen import arcparam
|
from .. paramgen import arcparam
|
||||||
|
from ..exceptions import InvalidVideoIdException
|
||||||
logger = config.logger(__name__)
|
logger = config.logger(__name__)
|
||||||
headers=config.headers
|
headers=config.headers
|
||||||
|
|
||||||
@@ -268,4 +269,4 @@ def check_duplicate(blocks):
|
|||||||
for i in range(len(blocks)-1):
|
for i in range(len(blocks)-1):
|
||||||
if ( is_same_offset(i) and is_same_id(i) and is_same_type(i) ):
|
if ( is_same_offset(i) and is_same_id(i) and is_same_type(i) ):
|
||||||
ret.append(blocks[i])
|
ret.append(blocks[i])
|
||||||
return ret
|
return ret
|
||||||
|
|||||||
@@ -7,24 +7,32 @@ from ..exceptions import InvalidVideoIdException
|
|||||||
headers = config.headers
|
headers = config.headers
|
||||||
pattern=re.compile(r"yt\.setConfig\({'PLAYER_CONFIG': ({.*})}\);")
|
pattern=re.compile(r"yt\.setConfig\({'PLAYER_CONFIG': ({.*})}\);")
|
||||||
|
|
||||||
def _parse(html):
|
class VideoInfo:
|
||||||
result = re.search(pattern, html)
|
def __init__(self,video_id):
|
||||||
res= json.loads(result.group(1))
|
self.video_id = video_id
|
||||||
response = res["args"].get("embedded_player_response")
|
self.info = self._get_info(video_id)
|
||||||
if response is None:
|
|
||||||
raise InvalidVideoIdException("Invalid video_id.")
|
|
||||||
renderer = (json.loads(response))["embedPreview"]["thumbnailPreviewRenderer"]
|
|
||||||
return {
|
|
||||||
"duration": int(renderer["videoDurationSeconds"]),
|
|
||||||
"title" : [''.join(run["text"]) for run in renderer["title"]["runs"]][0],
|
|
||||||
"channelId" : renderer["videoDetails"]["embeddedPlayerOverlayVideoDetailsRenderer"]["channelThumbnailEndpoint"]["channelThumbnailEndpoint"]["urlEndpoint"]["urlEndpoint"]["url"][9:]
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_info(video_id):
|
def _get_info(self,video_id):
|
||||||
url = f"https://www.youtube.com/embed/{video_id}"
|
url = f"https://www.youtube.com/embed/{video_id}"
|
||||||
resp= requests.get(url, headers = headers)
|
resp= requests.get(url, headers = headers)
|
||||||
resp.raise_for_status()
|
resp.raise_for_status()
|
||||||
return _parse(resp.text)
|
return self._parse(resp.text)
|
||||||
|
|
||||||
|
def _parse(self,html):
|
||||||
|
result = re.search(pattern, html)
|
||||||
|
res= json.loads(result.group(1))
|
||||||
|
response = res["args"].get("embedded_player_response")
|
||||||
|
if response is None:
|
||||||
|
raise InvalidVideoIdException("動画IDが無効です。")
|
||||||
|
renderer = (json.loads(response))["embedPreview"]["thumbnailPreviewRenderer"]
|
||||||
|
return {
|
||||||
|
"duration": int(renderer["videoDurationSeconds"]),
|
||||||
|
"title" : [''.join(run["text"]) for run in renderer["title"]["runs"]][0],
|
||||||
|
"channelId" : renderer["videoDetails"]["embeddedPlayerOverlayVideoDetailsRenderer"]["channelThumbnailEndpoint"]["channelThumbnailEndpoint"]["urlEndpoint"]["urlEndpoint"]["url"][9:]
|
||||||
|
}
|
||||||
|
|
||||||
|
def get(self,item):
|
||||||
|
return self.info.get(item)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user