mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-14 18:41:04 +08:00
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import re
|
|
import logging
|
|
|
|
from module.network import RequestContent
|
|
from module.parser import TitleParser
|
|
from module.models import BangumiData, Config
|
|
from module.database import DataOperator
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class RSSAnalyser:
|
|
def __init__(self, settings: Config):
|
|
self._title_analyser = TitleParser()
|
|
self.settings = settings
|
|
|
|
def rss_to_datas(self, rss_link: str) -> list[BangumiData]:
|
|
with RequestContent() as req:
|
|
rss_torrents = req.get_torrents(rss_link)
|
|
title_list = [torrent.name for torrent in rss_torrents]
|
|
data_list = []
|
|
with DataOperator() as op:
|
|
add_title_list = op.not_exist_titles(title_list)
|
|
_id = op.gen_id()
|
|
for raw_title in add_title_list:
|
|
data = self._title_analyser.raw_parser(
|
|
raw=raw_title, _id=_id, settings=self.settings
|
|
)
|
|
if data is not None and op.match_title(data.official_title) is None:
|
|
data_list.append(data)
|
|
_id += 1
|
|
op.insert_list(data_list)
|
|
return data_list
|
|
|
|
def rss_to_data(self, url, _filter: bool = True) -> BangumiData:
|
|
with RequestContent() as req:
|
|
rss_torrents = req.get_torrents(url, _filter)
|
|
for torrent in rss_torrents:
|
|
try:
|
|
data = self._title_analyser.raw_parser(
|
|
torrent.name, settings=self.settings
|
|
)
|
|
return data
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
|
|
def run(self, rss_link: str):
|
|
logger.info("Start collecting RSS info.")
|
|
try:
|
|
return self.rss_to_datas(rss_link)
|
|
except Exception as e:
|
|
logger.debug(e)
|