mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-07-17 12:11:14 +08:00
fix: bugs, add disable rss api.
This commit is contained in:
@@ -80,11 +80,13 @@ async def program_status(current_user=Depends(get_current_user)):
|
||||
return {
|
||||
"status": False,
|
||||
"version": VERSION,
|
||||
"first_run": program.first_run,
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"status": True,
|
||||
"version": VERSION,
|
||||
"first_run": program.first_run,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -47,6 +47,23 @@ async def delete_rss(rss_id: int, current_user=Depends(get_current_user)):
|
||||
)
|
||||
|
||||
|
||||
@router.patch(path="/disable/{rss_id}", response_model=APIResponse)
|
||||
async def disable_rss(rss_id: int, current_user=Depends(get_current_user)):
|
||||
if not current_user:
|
||||
raise UNAUTHORIZED
|
||||
with RSSEngine() as engine:
|
||||
if engine.rss.disable(rss_id):
|
||||
return JSONResponse(
|
||||
status_code=200,
|
||||
content={"msg_en": "Disable RSS successfully.", "msg_zh": "禁用 RSS 成功。"},
|
||||
)
|
||||
else:
|
||||
return JSONResponse(
|
||||
status_code=406,
|
||||
content={"msg_en": "Disable RSS failed.", "msg_zh": "禁用 RSS 失败。"},
|
||||
)
|
||||
|
||||
|
||||
@router.patch(path="/update/{rss_id}", response_model=APIResponse)
|
||||
async def update_rss(
|
||||
rss_id: int, data: RSSUpdate, current_user=Depends(get_current_user)
|
||||
|
||||
@@ -44,6 +44,18 @@ class RSSDatabase:
|
||||
self.session.refresh(db_data)
|
||||
return True
|
||||
|
||||
def disable(self, _id: int):
|
||||
statement = select(RSSItem).where(RSSItem.id == _id)
|
||||
db_data = self.session.exec(statement).first()
|
||||
if not db_data:
|
||||
return False
|
||||
db_data.enabled = False
|
||||
self.session.add(db_data)
|
||||
self.session.commit()
|
||||
self.session.refresh(db_data)
|
||||
return True
|
||||
|
||||
|
||||
def search_id(self, _id: int) -> RSSItem:
|
||||
return self.session.get(RSSItem, _id)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Program(BaseModel):
|
||||
rss_time: int = Field(7200, description="Sleep time")
|
||||
rss_time: int = Field(900, description="Sleep time")
|
||||
rename_time: int = Field(60, description="Rename times in one loop")
|
||||
webui_port: int = Field(7892, description="WebUI port")
|
||||
|
||||
@@ -29,7 +29,6 @@ class Downloader(BaseModel):
|
||||
|
||||
class RSSParser(BaseModel):
|
||||
enable: bool = Field(True, description="Enable RSS parser")
|
||||
type: str = Field("mikan", description="RSS parser type")
|
||||
filter: list[str] = Field(["720", r"\d+-\d"], description="Filter")
|
||||
language: str = "zh"
|
||||
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
import re
|
||||
import logging
|
||||
import xml.etree.ElementTree
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
from module.conf import settings
|
||||
from module.models import Torrent
|
||||
|
||||
from .request_url import RequestURL
|
||||
from .site import mikan_parser
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RequestContent(RequestURL):
|
||||
def get_torrents(
|
||||
@@ -58,5 +59,8 @@ class RequestContent(RequestURL):
|
||||
return self.check_url(_url)
|
||||
|
||||
def get_rss_title(self, _url):
|
||||
soup = self.get_xml(_url)
|
||||
return soup.find("./channel/title").text
|
||||
try:
|
||||
soup = self.get_xml(_url)
|
||||
return soup.find("./channel/title").text
|
||||
except ConnectionError:
|
||||
logger.warning(f"Failed to get RSS title: {_url}")
|
||||
|
||||
@@ -48,7 +48,7 @@ class RSSAnalyser(TitleParser):
|
||||
if not full_parse:
|
||||
return [bangumi]
|
||||
new_data.append(bangumi)
|
||||
logger.debug(f"[RSS] New title found: {bangumi.official_title}")
|
||||
logger.info(f"[RSS] New bangumi founded: {bangumi.official_title}")
|
||||
return new_data
|
||||
|
||||
def torrent_to_data(self, torrent: Torrent, rss: RSSItem) -> Bangumi:
|
||||
|
||||
@@ -36,6 +36,13 @@ class RSSEngine(Database):
|
||||
if not name:
|
||||
with RequestContent() as req:
|
||||
name = req.get_rss_title(rss_link)
|
||||
if not name:
|
||||
return ResponseModel(
|
||||
status=False,
|
||||
status_code=406,
|
||||
msg_en="Failed to get RSS title.",
|
||||
msg_zh="无法获取 RSS 标题。",
|
||||
)
|
||||
rss_data = RSSItem(name=name, url=rss_link, aggregate=aggregate)
|
||||
if self.rss.add(rss_data):
|
||||
return ResponseModel(
|
||||
|
||||
Reference in New Issue
Block a user