modify scripts

This commit is contained in:
oscarz
2025-04-25 22:07:46 +08:00
parent 40b5d3f99a
commit c538e0c715
2 changed files with 233 additions and 122 deletions

View File

@ -64,7 +64,7 @@ def insert_actor_index(name, href, from_actor_list=None, from_movie_list=None):
logging.error(f"未知错误: {e}")
return None
def insert_movie_index(title, href, from_actor_list=None, from_movie_makers=None, from_movie_series=None, maker_id=None, series_id=None, from_movie_publishers=None, pub_id=None):
def insert_movie_index_old(title, href, from_actor_list=None, from_movie_makers=None, from_movie_series=None, maker_id=None, series_id=None, from_movie_publishers=None, pub_id=None):
try:
# **先检查数据库中是否已有该电影**
cursor.execute("SELECT id, from_actor_list, from_movie_makers, from_movie_series, maker_id, series_id, from_movie_publishers, pub_id FROM javdb_movies WHERE href = ?", (href,))
@ -114,6 +114,59 @@ def insert_movie_index(title, href, from_actor_list=None, from_movie_makers=None
logging.error(f"Error inserting/updating movie: {e}")
return None
def insert_movie_index(title, href, **kwargs):
try:
# 先检查数据库中是否已有该电影
cursor.execute("SELECT * FROM javdb_movies WHERE href = ?", (href,))
existing_movie = cursor.fetchone()
# 获取列名
column_names = [description[0] for description in cursor.description]
fields = [
'from_actor_list', 'from_movie_makers', 'from_movie_series', 'from_movie_publishers',
'maker_id', 'series_id', 'pub_id', 'uncensored'
]
if existing_movie: # 如果电影已存在
existing_values = dict(zip(column_names, existing_movie))
movie_id = existing_values['id']
logging.debug(f"values in db: {existing_values}")
# 如果没有传入值,就用原来的值
for field in fields:
kwargs[field] = kwargs.get(field) if kwargs.get(field) is not None else existing_values[field]
set_clauses = ", ".join([f"{field} = ?" for field in fields])
sql = f"""
UPDATE javdb_movies
SET title = ?, {set_clauses}, updated_at = datetime('now', 'localtime')
WHERE href = ?
"""
values = [title] + [kwargs[field] for field in fields] + [href]
logging.debug(f"sql: {sql}, values: {values}")
cursor.execute(sql, values)
else: # 如果电影不存在,插入
columns = ', '.join(['title', 'href'] + fields)
placeholders = ', '.join(['?'] * (len(fields) + 2))
sql = f"INSERT INTO javdb_movies ({columns}) VALUES ({placeholders})"
values = [title, href] + [kwargs.get(field, 0) for field in fields]
logging.debug(f"sql: {sql}, values: {values}")
cursor.execute(sql, values)
conn.commit()
movie_id = get_id_by_href('javdb_movies', href)
if movie_id:
logging.debug(f'Inserted/Updated movie index, id: {movie_id}, title: {title}, href: {href}')
return movie_id
except Exception as e:
conn.rollback()
logging.error(f"Error inserting/updating movie: {e}")
return None
# 插入演员和电影的关联数据
def insert_actor_movie(performer_id, movie_id, tags=''):
@ -145,10 +198,11 @@ def insert_or_update_actor(actor):
ON CONFLICT(href) DO UPDATE SET name=excluded.name, pic=excluded.pic, is_full_data=1, updated_at=datetime('now', 'localtime')
''', (actor['name'], actor['href'], actor['pic']))
cursor.execute('SELECT id FROM javdb_actors WHERE href = ?', (actor['href'],))
conn.commit()
actor_id = get_id_by_href('javdb_actors', actor['href'])
# 查询刚插入的数据
cursor.execute('SELECT id, from_actor_list FROM javdb_actors WHERE href = ?', (actor['href'],))
actor_id, uncensored = cursor.fetchone()
if actor_id is None:
logging.warning(f'insert data error. name: {actor['name']}, href: {actor['href']}')
return None
@ -166,10 +220,10 @@ def insert_or_update_actor(actor):
# 插入影片列表
for movie in actor.get("credits") or []:
movie_id = get_id_by_href('javdb_movies', movie['href'])
# 影片不存在,先插入
if movie_id is None:
# TODO: from_actor_list 只标记无码女优的话,这里要修改,暂时不动
# from_actor_list = 1 表示无码影星的,其他不处理
if uncensored and uncensored > 0:
movie_id = insert_movie_index(movie['title'], movie['href'], from_actor_list=1, uncensored=uncensored)
else:
movie_id = insert_movie_index(movie['title'], movie['href'], from_actor_list=1)
if movie_id:
tmp_id = insert_actor_movie(actor_id, movie_id)
@ -227,47 +281,40 @@ def query_actors(**filters):
sql = "SELECT href, name FROM javdb_actors WHERE 1=1"
params = []
if "id" in filters:
sql += " AND id = ?"
params.append(filters["id"])
if "href" in filters:
sql += " AND href = ?"
params.append(filters["href"])
if "name" in filters:
sql += " AND name LIKE ?"
params.append(f"%{filters['name']}%")
if "is_full_data" in filters:
sql += " AND is_full_data = ?"
params.append(filters["is_full_data"])
if "from_actor_list" in filters:
sql += " AND from_actor_list = ?"
params.append(filters["from_actor_list"])
if "is_full_data_in" in filters:
values = filters["is_full_data_in"]
if values:
placeholders = ", ".join(["?"] * len(values))
sql += f" AND is_full_data IN ({placeholders})"
params.extend(values)
if "is_full_data_not_in" in filters:
values = filters["is_full_data_not_in"]
if values:
placeholders = ", ".join(["?"] * len(values))
sql += f" AND is_full_data NOT IN ({placeholders})"
params.extend(values)
if "before_updated_at" in filters:
sql += " AND updated_at <= ?"
params.append(filters["before_updated_at"])
if "after_updated_at" in filters:
sql += " AND updated_at >= ?"
params.append(filters["after_updated_at"])
if "start_id" in filters:
sql += " AND id > ?"
params.append(filters["start_id"])
conditions = {
"id": " AND id = ?",
"href": " AND href = ?",
"name": " AND name LIKE ?",
"is_full_data": " AND is_full_data = ?",
"from_actor_list": " AND from_actor_list = ?",
"before_updated_at": " AND updated_at <= ?",
"after_updated_at": " AND updated_at >= ?",
"start_id": " AND id > ?",
}
for key, condition in conditions.items():
if key in filters:
sql += condition
if key == "name":
params.append(f"%{filters[key]}%")
else:
params.append(filters[key])
for key in ["is_full_data_in", "is_full_data_not_in"]:
if key in filters:
values = filters[key]
if values:
placeholders = ", ".join(["?"] * len(values))
operator = "IN" if key == "is_full_data_in" else "NOT IN"
sql += f" AND is_full_data {operator} ({placeholders})"
params.extend(values)
if "order_by" in filters:
sql += " order by ? asc"
params.append(filters["order_by"])
# 注意:这里 order by 后面直接跟字段名,不能用占位符,否则会被当作字符串处理
sql += f" ORDER BY {filters['order_by']} "
if 'limit' in filters:
sql += " limit ?"
sql += " LIMIT ?"
params.append(filters["limit"])
cursor.execute(sql, params)
@ -353,7 +400,7 @@ def query_maker(identifier):
# 按条件查询 href 列表
def query_maker_hrefs(**filters):
try:
sql = "SELECT href, id FROM javdb_makers WHERE 1=1"
sql = "SELECT href, id, from_list FROM javdb_makers WHERE 1=1"
params = []
if "id" in filters:
@ -368,10 +415,13 @@ def query_maker_hrefs(**filters):
if "name" in filters:
sql += " AND name LIKE ?"
params.append(f"%{filters['name']}%")
if 'limit' in filters:
sql += " limit ?"
params.append(filters["limit"])
cursor.execute(sql, params)
#return [row[0] for row in cursor.fetchall()] # 链接使用小写
return [{'href': row[0], 'id': row[1]} for row in cursor.fetchall()]
return [{'href': row[0], 'id': row[1], 'from_list':row[2]} for row in cursor.fetchall()]
except sqlite3.Error as e:
logging.error(f"查询 href 失败: {e}")
@ -451,7 +501,7 @@ def query_series(identifier):
# 按条件查询 href 列表
def query_series_hrefs(**filters):
try:
sql = "SELECT href, id FROM javdb_series WHERE 1=1"
sql = "SELECT href, id, from_list FROM javdb_series WHERE 1=1"
params = []
if "id" in filters:
@ -466,10 +516,14 @@ def query_series_hrefs(**filters):
if "name" in filters:
sql += " AND name LIKE ?"
params.append(f"%{filters['name']}%")
if 'limit' in filters:
sql += " limit ?"
params.append(filters["limit"])
cursor.execute(sql, params)
#return [row[0] for row in cursor.fetchall()] # 链接使用小写
return [{'href': row[0], 'id': row[1]} for row in cursor.fetchall()]
#return [{'href': row[0], 'id': row[1]} for row in cursor.fetchall()]
return [{'href': row[0], 'id': row[1], 'from_list':row[2]} for row in cursor.fetchall()]
except sqlite3.Error as e:
logging.error(f"查询 href 失败: {e}")
@ -795,7 +849,7 @@ def query_movies(identifier):
return None
# 按条件查询 href 列表
def query_movie_hrefs(**filters):
def query_movie_hrefs_old(**filters):
try:
sql = "SELECT href, title, id FROM javdb_movies WHERE 1=1"
params = []
@ -850,7 +904,58 @@ def query_movie_hrefs(**filters):
except sqlite3.Error as e:
logging.error(f"查询 href 失败: {e}")
return []
# 查询
def query_movie_hrefs(**filters):
try:
sql = "SELECT href, name FROM javdb_movies WHERE 1=1"
params = []
conditions = {
"id": " AND id = ?",
"href": " AND href = ?",
"title": " AND title LIKE ?",
"is_full_data": " AND is_full_data = ?",
"uncensored": " AND uncensored = ?",
"from_actor_list": " AND from_actor_list = ?",
"before_updated_at": " AND updated_at <= ?",
"after_updated_at": " AND updated_at >= ?",
"start_id": " AND id > ?",
}
for key, condition in conditions.items():
if key in filters:
sql += condition
if key == "title":
params.append(f"%{filters[key]}%")
else:
params.append(filters[key])
for key in ["is_full_data_in", "is_full_data_not_in"]:
if key in filters:
values = filters[key]
if values:
placeholders = ", ".join(["?"] * len(values))
operator = "IN" if key == "is_full_data_in" else "NOT IN"
sql += f" AND is_full_data {operator} ({placeholders})"
params.extend(values)
if "order_by" in filters:
# 注意:这里 order by 后面直接跟字段名,不能用占位符,否则会被当作字符串处理
sql += f" ORDER BY {filters['order_by']} "
if 'limit' in filters:
sql += " LIMIT ?"
params.append(filters["limit"])
cursor.execute(sql, params)
#return [row[0].lower() for row in cursor.fetchall()] # 返回小写
return [{'href': row[0], 'name': row[1]} for row in cursor.fetchall()]
except sqlite3.Error as e:
logging.error(f"查询 href 失败: {e}")
return None
# 插入一条任务日志
def insert_task_log():
try: