add storage

This commit is contained in:
jxxghp
2024-06-30 08:59:12 +08:00
parent 77632880d1
commit 63ca5ee313
24 changed files with 367 additions and 194 deletions

View File

@@ -14,8 +14,6 @@ from app.log import logger
from app.utils.http import RequestUtils
from app.utils.site import SiteUtils
SITE_BASE_ORDER = 1000
# 站点框架
class SiteSchema(Enum):
@@ -39,8 +37,6 @@ class SiteSchema(Enum):
class SiteParserBase(metaclass=ABCMeta):
# 站点模版
schema = SiteSchema.NexusPhp
# 站点解析时判断顺序,值越小越先解析
order = SITE_BASE_ORDER
# 请求模式 cookie/apikey
request_mode = "cookie"
@@ -155,15 +151,6 @@ class SiteParserBase(metaclass=ABCMeta):
"""
return self.schema
@classmethod
def match(cls, html_text: str) -> bool:
"""
是否匹配当前解析模型
:param html_text: 站点首页html
:return: 是否匹配
"""
pass
def parse(self):
"""
解析站点信息

View File

@@ -4,21 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class DiscuzUserInfo(SiteParserBase):
schema = SiteSchema.DiscuzX
order = SITE_BASE_ORDER + 10
@classmethod
def match(cls, html_text: str) -> bool:
html = etree.HTML(html_text)
if not html:
return False
printable_text = html.xpath("string(.)") if html else ""
return 'Powered by Discuz!' in printable_text
def _parse_user_base_info(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -4,22 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class FileListSiteUserInfo(SiteParserBase):
schema = SiteSchema.FileList
order = SITE_BASE_ORDER + 50
@classmethod
def match(cls, html_text: str) -> bool:
html = etree.HTML(html_text)
if not html:
return False
printable_text = html.xpath("string(.)") if html else ""
return 'Powered by FileList' in printable_text
def _parse_site_page(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -4,23 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class GazelleSiteUserInfo(SiteParserBase):
schema = SiteSchema.Gazelle
order = SITE_BASE_ORDER
@classmethod
def match(cls, html_text: str) -> bool:
html = etree.HTML(html_text)
if not html:
return False
printable_text = html.xpath("string(.)") if html else ""
return "Powered by Gazelle" in printable_text or "DIC Music" in printable_text
def _parse_user_base_info(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -4,17 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class IptSiteUserInfo(SiteParserBase):
schema = SiteSchema.Ipt
order = SITE_BASE_ORDER + 35
@classmethod
def match(cls, html_text: str) -> bool:
return 'IPTorrents' in html_text
def _parse_user_base_info(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -3,16 +3,13 @@ import json
from typing import Optional, Tuple
from urllib.parse import urljoin
from lxml import etree
from app.log import logger
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class MTorrentSiteUserInfo(SiteParserBase):
schema = SiteSchema.MTorrent
order = SITE_BASE_ORDER + 60
request_mode = "apikey"
# 用户级别字典
@@ -37,15 +34,6 @@ class MTorrentSiteUserInfo(SiteParserBase):
"18": "Bet memberStaff",
}
@classmethod
def match(cls, html_text: str) -> bool:
html = etree.HTML(html_text)
if not html:
return False
if html.xpath("//title/text()") and "M-Team" in html.xpath("//title/text()")[0]:
return True
return False
def _parse_site_page(self, html_text: str):
"""
获取站点页面地址

View File

@@ -1,17 +1,12 @@
# -*- coding: utf-8 -*-
from urllib.parse import urljoin
from app.modules.indexer.parser import SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteSchema
from app.modules.indexer.parser.nexus_php import NexusPhpSiteUserInfo
class NexusAudiencesSiteUserInfo(NexusPhpSiteUserInfo):
schema = SiteSchema.NexusAudiences
order = SITE_BASE_ORDER + 5
@classmethod
def match(cls, html_text: str) -> bool:
return 'audiences.me' in html_text
def _parse_site_page(self, html_text: str):
super()._parse_site_page(html_text)

View File

@@ -3,18 +3,13 @@ import re
from lxml import etree
from app.modules.indexer.parser import SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteSchema
from app.modules.indexer.parser.nexus_php import NexusPhpSiteUserInfo
from app.utils.string import StringUtils
class NexusHhanclubSiteUserInfo(NexusPhpSiteUserInfo):
schema = SiteSchema.NexusHhanclub
order = SITE_BASE_ORDER + 20
@classmethod
def match(cls, html_text: str) -> bool:
return 'hhanclub.top' in html_text
def _parse_user_traffic_info(self, html_text):
super()._parse_user_traffic_info(html_text)

View File

@@ -5,22 +5,12 @@ from typing import Optional
from lxml import etree
from app.log import logger
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class NexusPhpSiteUserInfo(SiteParserBase):
schema = SiteSchema.NexusPhp
order = SITE_BASE_ORDER * 2
@classmethod
def match(cls, html_text: str) -> bool:
"""
默认使用NexusPhp解析
:param html_text:
:return:
"""
return True
def _parse_site_page(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -1,17 +1,12 @@
# -*- coding: utf-8 -*-
import re
from app.modules.indexer.parser import SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteSchema
from app.modules.indexer.parser.nexus_php import NexusPhpSiteUserInfo
class NexusProjectSiteUserInfo(NexusPhpSiteUserInfo):
schema = SiteSchema.NexusProject
order = SITE_BASE_ORDER + 25
@classmethod
def match(cls, html_text: str) -> bool:
return 'Nexus Project' in html_text
def _parse_site_page(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -2,25 +2,13 @@
import json
from typing import Optional
from lxml import etree
from app.log import logger
from app.modules.indexer.parser import SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteSchema
from app.modules.indexer.parser.nexus_php import NexusPhpSiteUserInfo
class NexusRabbitSiteUserInfo(NexusPhpSiteUserInfo):
schema = SiteSchema.NexusRabbit
order = SITE_BASE_ORDER + 5
@classmethod
def match(cls, html_text: str) -> bool:
html = etree.HTML(html_text)
if not html:
return False
printable_text = html.xpath("string(.)") if html else ""
return 'Style by Rabbit' in printable_text
def _parse_site_page(self, html_text: str):
super()._parse_site_page(html_text)

View File

@@ -4,17 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class SmallHorseSiteUserInfo(SiteParserBase):
schema = SiteSchema.SmallHorse
order = SITE_BASE_ORDER + 30
@classmethod
def match(cls, html_text: str) -> bool:
return 'Small Horse' in html_text
def _parse_site_page(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -3,17 +3,12 @@ import json
import re
from typing import Optional
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class TNodeSiteUserInfo(SiteParserBase):
schema = SiteSchema.TNode
order = SITE_BASE_ORDER + 60
@classmethod
def match(cls, html_text: str) -> bool:
return 'Powered By TNode' in html_text
def _parse_site_page(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -4,17 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class TorrentLeechSiteUserInfo(SiteParserBase):
schema = SiteSchema.TorrentLeech
order = SITE_BASE_ORDER + 40
@classmethod
def match(cls, html_text: str) -> bool:
return 'TorrentLeech' in html_text
def _parse_site_page(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -4,17 +4,12 @@ from typing import Optional
from lxml import etree
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class Unit3dSiteUserInfo(SiteParserBase):
schema = SiteSchema.Unit3d
order = SITE_BASE_ORDER + 15
@classmethod
def match(cls, html_text: str) -> bool:
return "unit3d.js" in html_text
def _parse_user_base_info(self, html_text: str):
html_text = self._prepare_html_text(html_text)

View File

@@ -2,17 +2,12 @@
import json
from typing import Optional, Tuple
from app.modules.indexer.parser import SiteParserBase, SiteSchema, SITE_BASE_ORDER
from app.modules.indexer.parser import SiteParserBase, SiteSchema
from app.utils.string import StringUtils
class TYemaSiteUserInfo(SiteParserBase):
schema = SiteSchema.Yema
order = SITE_BASE_ORDER + 60
@classmethod
def match(cls, html_text: str) -> bool:
return '<title>YemaPT</title>' in html_text
def _parse_site_page(self, html_text: str):
"""