exracted parser mappings

This commit is contained in:
Dantenerosas 2023-09-28 15:56:26 +03:00
parent 0b314cfa6c
commit 87cf25ed61
2 changed files with 48 additions and 16 deletions

View File

@ -15,7 +15,8 @@ from src.parsers.MyMail.my_mail_parser import MyMailParser
from src.parsers.Okru.ok_parser import OkParser from src.parsers.Okru.ok_parser import OkParser
from src.parsers.Yappy.yappy_parser import YappyParser from src.parsers.Yappy.yappy_parser import YappyParser
from src.parsers.base_parser import BaseParser from src.parsers.base_parser import BaseParser
from loguru import logger
from src.parsers.parser_mapping import get_parser
# TODO: добавить логгер с временными метками в yt-dlp # TODO: добавить логгер с временными метками в yt-dlp
@ -77,21 +78,23 @@ class MasterService:
@staticmethod @staticmethod
def get_parser(params: dict): def get_parser(params: dict):
try: try:
domain = urlparse(params["link"]).netloc url_parse_result = urlparse(params["link"])
# TODO: похоже нужно переделать на регулярки, т.к. добавлять каждую вариацию домена моветон, вероятно я сделаю uri = f"{url_parse_result.netloc}/{url_parse_result.path}"
parser_mapping = { logger.info(uri)
"my.mail.ru": MyMailParser(params), # # TODO: похоже нужно переделать на регулярки, т.к. добавлять каждую вариацию домена моветон, вероятно я сделаюне-
"www.youtube.com": BaseParser(params), # parser_mapping = {
"youtube.com": BaseParser(params), # "my.mail.ru": MyMailParser(params),
"youtu.be": BaseParser(params), # "www.youtube.com": BaseParser(params),
"vk.com": BaseParser(params), # "youtube.com": BaseParser(params),
"ok.ru": BaseParser(params) if "topic" not in params["link"] else OkParser(params), # "youtu.be": BaseParser(params),
"likee.video": BaseParser(params), # "vk.com": BaseParser(params),
"dzen.ru": BaseParser(params), # "ok.ru": BaseParser(params) if "topic" not in params["link"] else OkParser(params),
"yappy.media": YappyParser(params), # "likee.video": BaseParser(params),
"yandex.ru": BaseParser(params), # "dzen.ru": BaseParser(params),
} # "yappy.media": YappyParser(params),
return parser_mapping[domain] # "yandex.ru": BaseParser(params),
# }
return get_parser(uri)(params)
except KeyError: except KeyError:
raise SiteNotImplementedException raise SiteNotImplementedException

View File

@ -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]