Collect authenticated Qinglong scripts batch

This commit is contained in:
Hermes Agent
2026-05-24 03:53:42 +00:00
parent 0d80b33d25
commit 28d62fef03
86 changed files with 18420 additions and 5 deletions

View File

@@ -0,0 +1,139 @@
# Source: https://github.com/back-101/zyqinglong/blob/main/%E6%B5%93%E4%BA%94%E7%9A%84%E9%85%92%E9%A6%86.py
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/浓五的酒馆.py
# Repo: back-101/zyqinglong
# Path: 浓五的酒馆.py
# UploadedAt: 2025-11-29T06:56:58Z
# SHA256: 915469c7c5f6de757cf491d0d59818b6aa59b3727355cc90ed083c445d833186
# Category: 微信小程序/抓包版
# Evidence: appid/openid/session_key/encryptedData等小程序字段
# -*- coding=UTF-8 -*-
# @Project QL_TimingScript
# @fileName 浓五的酒馆.py
# @author Echo
# @EditTime 2025/3/15
# const $ = new Env('浓五的酒馆');
# cron: 0 0 10 * * *
"""
开启抓包进入浓五的酒馆小程序抓取authorization不要带Bearer
变量格式: nwjg_token多个账号用@隔开
"""
import json
import re
from datetime import datetime
import httpx
from fn_print import fn_print
from get_env import get_env
from sendNotify import send_notification_message_collection
nwjg_tokens = get_env("nwjg_token", "@")
class Nwjg:
def __init__(self, token):
self.user = None
self.client = httpx.Client(
verify=False,
timeout=60
)
self.token = token
self.headers = {
'xweb_xhr': '1',
'content-type': 'application/json',
'sec-fetch-site': 'cross-site',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'accept-language': 'zh-CN,zh;q=0.9',
'Authorization': f'Bearer {self.token}'
}
self.promotion_id = self.get_promotion_id()
def get_promotion_id(self):
try:
response = self.client.post(
url="https://stdcrm.dtmiller.com/scrm-promotion-service/mini/module/config/list",
headers=self.headers,
)
if response.status_code != 200:
fn_print(f"获取活动ID失败: HTTP {response.status_code} - {response.text}")
return None
response_data = response.json()
if response_data.get('msg', None) is not None and "JWT expired" in response_data.get('msg'):
fn_print("获取活动ID失败: token已过期")
return None
# 遍历所有模块和detailList查找title为'每日签到'的项
for module in response_data.get('data', []):
for item in module.get('detailList', []):
try:
detail_json = json.loads(item['detailJson'])
if detail_json.get('title') == '每日签到':
page_path = detail_json['jumpData']['pagePath']
match = re.search(r'promotionId=([^&]*)', page_path)
if match:
return match.group(1)
except Exception as e:
fn_print(f"解析detailJson异常: {e}")
continue
fn_print("未找到每日签到活动")
return None
except json.JSONDecodeError:
fn_print("获取活动ID失败: 响应不是有效的JSON格式")
return None
except KeyError as e:
fn_print(f"获取活动ID失败: 响应缺少必要字段 - {str(e)}")
return None
except Exception as e:
fn_print(f"获取活动ID发生异常: {type(e).__name__} - {str(e)}")
return None
def sign(self):
if not self.promotion_id:
return
self.get_integral()
try:
response = self.client.get(
url="https://stdcrm.dtmiller.com/scrm-promotion-service/promotion/sign/today",
headers=self.headers,
params={
"promotionId": self.promotion_id
}
)
if response.status_code == 200:
response_data = response.json()
if response_data['code'] == 0:
fn_print(f"用户【{self.user}】 - 签到成功!获得{response_data['data']['prize']['goodsName']} - "
f"签到天数: {response_data['data']['signDays']}")
else:
fn_print(f"用户【{self.user}】 - 签到失败: {response_data['msg']}")
else:
fn_print(f"用户【{self.user}】 - 签到失败: {response.text}")
except Exception as e:
fn_print(f"用户【{self.user}】 - 签到发生异常: {e}")
def get_integral(self):
try:
response = self.client.get(
url="https://stdcrm.dtmiller.com/scrm-promotion-service/mini/wly/user/info",
headers=self.headers
).json()
# print(json.dumps(response, indent=4, ensure_ascii=False))
if response['code'] == 0:
self.user = response['data']['member']['mobile']
fn_print(f"用户【{self.user}】 - 当前积分{response['data']['member']['points']}")
else:
fn_print(f"查询积分失败: {response['msg']}")
except Exception as e:
fn_print(f"查询积分发生异常: {e}")
if __name__ == '__main__':
for token in nwjg_tokens:
nwjg = Nwjg(token)
nwjg.sign()
send_notification_message_collection(f"浓五的酒馆签到通知 - {datetime.now().strftime('%Y/%m/%d')}")