diff --git a/README.md b/README.md index 8bf83af..d42ec75 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,8 @@ rssbotLib=rssbot.dll 可选参数。被封禁的用户/chat ID。被封禁的用户/chat无法与bot交互。可以使用`,`分隔两个不同的ID。 ### downloadTimeOut 可选参数。下载文件时超时时间。单位s。默认为10s。 +### RSSTimeout +可选参数。抓取RSS超时时间。单位s。默认为15s。 ## 命令行参数 ```text --rebuild-hashlist 重建hashList diff --git a/readset.py b/readset.py index fdbb4f4..7363935 100644 --- a/readset.py +++ b/readset.py @@ -59,6 +59,7 @@ class settings: self._miraiApiHTTPVer = d['miraiApiHTTPVer'] if 'miraiApiHTTPVer' in d and d['miraiApiHTTPVer'] != '' else None self._blackList = d['blackList'] if 'blackList' in d and d['blackList'] != '' else None self._downloadTimeOut = int(d['downloadTimeOut']) if 'downloadTimeOut' in d and d['downloadTimeOut'].isnumeric() else 10 + self._RSSTimeout = int(d['RSSTimeout']) if 'RSSTimeout' in d and d['RSSTimeout'].isnumeric() else 15 @property def token(self) -> str: @@ -124,6 +125,10 @@ class settings: def downloadTimeOut(self) -> int: return self._downloadTimeOut + @property + def RSSTimeout(self) -> int: + return self._RSSTimeout + class commandline: def __init__(self, commandline: List[str] = None): diff --git a/rssbot.py b/rssbot.py index c160676..b9bb564 100644 --- a/rssbot.py +++ b/rssbot.py @@ -1210,7 +1210,7 @@ class messageHandle(Thread): checked = False try: p = RSSParser() - p.parse(self._uri) + p.parse(self._uri, self._main._setting.RSSTimeout) checked = p.check() except: pass diff --git a/rsschecker.py b/rsschecker.py index bedc12e..a245ba9 100644 --- a/rsschecker.py +++ b/rsschecker.py @@ -27,7 +27,7 @@ class RSSCheckerThread(Thread): if self.__needUpdate(rss) or self._main._commandLine.rebuildHashlist: try: p = RSSParser() - p.parse(rss.url) + p.parse(rss.url, self._main._setting.RSSTimeout) updateTime = int(time()) if p.check(): meta = p.m diff --git a/rssparser.py b/rssparser.py index 3f58e27..ceaeb54 100644 --- a/rssparser.py +++ b/rssparser.py @@ -385,11 +385,11 @@ class RSSParser: self.removeblank(self.xmldoc.documentElement) self.xmldoc.normalize() - def parse(self, fn: str): + def parse(self, fn: str, timeout: int = 15): try: if fn.find('://') > -1: header = {"Accept-Encoding": "gzip, deflate"} - re = requests.get(fn, headers=header) + re = requests.get(fn, headers=header, timeout=timeout) re.encoding = 'utf8' if re.status_code == 200: self.xmldoc = parseString(re.text) @@ -398,6 +398,7 @@ class RSSParser: self.normalize() return True except: + print(f"URI: {fn}\n{format_exc()}") return False def removeblank(self, node):