diff --git a/pt.json b/pt.json
index 4c37a36..33c2aee 100644
--- a/pt.json
+++ b/pt.json
@@ -4823,10 +4823,10 @@
"pk": 70,
"fields": {
"created_at": "2022-07-17T10:24:59.754",
- "updated_at": "2022-12-25T21:43:37.324",
+ "updated_at": "2022-12-26T21:22:48.257",
"url": "https://pt.btschool.club/",
"name": "BT学校",
- "logo": "https://pt.btschool.club/favicon.ico",
+ "logo": "https://gitee.com/ngfchl/ptools/raw/master/static/logo/btschool.ico",
"tracker": "btschool.club",
"sign_in_support": true,
"get_torrent_support": true,
@@ -6714,6 +6714,85 @@
"hash_rule": "//td/b[contains(text(),\"Hash\")]/following::text()[1]"
}
},
+{
+ "model": "pt_site.site",
+ "pk": 99,
+ "fields": {
+ "created_at": "2022-12-26T19:45:08.010",
+ "updated_at": "2022-12-26T21:23:16.550",
+ "url": "https://zhuque.in/",
+ "name": "朱雀",
+ "logo": "https://gitee.com/ngfchl/ptools/raw/master/static/logo/zhuque.png",
+ "tracker": "tracker.zhuque.in",
+ "sign_in_support": false,
+ "get_torrent_support": true,
+ "get_userinfo_support": true,
+ "search_support": false,
+ "page_default": "torrents.php",
+ "page_sign_in": "attendance.php",
+ "page_control_panel": "user/setting",
+ "page_detail": "details.php?id={}",
+ "page_download": "download.php?id={}",
+ "page_user": "api/user/getInfo?id={}",
+ "page_search": "torrents.php?search={}",
+ "page_leeching": "getusertorrentlistajax.php?userid={}&type=leeching",
+ "page_uploaded": "getusertorrentlistajax.php?userid={}&type=uploaded",
+ "page_seeding": "getusertorrentlistajax.php?userid={}&type=seeding",
+ "page_completed": "getusertorrentlistajax.php?userid={}&type=completed",
+ "page_mybonus": "api/user/getBonusCalc",
+ "page_viewfilelist": "viewfilelist.php?id={}",
+ "page_viewpeerlist": "viewpeerlist.php?id={}",
+ "sign_in_method": "get",
+ "sign_in_captcha": false,
+ "sign_in_params": "{}",
+ "sign_in_headers": "{}",
+ "hr": false,
+ "hr_rate": 2,
+ "hr_time": 10,
+ "sp_full": 100.0,
+ "limit_speed": 100,
+ "torrents_rule": "//table[@class=\"torrents\"]/tr",
+ "name_rule": ".//td[@class=\"embedded\"]/a/b/text()",
+ "title_rule": ".//a[contains(@href,\"detail\")]/parent::td/text()[last()]",
+ "detail_url_rule": ".//td[@class=\"embedded\"]/a[contains(@href,\"detail\")]/@href",
+ "category_rule": ".//td[@class=\"rowfollow nowrap\"][1]/a[1]/img/@title",
+ "poster_rule": ".//table/tr/td[1]/img/@src",
+ "magnet_url_rule": ".//td/a[contains(@href,\"download.php?id=\")]/@href",
+ "download_url_rule": ".//a[contains(@href,\"download.php?id=\") and contains(@href,\"passkey\")]/@href",
+ "size_rule": ".//td[5]/text()",
+ "hr_rule": ".//table/tr/td/img[@class=\"hitandrun\"]/@title",
+ "sale_rule": ".//img[contains(@class,\"free\")]/@alt",
+ "sale_expire_rule": ".//img[contains(@class,\"free\")]/following-sibling::font/span/@title",
+ "release_rule": ".//td[4]/span/@title",
+ "seeders_rule": ".//a[contains(@href,\"#seeders\")]/text()",
+ "leechers_rule": ".//a[contains(@href,\"#leechers\")]/text()",
+ "completers_rule": ".//a[contains(@href,\"viewsnatches\")]//text()",
+ "viewfilelist_rule": ".//td/text()",
+ "viewpeerlist_rule": ".//tr/td[9]/nobr/text()",
+ "peer_speed_rule": ".//tr/td[7]/nobr/text()",
+ "remark": "",
+ "invitation_rule": "invite",
+ "time_join_rule": "regTime",
+ "latest_active_rule": "//td[contains(text(),\"最近动向\")]/following-sibling::td/span/@title",
+ "uploaded_rule": "upload",
+ "downloaded_rule": "download",
+ "ratio_rule": "ratio",
+ "my_sp_rule": "bonus",
+ "hour_sp_rule": "sp_hour",
+ "my_bonus_rule": "//font[@class=\"color_bonus\" and contains(text(),\"积分\")]/following-sibling::text()[1]",
+ "my_level_rule": "class/name",
+ "my_passkey_rule": "//td[contains(text(),\"密钥\")]/following-sibling::td[1]/text()",
+ "my_uid_rule": "id",
+ "my_hr_rule": "//a[@href=\"myhr.php\"]//text()",
+ "leech_rule": "leeching",
+ "seed_rule": "seeding",
+ "record_count_rule": ".//td[3]/text()",
+ "seed_vol_rule": "seedSize",
+ "mailbox_rule": "mail",
+ "notice_rule": "//a[@href=\"index.php\"]/font[contains(text(),\"条\")]/text()[1]",
+ "hash_rule": "//td/b[contains(text(),\"Hash\")]/following::text()[1]"
+ }
+},
{
"model": "auto_pt.task",
"pk": 1,
diff --git a/pt_site/UtilityTool.py b/pt_site/UtilityTool.py
index 27605c7..3715176 100644
--- a/pt_site/UtilityTool.py
+++ b/pt_site/UtilityTool.py
@@ -1463,9 +1463,7 @@ class PtSpider:
# completed_detail_url = site.url + site.page_completed.lstrip('/').format(my_site.user_id)
# leeching_detail_url = site.url + site.page_leeching.lstrip('/').format(my_site.user_id)
try:
- if site.url in [
- 'https://filelist.io/'
- ]:
+ if site.url in ['https://filelist.io/']:
session = requests.Session()
headers = {
'user-agent': my_site.user_agent
@@ -1505,6 +1503,38 @@ class PtSpider:
headers={
'user-agent': my_site.user_agent
})
+ elif 'zhuque.in' in site.url:
+ csrf_res = self.send_request(my_site=my_site, url=site.url)
+ # ''
+ x_csrf_token = self.parse(csrf_res, '//meta[@name="x-csrf-token"]/@content')
+ logger.info(f'csrf token: {x_csrf_token}')
+ header = {
+ 'x-csrf-token': ''.join(x_csrf_token),
+ 'accept': 'application/json',
+ }
+ user_detail_res = self.send_request(my_site=my_site, url=user_detail_url, header=header)
+ logger.info(f'详情页:{user_detail_res.text}')
+ seeding_res = self.send_request(my_site=my_site, url=site.url + site.page_mybonus, header=header)
+ logger.info(f'做种信息: {seeding_res.text}')
+ mail_res = self.send_request(my_site=my_site, url=site.url + 'api/user/getMainInfo', header=header)
+ logger.info(f'新消息: {mail_res.text}')
+ user_info = user_detail_res.json().get('data')
+ sp_hour = seeding_res.json().get('data').get('H')
+ mail_data = mail_res.json().get('data')
+ mail = mail_data.get('unreadAdmin') + mail_data.get('unreadInbox') + mail_data.get('unreadSystem')
+ user_info.update({
+ 'sp_hour': sp_hour,
+ 'mail': mail
+ })
+ logger.info(f'详情页:{user_info}')
+ # logger.info(f'魔力页面:{seeding_res.json()}')
+ # details_html = user_detail_res.json()
+ # seeding_html = seeding_res.json()
+ return CommonResponse.success(data={
+ 'details_html': user_info,
+ 'seeding_html': '',
+ # 'leeching_html': leeching_html
+ })
else:
user_detail_res = self.send_request(my_site=my_site, url=user_detail_url)
# if leeching_detail_res.status_code != 200:
@@ -1522,7 +1552,6 @@ class PtSpider:
logger.info(f'个人主页:{user_detail_res.content}')
# 解析HTML
# logger.info(user_detail_res.is_redirect)
-
if 'totheglory' in site.url:
# ttg的信息都是直接加载的,不需要再访问其他网页,直接解析就好
details_html = etree.HTML(user_detail_res.content)
@@ -1747,7 +1776,7 @@ class PtSpider:
'seed_vol': seeding_size,
})
if float(ratio) < 1:
- self.send_request(f'{site.name} 分享率 {ratio} 过低,请注意')
+ self.send_text(f'{site.name} 分享率 {ratio} 过低,请注意')
return CommonResponse.success(data=res_gpw)
else:
return CommonResponse.error(data=result)
@@ -1760,6 +1789,46 @@ class PtSpider:
# self.send_text('# ' + message + ' \n')
return CommonResponse.error(msg=message)
pass
+ elif 'zhuque.in' in site.url:
+ try:
+ downloaded = details_html.get(site.downloaded_rule)
+ uploaded = details_html.get(site.uploaded_rule)
+ seeding_size = details_html.get(site.seed_vol_rule)
+ my_sp = details_html.get(site.my_sp_rule)
+ ratio = uploaded / downloaded if downloaded > 0 else 'inf'
+ my_site.time_join = datetime.fromtimestamp(details_html.get(site.time_join_rule))
+ my_site.invitation = details_html.get(site.invitation_rule)
+ my_site.my_level = details_html.get('class').get('name')
+ my_site.seed = details_html.get(site.seed_rule)
+ my_site.leech = details_html.get(site.leech_rule)
+ my_site.mail = details_html.get(site.mailbox_rule)
+ my_site.sp_hour = details_html.get(site.hour_sp_rule)
+ my_site.save()
+ res_gpw = SiteStatus.objects.update_or_create(
+ site=my_site,
+ created_at__date__gte=datetime.today(),
+ defaults={
+ 'ratio': ratio,
+ 'downloaded': downloaded,
+ 'uploaded': uploaded,
+ 'my_sp': my_sp,
+ 'my_bonus': 0,
+ # 做种体积
+ 'seed_vol': seeding_size,
+ })
+ if my_site.mail > 0:
+ self.send_text(f'{site.name} 有{my_site.mail}条新消息,请注意查收!')
+ if float(ratio) < 1:
+ self.send_text(f'{site.name} 分享率 {ratio} 过低,请注意')
+ return CommonResponse.success(data=res_gpw)
+ except Exception as e:
+ # 打印异常详细信息
+ message = '{} 解析个人主页信息:失败!原因:{}'.format(site.name, e)
+ logger.error(message)
+ logger.error(traceback.format_exc(limit=3))
+ # raise
+ # self.send_text('# ' + message + ' \n')
+ return CommonResponse.error(msg=message)
else:
# 获取指定元素
# title = details_html.xpath('//title/text()')
@@ -2135,10 +2204,11 @@ class PtSpider:
res_list = ''.join(res_list).split(',')
res_list.reverse()
logger.info('时魔字符串:{}'.format(res_list))
+ hour_sp = get_decimals(res_list[0].replace(',', ''))
if len(res_list) <= 0:
CommonResponse.error(msg='时魔获取失败!')
return CommonResponse.success(
- data=get_decimals(res_list[0].replace(',', ''))
+ data=hour_sp
)
except Exception as e:
# 打印异常详细信息
diff --git a/pt_site_site.json b/pt_site_site.json
index 0d07ff3..6f2cccb 100644
--- a/pt_site_site.json
+++ b/pt_site_site.json
@@ -4638,10 +4638,10 @@
{
"id": 70,
"created_at": "2022-07-17 10:24:59.754000",
- "updated_at": "2022-12-25 21:43:37.324057",
+ "updated_at": "2022-12-26 21:22:48.257769",
"name": "BT学校",
"url": "https://pt.btschool.club/",
- "logo": "https://pt.btschool.club/favicon.ico",
+ "logo": "https://gitee.com/ngfchl/ptools/raw/master/static/logo/btschool.ico",
"sign_in_support": 1,
"get_torrent_support": 1,
"get_userinfo_support": 1,
@@ -6458,5 +6458,81 @@
"my_uid_rule": "//div[@class=\"header gradient blue\"]//h2/text()[1]",
"page_control_panel": "usercp.php",
"tracker": "pt.post.top"
+ },
+ {
+ "id": 99,
+ "created_at": "2022-12-26 19:45:08.010450",
+ "updated_at": "2022-12-26 21:23:16.550892",
+ "name": "朱雀",
+ "url": "https://zhuque.in/",
+ "logo": "https://gitee.com/ngfchl/ptools/raw/master/static/logo/zhuque.png",
+ "sign_in_support": 0,
+ "get_torrent_support": 1,
+ "get_userinfo_support": 1,
+ "search_support": 0,
+ "page_default": "torrents.php",
+ "page_sign_in": "attendance.php",
+ "page_detail": "details.php?id={}",
+ "page_download": "download.php?id={}",
+ "page_user": "api/user/getInfo?id={}",
+ "page_search": "torrents.php?search={}",
+ "page_leeching": "getusertorrentlistajax.php?userid={}&type=leeching",
+ "page_uploaded": "getusertorrentlistajax.php?userid={}&type=uploaded",
+ "page_seeding": "getusertorrentlistajax.php?userid={}&type=seeding",
+ "page_completed": "getusertorrentlistajax.php?userid={}&type=completed",
+ "page_mybonus": "api/user/getBonusCalc",
+ "page_viewfilelist": "viewfilelist.php?id={}",
+ "page_viewpeerlist": "viewpeerlist.php?id={}",
+ "sign_in_method": "get",
+ "sign_in_captcha": 0,
+ "sign_in_params": "{}",
+ "sign_in_headers": "{}",
+ "hr": 0,
+ "hr_rate": 2,
+ "hr_time": 10,
+ "sp_full": 100,
+ "limit_speed": 100,
+ "torrents_rule": "//table[@class=\"torrents\"]/tr",
+ "name_rule": ".//td[@class=\"embedded\"]/a/b/text()",
+ "title_rule": ".//a[contains(@href,\"detail\")]/parent::td/text()[last()]",
+ "detail_url_rule": ".//td[@class=\"embedded\"]/a[contains(@href,\"detail\")]/@href",
+ "category_rule": ".//td[@class=\"rowfollow nowrap\"][1]/a[1]/img/@title",
+ "poster_rule": ".//table/tr/td[1]/img/@src",
+ "magnet_url_rule": ".//td/a[contains(@href,\"download.php?id=\")]/@href",
+ "download_url_rule": ".//a[contains(@href,\"download.php?id=\") and contains(@href,\"passkey\")]/@href",
+ "size_rule": ".//td[5]/text()",
+ "hr_rule": ".//table/tr/td/img[@class=\"hitandrun\"]/@title",
+ "sale_rule": ".//img[contains(@class,\"free\")]/@alt",
+ "sale_expire_rule": ".//img[contains(@class,\"free\")]/following-sibling::font/span/@title",
+ "release_rule": ".//td[4]/span/@title",
+ "seeders_rule": ".//a[contains(@href,\"#seeders\")]/text()",
+ "leechers_rule": ".//a[contains(@href,\"#leechers\")]/text()",
+ "completers_rule": ".//a[contains(@href,\"viewsnatches\")]//text()",
+ "viewfilelist_rule": ".//td/text()",
+ "viewpeerlist_rule": ".//tr/td[9]/nobr/text()",
+ "peer_speed_rule": ".//tr/td[7]/nobr/text()",
+ "remark": "",
+ "invitation_rule": "invite",
+ "time_join_rule": "regTime",
+ "latest_active_rule": "//td[contains(text(),\"最近动向\")]/following-sibling::td/span/@title",
+ "uploaded_rule": "upload",
+ "downloaded_rule": "download",
+ "ratio_rule": "ratio",
+ "my_sp_rule": "bonus",
+ "hour_sp_rule": "sp_hour",
+ "my_bonus_rule": "//font[@class=\"color_bonus\" and contains(text(),\"积分\")]/following-sibling::text()[1]",
+ "my_level_rule": "class/name",
+ "my_hr_rule": "//a[@href=\"myhr.php\"]//text()",
+ "leech_rule": "leeching",
+ "seed_rule": "seeding",
+ "record_count_rule": ".//td[3]/text()",
+ "seed_vol_rule": "seedSize",
+ "mailbox_rule": "mail",
+ "hash_rule": "//td/b[contains(text(),\"Hash\")]/following::text()[1]",
+ "notice_rule": "//a[@href=\"index.php\"]/font[contains(text(),\"条\")]/text()[1]",
+ "my_passkey_rule": "//td[contains(text(),\"密钥\")]/following-sibling::td[1]/text()",
+ "my_uid_rule": "id",
+ "page_control_panel": "user/setting",
+ "tracker": "tracker.zhuque.in"
}
]
\ No newline at end of file