mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-24 10:31:09 +08:00
优化数据库操作
This commit is contained in:
@@ -114,16 +114,18 @@ class DataOperator(DataConnector):
|
||||
"""
|
||||
UPDATE bangumi SET
|
||||
official_title = :official_title,
|
||||
year = :year,
|
||||
title_raw = :title_raw,
|
||||
season = :season,
|
||||
season_raw = :season_raw,
|
||||
subtitle = :subtitle,
|
||||
group_name = :group,
|
||||
source = :source,
|
||||
dpi = :dpi,
|
||||
source = :source,
|
||||
subtitle = :subtitle,
|
||||
eps_collect = :eps_collect,
|
||||
offset = :offset,
|
||||
filter = :filter
|
||||
filter = :filter,
|
||||
rss_link = :rss_link
|
||||
WHERE id = :id
|
||||
""",
|
||||
db_data,
|
||||
@@ -172,22 +174,48 @@ class DataOperator(DataConnector):
|
||||
dict_data = dict(zip(keys, values))
|
||||
return self.db_to_data(dict_data)
|
||||
|
||||
def match_title(self, title: str) -> bool:
|
||||
# Select all title_raw
|
||||
def match_official_title(self, title: str) -> bool:
|
||||
self._cursor.execute(
|
||||
"""
|
||||
SELECT official_title FROM bangumi
|
||||
SELECT official_title FROM bangumi
|
||||
WHERE official_title = :official_title
|
||||
""",
|
||||
{"official_title": title},
|
||||
)
|
||||
return self._cursor.fetchone() is not None
|
||||
|
||||
def match_title_raw(self, title: str, rss_link: str) -> bool:
|
||||
self._cursor.execute(
|
||||
"""
|
||||
SELECT title_raw, rss_link FROM bangumi
|
||||
WHERE INSTR (:title_raw, title_raw) > 0 AND INSTR (:rss_link, rss_link) > 0
|
||||
""",
|
||||
{"title_raw": title, "rss_link": rss_link},
|
||||
)
|
||||
return self._cursor.fetchone() is not None
|
||||
|
||||
def match_list(self, title_dict: dict) -> dict:
|
||||
# Match title_raw in database
|
||||
self._cursor.execute(
|
||||
"""
|
||||
SELECT title_raw, rss_link FROM bangumi
|
||||
"""
|
||||
)
|
||||
db_titles = [x[0] for x in self._cursor.fetchall()]
|
||||
data = self._cursor.fetchall()
|
||||
if not data:
|
||||
return {}
|
||||
# Match title
|
||||
for db_title in db_titles:
|
||||
if title == db_title:
|
||||
return True
|
||||
return False
|
||||
for title, rss_link in title_dict.items():
|
||||
for title_raw, rss_set in data:
|
||||
if rss_link in rss_set and title_raw in title:
|
||||
del title_dict[title]
|
||||
elif rss_link not in rss_set and title_raw in title:
|
||||
# TODO: Logic problem
|
||||
break
|
||||
return title_dict
|
||||
|
||||
def not_exist_titles(self, titles: list[str], rss_link) -> list[str]:
|
||||
# Select all title_raw
|
||||
# Select all title in titles that title_raw in database not in title
|
||||
self._cursor.execute(
|
||||
"""
|
||||
SELECT title_raw, rss_link FROM bangumi
|
||||
@@ -208,11 +236,11 @@ class DataOperator(DataConnector):
|
||||
self.update_rss(title_raw, rss_set)
|
||||
return titles
|
||||
|
||||
def get_uncompleted(self) -> list[BangumiData] | None:
|
||||
def get_to_complete(self) -> list[BangumiData] | None:
|
||||
# Find eps_complete = False
|
||||
self._cursor.execute(
|
||||
"""
|
||||
SELECT * FROM bangumi WHERE eps_collect == 1
|
||||
SELECT * FROM bangumi WHERE eps_collect = 1
|
||||
"""
|
||||
)
|
||||
values = self._cursor.fetchall()
|
||||
@@ -233,3 +261,11 @@ class DataOperator(DataConnector):
|
||||
return 1
|
||||
return data[0] + 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
with DataOperator() as op:
|
||||
datas = op.get_to_complete()
|
||||
_id = op.gen_id()
|
||||
for data in datas:
|
||||
print(data)
|
||||
print(_id)
|
||||
@@ -18,10 +18,10 @@ class RSSAnalyser(DownloadClient):
|
||||
def rss_to_datas(self, rss_link: str):
|
||||
with RequestContent() as req:
|
||||
rss_torrents = req.get_torrents(rss_link)
|
||||
title_list = [torrent.name for torrent in rss_torrents]
|
||||
title_dict = {torrent.name: rss_link for torrent in rss_torrents}
|
||||
with DataOperator() as op:
|
||||
add_title_list = op.not_exist_titles(title_list, rss_link)
|
||||
if not add_title_list:
|
||||
update_dict = op.match_list(title_dict)
|
||||
if not update_dict:
|
||||
logger.debug("No new title found.")
|
||||
return
|
||||
_id = op.gen_id()
|
||||
@@ -29,7 +29,7 @@ class RSSAnalyser(DownloadClient):
|
||||
data = self._title_analyser.raw_parser(
|
||||
raw=raw_title, _id=_id, settings=self.settings, rss_link=rss_link
|
||||
)
|
||||
if data is not None and not op.match_title(data.official_title):
|
||||
if data is not None:
|
||||
op.insert(data)
|
||||
self.set_rule(data, rss_link)
|
||||
_id += 1
|
||||
|
||||
Reference in New Issue
Block a user