fix: bugs, add disable rss api.

This commit is contained in:
EstrellaXD
2023-08-29 19:28:44 +08:00
parent 4a509deb16
commit 7ccee98e2e
13 changed files with 105 additions and 55 deletions

View File

@@ -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,
}

View File

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

View File

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

View File

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

View File

@@ -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}")

View File

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

View File

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