From 3a6e7b9ac87efa433243f434704430bd0fa60332 Mon Sep 17 00:00:00 2001 From: ngfchl Date: Mon, 26 Dec 2022 21:23:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9C=B1=E9=9B=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pt.json | 83 +++++++++++++++++++++++++++++++++++++++++- pt_site/UtilityTool.py | 82 ++++++++++++++++++++++++++++++++++++++--- pt_site_site.json | 80 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 235 insertions(+), 10 deletions(-) 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