From c03025ec333434eda081f4876cb9e4647019bfe8 Mon Sep 17 00:00:00 2001 From: Dantenerosas Date: Thu, 28 Sep 2023 15:56:26 +0300 Subject: [PATCH] exracted parser mappings --- src/core/master_service.py | 35 +++++++++++++++++++---------------- src/parsers/parser_mapping.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 src/parsers/parser_mapping.py diff --git a/src/core/master_service.py b/src/core/master_service.py index 602233b..0a25b6a 100644 --- a/src/core/master_service.py +++ b/src/core/master_service.py @@ -15,7 +15,8 @@ from src.parsers.MyMail.my_mail_parser import MyMailParser from src.parsers.Okru.ok_parser import OkParser from src.parsers.Yappy.yappy_parser import YappyParser from src.parsers.base_parser import BaseParser - +from loguru import logger +from src.parsers.parser_mapping import get_parser # TODO: добавить логгер с временными метками в yt-dlp @@ -77,21 +78,23 @@ class MasterService: @staticmethod def get_parser(params: dict): try: - domain = urlparse(params["link"]).netloc - # TODO: похоже нужно переделать на регулярки, т.к. добавлять каждую вариацию домена моветон, вероятно я сделаю - parser_mapping = { - "my.mail.ru": MyMailParser(params), - "www.youtube.com": BaseParser(params), - "youtube.com": BaseParser(params), - "youtu.be": BaseParser(params), - "vk.com": BaseParser(params), - "ok.ru": BaseParser(params) if "topic" not in params["link"] else OkParser(params), - "likee.video": BaseParser(params), - "dzen.ru": BaseParser(params), - "yappy.media": YappyParser(params), - "yandex.ru": BaseParser(params), - } - return parser_mapping[domain] + url_parse_result = urlparse(params["link"]) + uri = f"{url_parse_result.netloc}/{url_parse_result.path}" + logger.info(uri) + # # TODO: похоже нужно переделать на регулярки, т.к. добавлять каждую вариацию домена моветон, вероятно я сделаюне- + # parser_mapping = { + # "my.mail.ru": MyMailParser(params), + # "www.youtube.com": BaseParser(params), + # "youtube.com": BaseParser(params), + # "youtu.be": BaseParser(params), + # "vk.com": BaseParser(params), + # "ok.ru": BaseParser(params) if "topic" not in params["link"] else OkParser(params), + # "likee.video": BaseParser(params), + # "dzen.ru": BaseParser(params), + # "yappy.media": YappyParser(params), + # "yandex.ru": BaseParser(params), + # } + return get_parser(uri)(params) except KeyError: raise SiteNotImplementedException diff --git a/src/parsers/parser_mapping.py b/src/parsers/parser_mapping.py new file mode 100644 index 0000000..1c800be --- /dev/null +++ b/src/parsers/parser_mapping.py @@ -0,0 +1,29 @@ +from collections import OrderedDict +import re + +from src.parsers.MyMail.my_mail_parser import MyMailParser +from src.parsers.Okru.ok_parser import OkParser +from src.parsers.Yappy.yappy_parser import YappyParser +from src.parsers.base_parser import BaseParser + +def compile_regex(regex): + return re.compile(regex, re.IGNORECASE | re.DOTALL | re.MULTILINE) + +parser_mapping = OrderedDict( + { + compile_regex(r"^my.mail.ru/") : MyMailParser, + compile_regex(r"^(?:www.)?(?:youtube.com|youtu.be)/"): BaseParser, + compile_regex(r"^vk.com/"): BaseParser, + compile_regex(r"^ok.ru/okvideo/topic"): OkParser, + compile_regex(r"^ok.ru/video"): BaseParser, + compile_regex(r"^...?likee.video/"): BaseParser, + compile_regex(r"^dzen.ru/"): BaseParser, + compile_regex(r"^yappy.media/"): BaseParser, + compile_regex(r"^yandex.ru/"): BaseParser, + } +) + +def get_parser(uri): + for regex in parser_mapping: + if regex.match(uri): + return parser_mapping[regex] \ No newline at end of file