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 __future__ import annotations
from typing import ( from typing import (
Iterable,
List, List,
NewType, NewType,
TypedDict, TypedDict,
) )
from ...models import Tag, TagKey
EXTRACTOR_KEY = ".extractor/com.youtube"
KEYWORD_PREFIX = f"{EXTRACTOR_KEY}/keyword"
Keyword = NewType("Keyword", str) Keyword = NewType("Keyword", str)
@ -46,3 +54,26 @@ class YoutubeVideoData(TypedDict):
uploadDate: str uploadDate: str
isLiveNow: bool isLiveNow: bool
link: str 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 ( from ..all.youtube import (
YoutubeVideoData, YoutubeVideoData,
get_video_tags,
) )
from ..generic import ( from ..generic import (
AuthorExtractedData, AuthorExtractedData,
@ -99,6 +100,8 @@ class YoutubeMediaExtractor(MediaExtractor[YoutubeVideoData]):
data.get("uploadDate") or data["publishDate"], "%Y-%m-%d" data.get("uploadDate") or data["publishDate"], "%Y-%m-%d"
) )
object.length = int(data["duration"]["secondsText"]) 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.uri = f"https://www.youtube.com/watch?v={data['id']}"
object.add_uris( object.add_uris(
( (

Loading…
Cancel
Save