Updated pyMetadata with new source

This commit is contained in:
Brage 2023-07-18 14:11:11 +02:00
parent 554b54768f
commit 14bbb1bc71
5 changed files with 34 additions and 11 deletions

View File

@ -10,6 +10,7 @@ from fuzzywuzzy import fuzz
from sources.result import DataResult, Metadata from sources.result import DataResult, Metadata
from sources.anii import metadata as AniiMetadata from sources.anii import metadata as AniiMetadata
from sources.imdb import metadata as ImdbMetadata from sources.imdb import metadata as ImdbMetadata
from sources.mal import metadata as MalMetadata
# Konfigurer Kafka-forbindelsen # Konfigurer Kafka-forbindelsen
bootstrap_servers = os.environ.get("KAFKA_BOOTSTRAP_SERVER") or "127.0.0.1:9092" bootstrap_servers = os.environ.get("KAFKA_BOOTSTRAP_SERVER") or "127.0.0.1:9092"
@ -144,21 +145,36 @@ class MessageHandlerThread(threading.Thread):
def perform_action(self, title) -> DataResult: def perform_action(self, title) -> DataResult:
anii = AniiMetadata(title) anii = AniiMetadata(title)
imdb = ImdbMetadata(title) imdb = ImdbMetadata(title)
mal = MalMetadata(title)
mal_result = mal.lookup()
anii_result = anii.lookup() anii_result = anii.lookup()
imdb_result = imdb.lookup() imdb_result = imdb.lookup()
# Sammenlign resultater basert på likheter og sammenhenger med tittelen # Sammenlign resultater basert på likheter og sammenhenger med tittelen
if anii_result.statusType == "SUCCESS" and imdb_result.statusType == "SUCCESS": if anii_result.statusType == "SUCCESS" and imdb_result.statusType == "SUCCESS" and mal_result.statusType == "SUCCESS":
# Begge registrene ga suksessresultater, bruk fuzzy matching for å gjøre en vurdering # Begge registrene ga suksessresultater, bruk fuzzy matching for å gjøre en vurdering
title_similarity_anii = fuzz.ratio(title.lower(), anii_result.data.title.lower()) title_similarity_anii = fuzz.ratio(title.lower(), anii_result.data.title.lower())
title_similarity_imdb = fuzz.ratio(title.lower(), imdb_result.data.title.lower()) title_similarity_imdb = fuzz.ratio(title.lower(), imdb_result.data.title.lower())
title_similarity_mal = fuzz.ratio(title.lower(), mal_result.data.title.lower())
# Sammenlign likheter mellom tittel og registertitler alt_titles_anii = anii_result.data.altTitle
if title_similarity_anii > title_similarity_imdb: alt_titles_imdb = imdb_result.data.altTitle
most_likely_result = anii_result alt_titles_mal = mal_result.data.altTitle
else:
# Sammenlign likheter mellom tittel og registertitler, inkludert alternative titler
if (
title_similarity_anii * 0.8 + sum(fuzz.ratio(title.lower(), alt_title.lower()) for alt_title in alt_titles_anii) * 0.2
< title_similarity_mal * 0.8 + sum(fuzz.ratio(title.lower(), alt_title.lower()) for alt_title in alt_titles_mal) * 0.2
):
most_likely_result = mal_result
elif (
title_similarity_imdb * 0.8 + sum(fuzz.ratio(title.lower(), alt_title.lower()) for alt_title in alt_titles_imdb) * 0.2
> title_similarity_anii * 0.8 + sum(fuzz.ratio(title.lower(), alt_title.lower()) for alt_title in alt_titles_anii) * 0.2
):
most_likely_result = imdb_result most_likely_result = imdb_result
else:
most_likely_result = anii_result
elif anii_result.statusType == "SUCCESS": elif anii_result.statusType == "SUCCESS":
# AniList ga suksessresultat, bruk det som det mest sannsynlige # AniList ga suksessresultat, bruk det som det mest sannsynlige
@ -168,13 +184,19 @@ class MessageHandlerThread(threading.Thread):
# IMDb ga suksessresultat, bruk det som det mest sannsynlige # IMDb ga suksessresultat, bruk det som det mest sannsynlige
most_likely_result = imdb_result most_likely_result = imdb_result
elif mal_result.statusType == "SUCCESS":
# MAL ga suksessresultat, bruk det som det mest sannsynlige
most_likely_result = mal_result
else: else:
# Begge registrene feilet, håndter etter eget behov # Ingen resultater, bruk AniList hvis tilgjengelig
most_likely_result = DataResult(statusType="ERROR", errorMessage="No Result") most_likely_result = anii_result
# Returner det mest sannsynlige resultatet # Returner det mest sannsynlige resultatet
return most_likely_result return most_likely_result
def compose_message(self, referenceId: str, result: DataResult) -> ProducerDataValueSchema: def compose_message(self, referenceId: str, result: DataResult) -> ProducerDataValueSchema:
return ProducerDataValueSchema( return ProducerDataValueSchema(
referenceId=referenceId, referenceId=referenceId,

View File

@ -3,4 +3,5 @@ AnilistPython>=0.1.3
kafka-python>=2.0.2 kafka-python>=2.0.2
fuzzywuzzy>=0.18.0 fuzzywuzzy>=0.18.0
requests>=2.31.0 requests>=2.31.0
python-Levenshtein>=0.21.1 python-Levenshtein>=0.21.1
mal-api>=0.5.3

View File

@ -15,7 +15,7 @@ class metadata():
meta = Metadata( meta = Metadata(
title = result.get("name_english", None), title = result.get("name_english", None),
altTitle = result.get("name_romaji", None), altTitle = [result.get("name_romaji", None)],
cover = result.get("cover_image", None), cover = result.get("cover_image", None),
summary = result.get("desc", None), summary = result.get("desc", None),
type = 'movie' if result.get('airing_format', '').lower() == 'movie' else 'serie', type = 'movie' if result.get('airing_format', '').lower() == 'movie' else 'serie',

View File

@ -17,7 +17,7 @@ class metadata():
result = self.imdb.get_movie(imdbId) result = self.imdb.get_movie(imdbId)
meta = Metadata( meta = Metadata(
title = result.get("title", None), title = result.get("title", None),
altTitle = result.get("localized title", None), altTitle = [result.get("localized title", None)],
cover = result.get("cover url", None), cover = result.get("cover url", None),
summary = result.get("plot outline", None), summary = result.get("plot outline", None),
type = 'movie' if result.get('kind', '').lower() == 'movie' else 'serie', type = 'movie' if result.get('kind', '').lower() == 'movie' else 'serie',

View File

@ -4,7 +4,7 @@ from dataclasses import dataclass, asdict
@dataclass @dataclass
class Metadata: class Metadata:
title: str title: str
altTitle: str altTitle: List[str]
cover: str cover: str
type: str # Serie/Movie type: str # Serie/Movie
summary: str summary: str