youtube: Add tags for keywords

master
Felix Stupp 1 year ago
parent 49c5d47893
commit 088269f272
Signed by: zocker
GPG Key ID: 93E1BD26F6B02FB7

@ -1,11 +1,19 @@
from __future__ import annotations
from typing import (
Iterable,
List,
NewType,
TypedDict,
)
from ...models import Tag, TagKey
EXTRACTOR_KEY = ".extractor/com.youtube"
KEYWORD_PREFIX = f"{EXTRACTOR_KEY}/keyword"
Keyword = NewType("Keyword", str)
@ -46,3 +54,26 @@ class YoutubeVideoData(TypedDict):
uploadDate: str
isLiveNow: bool
link: str
def get_video_tags(video: YoutubeVideoData) -> Iterable[Tag]:
keyword_list = video.get("keywords")
if keyword_list is not None:
for keyword in keyword_list:
yield get_keyword_tag(keyword)
def get_keyword_tag(keyword: Keyword) -> Tag:
TagKey.get_or_create_tag(
tag_key=KEYWORD_PREFIX,
title=f"[{EXTRACTOR_NAME}] Keyword",
use_for_preferences=False,
)
return TagKey.get_or_create_tag(
tag_key=f"{KEYWORD_PREFIX}/{keyword.lower()}",
title=f"[{EXTRACTOR_NAME}] [Keyword] {keyword}",
use_for_preferences=True,
super_tags=[
KEYWORD_PREFIX,
],
)

@ -14,6 +14,7 @@ from ...models import (
)
from ..all.youtube import (
YoutubeVideoData,
get_video_tags,
)
from ..generic import (
AuthorExtractedData,
@ -99,6 +100,8 @@ class YoutubeMediaExtractor(MediaExtractor[YoutubeVideoData]):
data.get("uploadDate") or data["publishDate"], "%Y-%m-%d"
)
object.length = int(data["duration"]["secondsText"])
for tag in get_video_tags(data):
object.tag_list.add(tag)
object.uri = f"https://www.youtube.com/watch?v={data['id']}"
object.add_uris(
(

Loading…
Cancel
Save