make youtube extractor compatible with mutliple date formats

master
Felix Stupp 6 months ago
parent 7f2df84fe7
commit 8b6e318a20
Signed by: zocker
GPG Key ID: 93E1BD26F6B02FB7

@ -10,6 +10,9 @@ from youtubesearchpython import ( # type: ignore
Video,
)
from ...extras import (
multi_strptime,
)
from ...models import (
MediaElement,
MediaThumbnail,
@ -106,8 +109,11 @@ class YoutubeMediaExtractor(MediaExtractor[YoutubeVideoData]):
key=lambda thumb: thumbnail_sort_key(thumb["width"], thumb["height"]),
)
object.thumbnail = MediaThumbnail.from_uri(best_thumb["url"])
object.release_date = datetime.strptime(
data.get("uploadDate") or data["publishDate"], "%Y-%m-%d"
object.release_date = multi_strptime(
data.get("uploadDate") or data["publishDate"],
"%Y-%m-%dT%H:%M:%S%:z",
"%Y-%m-%dT%H:%M:%S%z",
"%Y-%m-%d",
)
object.length = int(data["duration"]["secondsText"])
for tag in get_video_tags(data):

@ -1,4 +1,7 @@
from .chain import Chain
from .datetimes import (
multi_strptime,
)
from .errors import gen_api_error
from .strings import remove_common_trails
from .typing import LazyValue
@ -8,5 +11,6 @@ __all__ = [
"Chain",
"LazyValue",
"gen_api_error",
"multi_strptime",
"remove_common_trails",
]

@ -0,0 +1,24 @@
from __future__ import annotations
from datetime import (
datetime,
)
from logging import (
INFO,
Logger,
)
log = Logger(__name__)
def multi_strptime(text: str, *format: str, log_level: int = INFO) -> datetime:
log.debug(f"try multi_strptime on {text!r} with {format!r}")
for fmt in format:
try:
return datetime.strptime(text, fmt)
except:
log.log(
level=log_level,
msg=f"failed multi_strptime on {text!r} with {fmt!r}, continue",
)
raise ValueError(f"failed all multi_strptime on {text!r} with {format!r}")
Loading…
Cancel
Save