Continue seeded Qinglong script collection
This commit is contained in:
23
脚本库/APP版/抓包/126-天瑞地安抽奖/2023-09-20_trda_101_9d6437fb.js
Normal file
23
脚本库/APP版/抓包/126-天瑞地安抽奖/2023-09-20_trda_101_9d6437fb.js
Normal file
File diff suppressed because one or more lines are too long
36
脚本库/APP版/抓包/21-美团_310/2023-09-20_mt_310_2f262d31.js
Normal file
36
脚本库/APP版/抓包/21-美团_310/2023-09-20_mt_310_2f262d31.js
Normal file
File diff suppressed because one or more lines are too long
216
脚本库/APP版/抓包/SendNotify/2025-09-23_SendNotify_81becf63.py
Normal file
216
脚本库/APP版/抓包/SendNotify/2025-09-23_SendNotify_81becf63.py
Normal file
@@ -0,0 +1,216 @@
|
||||
# Source: https://github.com/3ixi/CodeScripts/blob/main/SendNotify.py
|
||||
# Raw: https://raw.githubusercontent.com/3ixi/CodeScripts/main/SendNotify.py
|
||||
# Repo: 3ixi/CodeScripts
|
||||
# Path: SendNotify.py
|
||||
# UploadedAt: 2025-09-23T14:07:43+08:00
|
||||
# SHA256: 81becf638236ec4140dce7f3bcbcc2c46c1108bf5b5dcea6bc2bde763482d06c
|
||||
# Category: APP版/抓包
|
||||
# Evidence: APP/Android/iOS/device关键词
|
||||
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
通知模块 - 仅用于捕获脚本输出并转发给notify.py
|
||||
创建日期:2025-09-17
|
||||
模块作者:3iXi
|
||||
项目主页:https://github.com/3ixi/CloudScripts
|
||||
使用方法:访问青龙面板,打开“配置文件”页面,从44行开始,找到自己想要使用的推送方式,在双引号中填入对应的配置,脚本运行结束后会自动发送通知。
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
# ==================== notify.py 集成 ====================
|
||||
NOTIFY_PATHS = ['./notify.py', '../notify.py']
|
||||
HAS_NOTIFY = False
|
||||
notify_send = None
|
||||
|
||||
for path in NOTIFY_PATHS:
|
||||
if os.path.exists(path):
|
||||
try:
|
||||
sys.path.append(os.path.dirname(os.path.abspath(path)))
|
||||
from notify import send as notify_send
|
||||
HAS_NOTIFY = True
|
||||
break
|
||||
except ImportError:
|
||||
continue
|
||||
|
||||
if not HAS_NOTIFY:
|
||||
print("⚠️ 未找到青龙自带通知模块,请确保notify.py文件存在于当前目录或上级目录中")
|
||||
print(" 访问青龙面板,打开“配置文件”页面,从44行开始,找到自己想要使用的推送方式,在双引号中填入对应的配置")
|
||||
|
||||
# ==================== 输出捕获类 ====================
|
||||
class OutputCapture:
|
||||
|
||||
def __init__(self):
|
||||
self.content = []
|
||||
self.original_stdout = sys.stdout
|
||||
self.capture_enabled = False
|
||||
|
||||
def start_capture(self):
|
||||
if not self.capture_enabled:
|
||||
self.capture_enabled = True
|
||||
sys.stdout = self._DualOutput(self.original_stdout, self)
|
||||
|
||||
def stop_capture(self):
|
||||
if self.capture_enabled:
|
||||
sys.stdout = self.original_stdout
|
||||
self.capture_enabled = False
|
||||
|
||||
def add_content(self, content):
|
||||
if content:
|
||||
self.content.append(str(content))
|
||||
|
||||
def get_content(self):
|
||||
return "\n".join(self.content)
|
||||
|
||||
def clear(self):
|
||||
self.content.clear()
|
||||
|
||||
def __enter__(self):
|
||||
self.start_capture()
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
self.stop_capture()
|
||||
|
||||
class _DualOutput:
|
||||
|
||||
def __init__(self, original_stdout, capture_instance):
|
||||
self.original_stdout = original_stdout
|
||||
self.capture_instance = capture_instance
|
||||
|
||||
def write(self, text):
|
||||
self.original_stdout.write(text)
|
||||
if text.strip():
|
||||
self.capture_instance.add_content(text.strip())
|
||||
|
||||
def flush(self):
|
||||
self.original_stdout.flush()
|
||||
|
||||
def __getattr__(self, name):
|
||||
return getattr(self.original_stdout, name)
|
||||
|
||||
_global_output_capture = OutputCapture()
|
||||
|
||||
def capture_output(title="脚本运行结果"):
|
||||
def decorator(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
global _global_output_capture
|
||||
|
||||
_global_output_capture.clear()
|
||||
_global_output_capture.start_capture()
|
||||
|
||||
try:
|
||||
result = func(*args, **kwargs)
|
||||
return result
|
||||
except Exception as e:
|
||||
_global_output_capture.add_content(f"❌ 脚本运行错误: {e}")
|
||||
raise
|
||||
finally:
|
||||
_global_output_capture.stop_capture()
|
||||
|
||||
captured_content = _global_output_capture.get_content()
|
||||
if captured_content:
|
||||
SendNotify(title, captured_content)
|
||||
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
def start_capture():
|
||||
global _global_output_capture
|
||||
_global_output_capture.clear()
|
||||
_global_output_capture.start_capture()
|
||||
|
||||
|
||||
def stop_capture_and_notify(title="脚本运行结果"):
|
||||
global _global_output_capture
|
||||
_global_output_capture.stop_capture()
|
||||
|
||||
captured_content = _global_output_capture.get_content()
|
||||
if captured_content:
|
||||
SendNotify(title, captured_content)
|
||||
|
||||
|
||||
def add_to_capture(content):
|
||||
global _global_output_capture
|
||||
_global_output_capture.add_content(content)
|
||||
|
||||
|
||||
class NotificationSender:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def _truncate_title(self, content: str, max_length: int = 30) -> str:
|
||||
if not content:
|
||||
return "3iXi云函数脚本通知"
|
||||
|
||||
title = content.replace('\n', ' ').replace('\r', ' ').strip()
|
||||
if len(title) > max_length:
|
||||
title = title[:max_length] + "..."
|
||||
|
||||
return title or "3iXi云函数脚本通知"
|
||||
|
||||
def _get_current_time(self) -> str:
|
||||
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
def send_notification(self, title: str = "", content: str = "") -> bool:
|
||||
if not content:
|
||||
print("⚠️ 通知内容为空,跳过推送")
|
||||
return False
|
||||
|
||||
if not title:
|
||||
title = self._truncate_title(content)
|
||||
|
||||
timestamp = self._get_current_time()
|
||||
content = f"发送时间: {timestamp}\n\n{content}"
|
||||
|
||||
if HAS_NOTIFY and notify_send:
|
||||
try:
|
||||
notify_send(title, content)
|
||||
print("✅ 通知已通过notify.py发送")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"❌ 通过notify.py发送通知失败: {e}")
|
||||
return False
|
||||
else:
|
||||
print("⚠️ 未找到notify.py模块,无法发送通知")
|
||||
print(" 请确保notify.py文件存在于当前目录或上级目录中")
|
||||
print(" 访问青龙面板,打开“配置文件”页面,找到自己想要使用的推送方式填入对应的配置")
|
||||
return False
|
||||
|
||||
|
||||
_notification_sender = None
|
||||
|
||||
def SendNotify(title: str = "", content: str = "") -> bool:
|
||||
global _notification_sender
|
||||
|
||||
if _notification_sender is None:
|
||||
_notification_sender = NotificationSender()
|
||||
|
||||
return _notification_sender.send_notification(title, content)
|
||||
|
||||
|
||||
# ==================== 测试代码 ====================
|
||||
if __name__ == "__main__":
|
||||
print("📱 SendNotify通知模块测试")
|
||||
print("=" * 30)
|
||||
|
||||
# 测试通知
|
||||
test_title = "SendNotify测试通知"
|
||||
test_content = """这是一条测试通知消息。
|
||||
|
||||
测试内容包括:
|
||||
✅ 通知模块正常工作
|
||||
📱 仅通过notify.py推送功能测试成功
|
||||
|
||||
如果您收到此消息,说明通知配置正确"""
|
||||
|
||||
result = SendNotify(test_title, test_content)
|
||||
|
||||
if result:
|
||||
print("✅ 测试完成,通知发送成功")
|
||||
else:
|
||||
print("❌ 测试完成,但通知发送失败")
|
||||
17
脚本库/APP版/抓包/bili测试ck/2025-09-22_bili_task_test_eb59ce0c.sh
Normal file
17
脚本库/APP版/抓包/bili测试ck/2025-09-22_bili_task_test_eb59ce0c.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
# Source: https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/qinglong/DefaultTasks/bili_task_test.sh
|
||||
# Raw: https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/DefaultTasks/bili_task_test.sh
|
||||
# Repo: RayWangQvQ/BiliBiliToolPro
|
||||
# Path: qinglong/DefaultTasks/bili_task_test.sh
|
||||
# UploadedAt: 2025-09-22T22:41:56+08:00
|
||||
# SHA256: eb59ce0c928cbc1b2787559fa3b7e22e892f915079f88cacd715158d83a8a247
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
#!/usr/bin/env bash
|
||||
# cron:0 8 * * *
|
||||
# new Env("bili测试ck")
|
||||
|
||||
. bili_task_base.sh
|
||||
|
||||
target_task_code="Test"
|
||||
run_task "${target_task_code}"
|
||||
@@ -0,0 +1,17 @@
|
||||
# Source: https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/qinglong/DefaultTasks/dev/bili_dev_task_test.sh
|
||||
# Raw: https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/DefaultTasks/dev/bili_dev_task_test.sh
|
||||
# Repo: RayWangQvQ/BiliBiliToolPro
|
||||
# Path: qinglong/DefaultTasks/dev/bili_dev_task_test.sh
|
||||
# UploadedAt: 2025-09-22T22:41:56+08:00
|
||||
# SHA256: 55f5ed933420751e7c400454cb4ac477a32c1161bf885a335e620f94feef2bd5
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
#!/usr/bin/env bash
|
||||
# cron:0 8 * * *
|
||||
# new Env("bili测试ck[dev先行版]")
|
||||
|
||||
. bili_dev_task_base.sh
|
||||
|
||||
target_task_code="Test"
|
||||
run_task "${target_task_code}"
|
||||
277
脚本库/APP版/抓包/cloud_auth/2025-09-23_cloud_auth_eb2f681e.py
Normal file
277
脚本库/APP版/抓包/cloud_auth/2025-09-23_cloud_auth_eb2f681e.py
Normal file
File diff suppressed because one or more lines are too long
22
脚本库/APP版/抓包/envCheck/2025-04-28_envCheck_b178db50.js
Normal file
22
脚本库/APP版/抓包/envCheck/2025-04-28_envCheck_b178db50.js
Normal file
@@ -0,0 +1,22 @@
|
||||
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/utils/envCheck.js
|
||||
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/utils/envCheck.js
|
||||
// # Repo: sudojia/AutoTaskScript
|
||||
// # Path: src/utils/envCheck.js
|
||||
// # UploadedAt: 2025-04-28T19:26:13+08:00
|
||||
// # SHA256: b178db50f991ceec4559da64031ac67925b2a1d2dcbe1070c970a5e6f6b88728
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
module.exports = async function checkUpdate(prefix, list) {
|
||||
if (JSON.stringify(process.env).indexOf('GITHUB') > -1) {
|
||||
console.log('\n不建议使用 GitHub Actions 方式运行脚本\n推荐使用青龙面板');
|
||||
console.log('服务器推荐:https://github.com/sudojia/AutoTaskScript?tab=readme-ov-file#%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A8%E8%8D%90');
|
||||
// process.exit(0);
|
||||
}
|
||||
if (!list || list.length === 0) {
|
||||
console.error(`\n未配置环境变量...`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`\n开始执行${prefix}`);
|
||||
}
|
||||
144
脚本库/APP版/抓包/function_res_{/2025-07-19_rs_af24b67e.js
Normal file
144
脚本库/APP版/抓包/function_res_{/2025-07-19_rs_af24b67e.js
Normal file
@@ -0,0 +1,144 @@
|
||||
// # Source: https://gitee.com/jdqlscript/yyt/blob/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/rs.js
|
||||
// # Raw: https://gitee.com/jdqlscript/yyt/raw/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/rs.js
|
||||
// # Repo: jdqlscript/yyt
|
||||
// # Path: 电信old/电信2/rs.js
|
||||
// # UploadedAt: 2025-07-19T22:58:22+08:00
|
||||
// # SHA256: af24b67e3e07023318015ff8e283a268a7b13d5053649a5fe38af736b94d12be
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
delete __filename
|
||||
delete __dirname
|
||||
ActiveXObject = undefined
|
||||
|
||||
window = global;
|
||||
|
||||
|
||||
content="content_code"
|
||||
|
||||
|
||||
navigator = {"platform": "Linux aarch64"}
|
||||
navigator = {"userAgent": "CtClient;11.0.0;Android;13;22081212C;NTIyMTcw!#!MTUzNzY"}
|
||||
|
||||
location={
|
||||
"href": "https://",
|
||||
"origin": "",
|
||||
"protocol": "",
|
||||
"host": "",
|
||||
"hostname": "",
|
||||
"port": "",
|
||||
"pathname": "",
|
||||
"search": "",
|
||||
"hash": ""
|
||||
}
|
||||
|
||||
i = {length: 0}
|
||||
base = {length: 0}
|
||||
div = {
|
||||
getElementsByTagName: function (res) {
|
||||
console.log('div中的getElementsByTagName:', res)
|
||||
if (res === 'i') {
|
||||
return i
|
||||
}
|
||||
return '<div></div>'
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
script = {
|
||||
|
||||
}
|
||||
meta = [
|
||||
{charset:"UTF-8"},
|
||||
{
|
||||
content: content,
|
||||
getAttribute: function (res) {
|
||||
console.log('meta中的getAttribute:', res)
|
||||
if (res === 'r') {
|
||||
return 'm'
|
||||
}
|
||||
},
|
||||
parentNode: {
|
||||
removeChild: function (res) {
|
||||
console.log('meta中的removeChild:', res)
|
||||
|
||||
return content
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
]
|
||||
form = '<form></form>'
|
||||
|
||||
|
||||
window.addEventListener= function (res) {
|
||||
console.log('window中的addEventListener:', res)
|
||||
|
||||
}
|
||||
|
||||
|
||||
document = {
|
||||
|
||||
|
||||
createElement: function (res) {
|
||||
console.log('document中的createElement:', res)
|
||||
|
||||
|
||||
if (res === 'div') {
|
||||
return div
|
||||
} else if (res === 'form') {
|
||||
return form
|
||||
}
|
||||
else{return res}
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
addEventListener: function (res) {
|
||||
console.log('document中的addEventListener:', res)
|
||||
|
||||
},
|
||||
appendChild: function (res) {
|
||||
console.log('document中的appendChild:', res)
|
||||
return res
|
||||
},
|
||||
removeChild: function (res) {
|
||||
console.log('document中的removeChild:', res)
|
||||
},
|
||||
getElementsByTagName: function (res) {
|
||||
console.log('document中的getElementsByTagName:', res)
|
||||
if (res === 'script') {
|
||||
return script
|
||||
}
|
||||
if (res === 'meta') {
|
||||
return meta
|
||||
}
|
||||
if (res === 'base') {
|
||||
return base
|
||||
}
|
||||
},
|
||||
getElementById: function (res) {
|
||||
console.log('document中的getElementById:', res)
|
||||
if (res === 'root-hammerhead-shadow-ui') {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setInterval = function () {}
|
||||
setTimeout = function () {}
|
||||
window.top = window
|
||||
|
||||
|
||||
'ts_code'
|
||||
|
||||
|
||||
|
||||
function main() {
|
||||
cookie = document.cookie.split(';')[0]
|
||||
return cookie
|
||||
}
|
||||
|
||||
62
脚本库/APP版/抓包/getCookie/2023-10-25_getCookie_153cd6f5.py
Normal file
62
脚本库/APP版/抓包/getCookie/2023-10-25_getCookie_153cd6f5.py
Normal file
@@ -0,0 +1,62 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/utils/getCookie.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/utils/getCookie.py
|
||||
# Repo: yangro/ql
|
||||
# Path: utils/getCookie.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: 153cd6f59fa7cbea00fe2909c7ff135afaa9c1938dcc12bc95dcf081812a7666
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
'''
|
||||
获取青龙面板环境变量
|
||||
'''
|
||||
import os
|
||||
import requests
|
||||
|
||||
|
||||
class GetQlEnvs:
|
||||
def __init__(self):
|
||||
try:
|
||||
port = os.environ["QL_PORT"]
|
||||
client_id = os.environ["QL_CLIENT_ID"]
|
||||
client_secret = os.environ["QL_CLIENT_SECRET"]
|
||||
if (port != '' and client_id != '' and client_secret != ''):
|
||||
self.qlUrl = "127.0.0.1:" + port
|
||||
self.client_id = client_id
|
||||
self.client_secret = client_secret
|
||||
self.flag = True
|
||||
self.getQlToken()
|
||||
else:
|
||||
print("配置不能为空")
|
||||
self.flag = False
|
||||
except Exception as e:
|
||||
print("config.sh 配置文件缺少配置!")
|
||||
self.flag = False
|
||||
|
||||
# 获取青龙token
|
||||
def getQlToken(self):
|
||||
try:
|
||||
res = requests.get("http://"+self.qlUrl+"/open/auth/token?client_id="+self.client_id+"&client_secret="+self.client_secret).json()
|
||||
self.qlToken = res['data']['token']
|
||||
except Exception:
|
||||
print("配置文件有误")
|
||||
|
||||
|
||||
# 获取指定环境变量
|
||||
def getCookies(self, key):
|
||||
cookies = []
|
||||
if (self.flag == False):
|
||||
return cookies
|
||||
headers = {
|
||||
'Authorization': "Bearer " + self.qlToken
|
||||
}
|
||||
json = requests.get(
|
||||
"http://"+self.qlUrl+"/open/envs?searchValue=&t=1673152342396", headers=headers).json()
|
||||
|
||||
if (json['code'] == 200):
|
||||
for data in json['data']:
|
||||
if (data['status'] == 0 and data['name'] == key):
|
||||
cookies.append(
|
||||
{'cookie': data['value'], 'name': data['remarks']})
|
||||
|
||||
return cookies
|
||||
18
脚本库/APP版/抓包/initScript/2025-04-28_initScript_af55b58a.js
Normal file
18
脚本库/APP版/抓包/initScript/2025-04-28_initScript_af55b58a.js
Normal file
@@ -0,0 +1,18 @@
|
||||
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/utils/initScript.js
|
||||
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/utils/initScript.js
|
||||
// # Repo: sudojia/AutoTaskScript
|
||||
// # Path: src/utils/initScript.js
|
||||
// # UploadedAt: 2025-04-28T19:26:13+08:00
|
||||
// # SHA256: af55b58a4961b7c59e3597f4114df7145361ea284efde3929ac95b40c2ca1382
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
module.exports = (appName) => {
|
||||
const Env = require('./env');
|
||||
const $ = new Env(appName);
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
const sudojia = require('./common');
|
||||
const checkUpdate = require('./envCheck');
|
||||
return {$, notify, sudojia, checkUpdate};
|
||||
};
|
||||
120
脚本库/APP版/抓包/msg/2025-06-09_msg_459b2b20.py
Normal file
120
脚本库/APP版/抓包/msg/2025-06-09_msg_459b2b20.py
Normal file
@@ -0,0 +1,120 @@
|
||||
# Source: https://github.com/curtinlv/JD-Script/blob/main/msg.py
|
||||
# Raw: https://raw.githubusercontent.com/curtinlv/JD-Script/main/msg.py
|
||||
# Repo: curtinlv/JD-Script
|
||||
# Path: msg.py
|
||||
# UploadedAt: 2025-06-09T13:06:14+08:00
|
||||
# SHA256: 459b2b204cdd0d81b6ee895afaa5334b416847166c0f80a378c695e6ff4a8661
|
||||
# Category: APP版/抓包
|
||||
# Evidence: APP/Android/iOS/device关键词
|
||||
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*
|
||||
'''
|
||||
项目名称: JD-Script / msg
|
||||
Author: Curtin
|
||||
功能:通知服务
|
||||
Date: 2021/11/7 下午6:46
|
||||
TG交流 https://t.me/topstyle996
|
||||
TG频道 https://t.me/TopStyle2021
|
||||
|
||||
|
||||
# 调用方法:
|
||||
from msg import msg
|
||||
#启动通知服务
|
||||
msg().main()
|
||||
|
||||
# 发信息 msg打印控制台同时会记录日志在message(),后面统一发送
|
||||
msg(" Hello ! ")
|
||||
print(" test ") # 不会记录
|
||||
msg(" My name is Curtin ")
|
||||
|
||||
# 发送到通知服务(如tg机器人、企业微信等)
|
||||
message = msg().message()
|
||||
send("标题", message)
|
||||
|
||||
'''
|
||||
import requests
|
||||
import os, sys
|
||||
|
||||
|
||||
## 获取通知服务
|
||||
class msg(object):
|
||||
def __init__(self, m=None):
|
||||
if m != None:
|
||||
self.str_msg = m
|
||||
print(self.str_msg)
|
||||
self.message()
|
||||
else:
|
||||
self.str_msg = None
|
||||
def message(self):
|
||||
global msg_info
|
||||
try:
|
||||
if self.str_msg:
|
||||
msg_info = "{}\n{}".format(msg_info, self.str_msg)
|
||||
except:
|
||||
if self.str_msg:
|
||||
msg_info = "{}".format(self.str_msg)
|
||||
else:
|
||||
msg_info = ""
|
||||
sys.stdout.flush()
|
||||
if msg_info:
|
||||
return msg_info
|
||||
else:
|
||||
return ""
|
||||
def getsendNotify(self, a=0):
|
||||
if a == 0:
|
||||
a += 1
|
||||
try:
|
||||
url = 'https://ghproxy.com/https://raw.githubusercontent.com/curtinlv/JD-Script/main/sendNotify.py'
|
||||
response = requests.get(url)
|
||||
if 'curtinlv' in response.text:
|
||||
with open('sendNotify.py', "w+", encoding="utf-8") as f:
|
||||
f.write(response.text)
|
||||
else:
|
||||
if a < 5:
|
||||
a += 1
|
||||
return self.getsendNotify(a)
|
||||
else:
|
||||
pass
|
||||
except:
|
||||
if a < 5:
|
||||
a += 1
|
||||
return self.getsendNotify(a)
|
||||
else:
|
||||
pass
|
||||
def main(self):
|
||||
global send
|
||||
cur_path = os.path.abspath(os.path.dirname(__file__))
|
||||
sys.path.append(cur_path)
|
||||
if os.path.exists(cur_path + "/sendNotify.py"):
|
||||
try:
|
||||
from sendNotify import send
|
||||
except:
|
||||
self.getsendNotify()
|
||||
try:
|
||||
from sendNotify import send
|
||||
except:
|
||||
print("加载通知服务失败~")
|
||||
else:
|
||||
self.getsendNotify()
|
||||
try:
|
||||
from sendNotify import send
|
||||
except:
|
||||
print("加载通知服务失败~")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 启动通知服务
|
||||
msg().main()
|
||||
|
||||
# msg打印控制台同时会记录日志在message(),后面统一发送
|
||||
print("\n打印在控制台的信息:")
|
||||
msg("Hello ! ")
|
||||
print("Test ") # 不会记录
|
||||
msg("My name is Curtin. ")
|
||||
|
||||
# 发送到通知服务(如tg机器人、企业微信等)
|
||||
message = msg().message()
|
||||
send("标题", message)
|
||||
print("\n发送到通知服务的信息:")
|
||||
print(message)
|
||||
@@ -0,0 +1,199 @@
|
||||
// # Source: https://github.com/Aaron-lv/sync/blob/jd_scripts/tencentscf.js
|
||||
// # Raw: https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/tencentscf.js
|
||||
// # Repo: Aaron-lv/sync
|
||||
// # Path: tencentscf.js
|
||||
// # UploadedAt: 2022-06-21T18:12:55+08:00
|
||||
// # SHA256: 62cb3ff8ce3c824cc88ba2edfc8c8bf0f3bcb32f47e1f42f1ad5624dfaba31b8
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
|
||||
const tencentcloud = require("tencentcloud-sdk-nodejs");
|
||||
const fs = require("fs");
|
||||
const yaml = require("js-yaml");
|
||||
|
||||
process.env.action = 0;
|
||||
const ScfClient = tencentcloud.scf.v20180416.Client;
|
||||
const clientConfig = {
|
||||
credential: {
|
||||
secretId: process.env.TENCENT_SECRET_ID,
|
||||
secretKey: process.env.TENCENT_SECRET_KEY
|
||||
},
|
||||
region: process.env.TENCENT_REGION, // 区域参考,https://cloud.tencent.com/document/product/583/17299
|
||||
profile: {
|
||||
httpProfile: {
|
||||
endpoint: "scf.tencentcloudapi.com"
|
||||
}
|
||||
}
|
||||
};
|
||||
const sleep = ms => new Promise(res => setTimeout(res, ms));
|
||||
|
||||
!(async () => {
|
||||
const client = new ScfClient(clientConfig);
|
||||
let params;
|
||||
await client.ListFunctions({}).then(
|
||||
async data => {
|
||||
let func = data.Functions.filter(
|
||||
vo => vo.FunctionName === process.env.TENCENT_FUNCTION_NAME
|
||||
);
|
||||
const file_buffer = fs.readFileSync("./myfile.zip");
|
||||
const contents_in_base64 = file_buffer.toString("base64");
|
||||
if (func.length) {
|
||||
console.log(`更新函数`);
|
||||
// 更新代码,删除后重建
|
||||
params = {
|
||||
FunctionName: process.env.TENCENT_FUNCTION_NAME
|
||||
};
|
||||
await client.DeleteFunction(params).then(
|
||||
data => {
|
||||
console.log(data);
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
process.env.action++;
|
||||
}
|
||||
);
|
||||
await sleep(1000 * 50); // 等待50秒
|
||||
}
|
||||
|
||||
console.log(`创建函数`);
|
||||
let inputYML = ".github/workflows/deploy_tencent_scf.yml";
|
||||
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
|
||||
params = {
|
||||
Code: {
|
||||
ZipFile: contents_in_base64
|
||||
},
|
||||
FunctionName: process.env.TENCENT_FUNCTION_NAME,
|
||||
Runtime: "Nodejs12.16",
|
||||
Timeout: 900,
|
||||
Environment: {
|
||||
Variables: []
|
||||
}
|
||||
};
|
||||
let vars = [];
|
||||
for (let key in obj.jobs.build.env) {
|
||||
if (process.env[key].length > 0) {
|
||||
vars.push(key);
|
||||
params.Environment.Variables.push({
|
||||
Key: key,
|
||||
Value: process.env[key]
|
||||
});
|
||||
}
|
||||
}
|
||||
console.log(`您一共填写了${vars.length}个环境变量`, vars);
|
||||
await client.CreateFunction(params).then(
|
||||
data => {
|
||||
console.log(data);
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
process.env.action++;
|
||||
}
|
||||
);
|
||||
await sleep(1000 * 50); // 等待50秒
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
process.env.action++;
|
||||
}
|
||||
);
|
||||
|
||||
/* console.log(`更新环境变量`);
|
||||
// 更新环境变量
|
||||
let inputYML = ".github/workflows/deploy_tencent_scf.yml";
|
||||
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
|
||||
let vars = [];
|
||||
for (let key in obj.jobs.build.steps[3].env) {
|
||||
if (key !== "PATH" && process.env.hasOwnProperty(key))
|
||||
vars.push({
|
||||
Key: key,
|
||||
Value: process.env[key]
|
||||
});
|
||||
}
|
||||
console.log(`您一共填写了${vars.length}个环境变量`);
|
||||
params = {
|
||||
FunctionName: process.env.TENCENT_FUNCTION_NAME,
|
||||
Environment: {
|
||||
Variables: vars
|
||||
}
|
||||
};
|
||||
await client.UpdateFunctionConfiguration(params).then(
|
||||
data => {
|
||||
console.log(data);
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
}
|
||||
);
|
||||
let triggers = [];
|
||||
params = {
|
||||
FunctionName: process.env.TENCENT_FUNCTION_NAME
|
||||
};
|
||||
await client.ListTriggers(params).then(
|
||||
data => {
|
||||
console.log(data);
|
||||
triggers = data.Triggers;
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
}
|
||||
);
|
||||
for (let vo of triggers) {
|
||||
params = {
|
||||
FunctionName: process.env.TENCENT_FUNCTION_NAME,
|
||||
Type: "timer",
|
||||
TriggerName: vo.TriggerName
|
||||
};
|
||||
await client.DeleteTrigger(params).then(
|
||||
data => {
|
||||
console.log(data);
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
}
|
||||
);
|
||||
} */
|
||||
|
||||
// 更新触发器
|
||||
console.log(`去更新触发器`);
|
||||
let inputYML = "serverless.yml";
|
||||
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
|
||||
for (let vo of obj.inputs.events) {
|
||||
let param = {
|
||||
FunctionName: process.env.TENCENT_FUNCTION_NAME,
|
||||
TriggerName: vo.timer.parameters.name,
|
||||
Type: "timer",
|
||||
TriggerDesc: vo.timer.parameters.cronExpression,
|
||||
CustomArgument: vo.timer.parameters.argument,
|
||||
Enable: "OPEN"
|
||||
};
|
||||
await client.CreateTrigger(param).then(
|
||||
data => {
|
||||
console.log(data);
|
||||
},
|
||||
err => {
|
||||
console.error("error", err);
|
||||
process.env.action++;
|
||||
}
|
||||
);
|
||||
}
|
||||
})()
|
||||
.catch(e => console.log(e))
|
||||
.finally(async () => {
|
||||
// 当环境为GitHub action时创建action.js文件判断部署是否进行失败通知
|
||||
if (process.env.GITHUB_ACTIONS == "true") {
|
||||
fs.writeFile(
|
||||
"action.js",
|
||||
`var action = ` + process.env.action + `;action > 0 ? require("./sendNotify").sendNotify("云函数部署异常!请重试","点击通知,登入后查看详情",{ url: process.env.GITHUB_SERVER_URL + "/" + process.env.GITHUB_REPOSITORY + "/actions/runs/" + process.env.GITHUB_RUN_ID + "?check_suite_focus=true" }): ""`,
|
||||
"utf8",
|
||||
function (error) {
|
||||
if (error) {
|
||||
console.log(error);
|
||||
return false;
|
||||
}
|
||||
console.log("写入action.js成功");
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
218
脚本库/APP版/抓包/smzdm_每日任务/2025-06-17_smzdm_task_05309fe6.js
Normal file
218
脚本库/APP版/抓包/smzdm_每日任务/2025-06-17_smzdm_task_05309fe6.js
Normal file
@@ -0,0 +1,218 @@
|
||||
// # Source: https://gitee.com/jdqlscript/smzdm_script/blob/main/smzdm_task.js
|
||||
// # Raw: https://gitee.com/jdqlscript/smzdm_script/raw/main/smzdm_task.js
|
||||
// # Repo: jdqlscript/smzdm_script
|
||||
// # Path: smzdm_task.js
|
||||
// # UploadedAt: 2025-06-17T15:29:57+08:00
|
||||
// # SHA256: 05309fe67423ebbc5b94ab8c3f4f86fe0418c311adb25bbf6f76e2266b0013b8
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
/*
|
||||
smzdm 每日任务脚本
|
||||
项目地址: https://github.com/hex-ci/smzdm_script
|
||||
|
||||
cron: 20 14 * * *
|
||||
*/
|
||||
|
||||
const Env = require('./env');
|
||||
const { requestApi, removeTags, getEnvCookies, wait } = require('./bot');
|
||||
const notify = require('./sendNotify');
|
||||
const { SmzdmTaskBot } = require('./library_task');
|
||||
|
||||
// ------------------------------------
|
||||
|
||||
const $ = new Env('smzdm 每日任务');
|
||||
|
||||
class SmzdmNormalTaskBot extends SmzdmTaskBot {
|
||||
constructor(cookie) {
|
||||
super(cookie, $);
|
||||
}
|
||||
|
||||
// 主函数
|
||||
async run() {
|
||||
$.log('获取任务列表');
|
||||
|
||||
const { tasks } = await this.getTaskList();
|
||||
|
||||
await wait(5, 10);
|
||||
|
||||
let notifyMsg = '';
|
||||
|
||||
notifyMsg = await this.doTasks(tasks);
|
||||
|
||||
$.log('查询是否有限时累计活动阶段奖励');
|
||||
await wait(5, 15);
|
||||
|
||||
// 领取活动奖励
|
||||
const { detail } = await this.getTaskList();
|
||||
|
||||
if (detail.cell_data && detail.cell_data.activity_reward_status == '1') {
|
||||
$.log('有奖励,领取奖励');
|
||||
await wait(5, 15);
|
||||
|
||||
const { isSuccess } = await this.receiveActivity(detail.cell_data);
|
||||
|
||||
notifyMsg += `${isSuccess ? '🟢' : '❌'}限时累计活动阶段奖励领取${isSuccess ? '成功' : '失败!请查看日志'}\n`;
|
||||
}
|
||||
else {
|
||||
$.log('无奖励');
|
||||
}
|
||||
|
||||
return notifyMsg || '无可执行任务';
|
||||
}
|
||||
|
||||
// 获取任务列表
|
||||
async getTaskList() {
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/list_v2', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders()
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
let tasks = [];
|
||||
|
||||
if (data.data.rows[0]) {
|
||||
data.data.rows[0].cell_data.activity_task.accumulate_list.task_list_v2.forEach(item => {
|
||||
tasks = tasks.concat(item.task_list);
|
||||
});
|
||||
|
||||
return {
|
||||
tasks: tasks,
|
||||
detail: data.data.rows[0]
|
||||
};
|
||||
}
|
||||
else {
|
||||
$.log(`任务列表获取失败!${response}`);
|
||||
|
||||
return {
|
||||
tasks: [],
|
||||
detail: {}
|
||||
};
|
||||
}
|
||||
}
|
||||
else {
|
||||
$.log(`任务列表获取失败!${response}`);
|
||||
|
||||
return {
|
||||
tasks: [],
|
||||
detail: {}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// 领取活动奖励
|
||||
async receiveActivity(activity) {
|
||||
$.log(`领取奖励: ${activity.activity_name}`);
|
||||
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_receive', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders(),
|
||||
data: {
|
||||
activity_id: activity.activity_id
|
||||
}
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
$.log(removeTags(data.data.reward_msg));
|
||||
|
||||
return {
|
||||
isSuccess
|
||||
};
|
||||
}
|
||||
else {
|
||||
$.log(`领取奖励失败!${response}`);
|
||||
|
||||
return {
|
||||
isSuccess
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// 领取任务奖励
|
||||
async receiveReward(taskId) {
|
||||
const robotToken = await this.getRobotToken();
|
||||
|
||||
if (robotToken === false) {
|
||||
return {
|
||||
isSuccess,
|
||||
msg: '领取任务奖励失败!'
|
||||
};
|
||||
}
|
||||
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_task_receive', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders(),
|
||||
data: {
|
||||
robot_token: robotToken,
|
||||
geetest_seccode: '',
|
||||
geetest_validate: '',
|
||||
geetest_challenge: '',
|
||||
captcha: '',
|
||||
task_id: taskId
|
||||
}
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
const msg = removeTags(data.data.reward_msg);
|
||||
|
||||
$.log(msg);
|
||||
|
||||
return {
|
||||
isSuccess,
|
||||
msg
|
||||
};
|
||||
}
|
||||
else {
|
||||
$.log(`领取任务奖励失败!${response}`);
|
||||
|
||||
return {
|
||||
isSuccess,
|
||||
msg: '领取任务奖励失败!'
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
const cookies = getEnvCookies();
|
||||
|
||||
if (cookies === false) {
|
||||
$.log('\n请先设置 SMZDM_COOKIE 环境变量');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let notifyContent = '';
|
||||
|
||||
for (let i = 0; i < cookies.length; i++) {
|
||||
const cookie = cookies[i];
|
||||
|
||||
if (!cookie) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i > 0) {
|
||||
$.log();
|
||||
await wait(10, 30);
|
||||
$.log();
|
||||
}
|
||||
|
||||
const sep = `\n****** 账号${i + 1} ******\n`;
|
||||
|
||||
$.log(sep);
|
||||
|
||||
const bot = new SmzdmNormalTaskBot(cookie);
|
||||
const msg = await bot.run();
|
||||
|
||||
notifyContent += `${sep}${msg}\n`;
|
||||
}
|
||||
|
||||
$.log();
|
||||
|
||||
await notify.sendNotify($.name, notifyContent);
|
||||
})().catch((e) => {
|
||||
$.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '')
|
||||
}).finally(() => {
|
||||
$.done();
|
||||
});
|
||||
304
脚本库/APP版/抓包/smzdm_签到/2025-06-17_smzdm_checkin_26f53bee.js
Normal file
304
脚本库/APP版/抓包/smzdm_签到/2025-06-17_smzdm_checkin_26f53bee.js
Normal file
@@ -0,0 +1,304 @@
|
||||
// # Source: https://gitee.com/jdqlscript/smzdm_script/blob/main/smzdm_checkin.js
|
||||
// # Raw: https://gitee.com/jdqlscript/smzdm_script/raw/main/smzdm_checkin.js
|
||||
// # Repo: jdqlscript/smzdm_script
|
||||
// # Path: smzdm_checkin.js
|
||||
// # UploadedAt: 2025-06-17T15:29:57+08:00
|
||||
// # SHA256: 26f53bee920f9f6d7ac749634b74b2577870dced7dbbca829f69ff486cd55fed
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
/*
|
||||
smzdm 签到脚本
|
||||
项目地址: https://github.com/hex-ci/smzdm_script
|
||||
|
||||
cron: 10 8 * * *
|
||||
*/
|
||||
|
||||
const Env = require('./env');
|
||||
const { SmzdmBot, requestApi, removeTags, getEnvCookies, wait } = require('./bot');
|
||||
const notify = require('./sendNotify');
|
||||
const CryptoJS = require('crypto-js');
|
||||
|
||||
// ------------------------------------
|
||||
|
||||
const $ = new Env('smzdm 签到');
|
||||
|
||||
class SmzdmCheckinBot extends SmzdmBot {
|
||||
constructor(cookie, sk) {
|
||||
super(cookie);
|
||||
|
||||
this.sk = sk ? sk.trim() : '';
|
||||
}
|
||||
|
||||
async run() {
|
||||
const { msg: msg1 } = await this.checkin();
|
||||
|
||||
const { msg: msg2 } = await this.allReward();
|
||||
|
||||
const { msg: msg3 } = await this.extraReward();
|
||||
|
||||
return `${msg1}${msg2}${msg3}`;
|
||||
}
|
||||
|
||||
async checkin() {
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders(),
|
||||
data: {
|
||||
touchstone_event: '',
|
||||
sk: this.sk || '1',
|
||||
token: this.token,
|
||||
captcha: ''
|
||||
}
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
let msg = `⭐签到成功${data.data.daily_num}天
|
||||
🏅金币: ${data.data.cgold}
|
||||
🏅碎银: ${data.data.pre_re_silver}
|
||||
🏅补签卡: ${data.data.cards}`;
|
||||
|
||||
await wait(3, 10);
|
||||
|
||||
const vip = await this.getVipInfo();
|
||||
|
||||
if (vip) {
|
||||
msg += `\n🏅经验: ${vip.vip.exp_current}
|
||||
🏅值会员等级: ${vip.vip.exp_level}
|
||||
🏅值会员经验: ${vip.vip.exp_current_level}
|
||||
🏅值会员有效期至: ${vip.vip.exp_level_expire}`;
|
||||
}
|
||||
|
||||
$.log(`${msg}\n`);
|
||||
|
||||
return {
|
||||
isSuccess,
|
||||
msg: `${msg}\n\n`
|
||||
};
|
||||
}
|
||||
else {
|
||||
$.log(`签到失败!${response}`);
|
||||
|
||||
return {
|
||||
isSuccess,
|
||||
msg: '签到失败!'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async allReward() {
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin/all_reward', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders(),
|
||||
debug: process.env.SMZDM_DEBUG
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
const msg1 = `${data.data.normal_reward.reward_add.title}: ${data.data.normal_reward.reward_add.content}`;
|
||||
|
||||
let msg2 = '';
|
||||
|
||||
if (data.data.normal_reward.gift.title) {
|
||||
msg2 = `${data.data.normal_reward.gift.title}: ${data.data.normal_reward.gift.content_str}`;
|
||||
}
|
||||
else {
|
||||
msg2 = `${data.data.normal_reward.gift.sub_content}`;
|
||||
}
|
||||
|
||||
$.log(`${msg1}\n${msg2}\n`);
|
||||
|
||||
return {
|
||||
isSuccess,
|
||||
msg: `${msg1}\n${msg2}\n\n`
|
||||
};
|
||||
}
|
||||
else {
|
||||
if (data.error_code != '4') {
|
||||
$.log(`查询奖励失败!${response}`);
|
||||
}
|
||||
|
||||
return {
|
||||
isSuccess,
|
||||
msg: ''
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async extraReward() {
|
||||
const isContinue = await this.isContinueCheckin();
|
||||
|
||||
if (!isContinue) {
|
||||
const msg = '今天没有额外奖励';
|
||||
|
||||
$.log(`${msg}\n`);
|
||||
|
||||
return {
|
||||
isSuccess: false,
|
||||
msg: `${msg}\n`
|
||||
};
|
||||
}
|
||||
|
||||
await wait(5, 10);
|
||||
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin/extra_reward', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders()
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
const msg = `${data.data.title}: ${removeTags(data.data.gift.content)}`;
|
||||
|
||||
$.log(msg);
|
||||
|
||||
return {
|
||||
isSuccess: true,
|
||||
msg: `${msg}\n`
|
||||
};
|
||||
}
|
||||
else {
|
||||
$.log(`领取额外奖励失败!${response}`);
|
||||
|
||||
return {
|
||||
isSuccess: false,
|
||||
msg: ''
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async isContinueCheckin() {
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin/show_view_v2', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders()
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
const result = data.data.rows.find(item => item.cell_type == '18001');
|
||||
|
||||
return result.cell_data.checkin_continue.continue_checkin_reward_show;
|
||||
}
|
||||
else {
|
||||
$.log(`查询是否有额外奖励失败!${response}`);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async getVipInfo() {
|
||||
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/vip', {
|
||||
method: 'post',
|
||||
headers: this.getHeaders(),
|
||||
data: {
|
||||
token: this.token
|
||||
}
|
||||
});
|
||||
|
||||
if (isSuccess) {
|
||||
return data.data;
|
||||
}
|
||||
else {
|
||||
$.log(`查询信息失败!${response}`);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function random32() {
|
||||
const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||
let result = '';
|
||||
|
||||
for (let i = 0; i < 32; i++) {
|
||||
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function getSk(cookie) {
|
||||
const matchUserId = cookie.match(/smzdm_id=([^;]*)/);
|
||||
|
||||
if (!matchUserId) {
|
||||
return ''
|
||||
}
|
||||
|
||||
const userId = matchUserId[1];
|
||||
const deviceId = getDeviceId(cookie);
|
||||
const key = CryptoJS.enc.Utf8.parse('geZm53XAspb02exN');
|
||||
const cipherText = CryptoJS.DES.encrypt(userId + deviceId, key, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
});
|
||||
|
||||
return cipherText.toString();
|
||||
}
|
||||
|
||||
function getDeviceId(cookie) {
|
||||
const matchDeviceId = cookie.match(/device_id=([^;]*)/);
|
||||
|
||||
if (matchDeviceId) {
|
||||
return matchDeviceId[1];
|
||||
}
|
||||
|
||||
return random32();
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
const cookies = getEnvCookies();
|
||||
|
||||
if (cookies === false) {
|
||||
$.log('\n请先设置 SMZDM_COOKIE 环境变量');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let sks = [];
|
||||
|
||||
if (process.env.SMZDM_SK) {
|
||||
if (process.env.SMZDM_SK.indexOf('&') > -1) {
|
||||
sks = process.env.SMZDM_SK.split('&');
|
||||
}
|
||||
else if (process.env.SMZDM_SK.indexOf('\n') > -1) {
|
||||
sks = process.env.SMZDM_SK.split('\n');
|
||||
}
|
||||
else {
|
||||
sks = [process.env.SMZDM_SK];
|
||||
}
|
||||
}
|
||||
|
||||
let notifyContent = '';
|
||||
|
||||
for (let i = 0; i < cookies.length; i++) {
|
||||
const cookie = cookies[i];
|
||||
|
||||
if (!cookie) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let sk = sks[i];
|
||||
if (!sk) {
|
||||
sk = getSk(cookie)
|
||||
}
|
||||
|
||||
if (i > 0) {
|
||||
await wait(10, 30);
|
||||
}
|
||||
|
||||
const sep = `\n****** 账号${i + 1} ******\n`;
|
||||
|
||||
$.log(sep);
|
||||
|
||||
const bot = new SmzdmCheckinBot(cookie, sk);
|
||||
const msg = await bot.run();
|
||||
|
||||
notifyContent += sep + msg + '\n';
|
||||
}
|
||||
|
||||
$.log();
|
||||
|
||||
await notify.sendNotify($.name, notifyContent);
|
||||
})().catch((e) => {
|
||||
$.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '')
|
||||
}).finally(() => {
|
||||
$.done();
|
||||
});
|
||||
19
脚本库/APP版/抓包/test/2023-10-25_test_4592aab8.py
Normal file
19
脚本库/APP版/抓包/test/2023-10-25_test_4592aab8.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/bak/test.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/bak/test.py
|
||||
# Repo: yangro/ql
|
||||
# Path: bak/test.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: 4592aab884de98b00b116c867bcdb4f797aaccedb2c1f50a8346052ebcafd428
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
import os
|
||||
import utils.getCookie as getCookie
|
||||
|
||||
QL = getCookie.GetQlEnvs()
|
||||
|
||||
cookies = QL.getCookies('BDTB_COOKIE')
|
||||
|
||||
|
||||
for cookie in cookies:
|
||||
print(cookie)
|
||||
179
脚本库/APP版/抓包/tool/2023-10-25_tool_4b1e5458.py
Normal file
179
脚本库/APP版/抓包/tool/2023-10-25_tool_4b1e5458.py
Normal file
@@ -0,0 +1,179 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/utils/tool.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/utils/tool.py
|
||||
# Repo: yangro/ql
|
||||
# Path: utils/tool.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: 4b1e54587262abf9a6142fdca40bc0d99768916b8acdcf16cf0c723fa099b3b9
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
# coding=utf-8
|
||||
import urllib
|
||||
from urllib import parse
|
||||
import random
|
||||
import requests
|
||||
import time
|
||||
|
||||
|
||||
# 用于生成ip地址的函数(很多国外)
|
||||
def get_ip2():
|
||||
ipls = []
|
||||
for i in range(4):
|
||||
ipls.append(str(random.randint(0, 255)))
|
||||
return ".".join(ipls)
|
||||
import random
|
||||
import string
|
||||
|
||||
|
||||
# 生成国内ip地址
|
||||
def get_ip():
|
||||
ips = ['58.14.0.0', '58.16.0.0', '58.24.0.0', '58.30.0.0', '58.32.0.0', '58.66.0.0', '58.68.128.0', '58.82.0.0',
|
||||
'58.87.64.0', '58.99.128.0', '58.100.0.0', '58.116.0.0', '58.128.0.0', '58.144.0.0', '58.154.0.0', '58.192.0.0',
|
||||
'58.240.0.0', '59.32.0.0', '59.64.0.0', '59.80.0.0', '59.107.0.0', '59.108.0.0', '59.151.0.0', '59.155.0.0',
|
||||
'59.172.0.0', '59.191.0.0', '59.191.240.0', '59.192.0.0', '60.0.0.0', '60.55.0.0', '60.63.0.0', '60.160.0.0',
|
||||
'60.194.0.0', '60.200.0.0', '60.208.0.0', '60.232.0.0', '60.235.0.0', '60.245.128.0', '60.247.0.0', '60.252.0.0',
|
||||
'60.253.128.0', '60.255.0.0', '61.4.80.0', '61.4.176.0', '61.8.160.0', '61.28.0.0', '61.29.128.0', '61.45.128.0',
|
||||
'61.47.128.0', '61.48.0.0', '61.87.192.0', '61.128.0.0', '61.232.0.0', '61.236.0.0', '61.240.0.0', '114.28.0.0',
|
||||
'114.54.0.0', '114.60.0.0', '114.64.0.0', '114.68.0.0', '114.80.0.0', '116.1.0.0', '116.2.0.0', '116.4.0.0',
|
||||
'116.8.0.0', '116.13.0.0', '116.16.0.0', '116.52.0.0', '116.56.0.0', '116.58.128.0', '116.58.208.0', '116.60.0.0',
|
||||
'116.66.0.0', '116.69.0.0', '116.70.0.0', '116.76.0.0', '116.89.144.0', '116.90.184.0', '116.95.0.0', '116.112.0.0',
|
||||
'116.116.0.0', '116.128.0.0', '116.192.0.0', '116.193.16.0', '116.193.32.0', '116.194.0.0', '116.196.0.0',
|
||||
'116.198.0.0', '116.199.0.0', '116.199.128.0', '116.204.0.0', '116.207.0.0', '116.208.0.0', '116.212.160.0',
|
||||
'116.213.64.0', '116.213.128.0', '116.214.32.0', '116.214.64.0', '116.214.128.0', '116.215.0.0', '116.216.0.0',
|
||||
'116.224.0.0', '116.242.0.0', '116.244.0.0', '116.248.0.0', '116.252.0.0', '116.254.128.0', '116.255.128.0',
|
||||
'117.8.0.0', '117.21.0.0', '117.22.0.0', '117.24.0.0', '117.32.0.0', '117.40.0.0', '117.44.0.0', '117.48.0.0',
|
||||
'117.53.48.0', '117.53.176.0', '117.57.0.0', '117.58.0.0', '117.59.0.0', '117.60.0.0', '117.64.0.0', '117.72.0.0',
|
||||
'117.74.64.0', '117.74.128.0', '117.75.0.0', '117.76.0.0', '117.80.0.0', '117.100.0.0', '117.103.16.0',
|
||||
'117.103.128.0', '117.106.0.0', '117.112.0.0', '117.120.64.0', '117.120.128.0', '117.121.0.0', '117.121.128.0',
|
||||
'117.121.192.0', '117.122.128.0', '117.124.0.0', '117.128.0.0', '118.24.0.0', '118.64.0.0', '118.66.0.0',
|
||||
'118.67.112.0', '118.72.0.0', '118.80.0.0', '118.84.0.0', '118.88.32.0', '118.88.64.0', '118.88.128.0', '118.89.0.0',
|
||||
'118.91.240.0', '118.102.16.0', '118.112.0.0', '118.120.0.0', '118.124.0.0', '118.126.0.0', '118.132.0.0',
|
||||
'118.144.0.0', '118.178.0.0', '118.180.0.0', '118.184.0.0', '118.192.0.0', '118.212.0.0', '118.224.0.0',
|
||||
'118.228.0.0', '118.230.0.0', '118.239.0.0', '118.242.0.0', '118.244.0.0', '118.248.0.0', '119.0.0.0', '119.2.0.0',
|
||||
'119.2.128.0', '119.3.0.0', '119.4.0.0', '119.8.0.0', '119.10.0.0', '119.15.136.0', '119.16.0.0', '119.18.192.0',
|
||||
'119.18.208.0', '119.18.224.0', '119.19.0.0', '119.20.0.0', '119.27.64.0', '119.27.160.0', '119.27.192.0',
|
||||
'119.28.0.0', '119.30.48.0', '119.31.192.0', '119.32.0.0', '119.40.0.0', '119.40.64.0', '119.40.128.0', '119.41.0.0',
|
||||
'119.42.0.0', '119.42.136.0', '119.42.224.0', '119.44.0.0', '119.48.0.0', '119.57.0.0', '119.58.0.0', '119.59.128.0',
|
||||
'119.60.0.0', '119.62.0.0', '119.63.32.0', '119.75.208.0', '119.78.0.0', '119.80.0.0', '119.84.0.0', '119.88.0.0',
|
||||
'119.96.0.0', '119.108.0.0', '119.112.0.0', '119.128.0.0', '119.144.0.0', '119.148.160.0', '119.161.128.0',
|
||||
'119.162.0.0', '119.164.0.0', '119.176.0.0', '119.232.0.0', '119.235.128.0', '119.248.0.0', '119.253.0.0',
|
||||
'119.254.0.0', '120.0.0.0', '120.24.0.0', '120.30.0.0', '120.32.0.0', '120.48.0.0', '120.52.0.0', '120.64.0.0',
|
||||
'120.72.32.0', '120.72.128.0', '120.76.0.0', '120.80.0.0', '120.90.0.0', '120.92.0.0', '120.94.0.0', '120.128.0.0',
|
||||
'120.136.128.0', '120.137.0.0', '120.192.0.0', '121.0.16.0', '121.4.0.0', '121.8.0.0', '121.16.0.0', '121.32.0.0',
|
||||
'121.40.0.0', '121.46.0.0', '121.48.0.0', '121.51.0.0', '121.52.160.0', '121.52.208.0', '121.52.224.0', '121.55.0.0',
|
||||
'121.56.0.0', '121.58.0.0', '121.58.144.0', '121.59.0.0', '121.60.0.0', '121.68.0.0', '121.76.0.0', '121.79.128.0',
|
||||
'121.89.0.0', '121.100.128.0', '121.101.208.0', '121.192.0.0', '121.201.0.0', '121.204.0.0', '121.224.0.0',
|
||||
'121.248.0.0', '121.255.0.0', '122.0.64.0', '122.0.128.0', '122.4.0.0', '122.8.0.0', '122.48.0.0', '122.49.0.0',
|
||||
'122.51.0.0', '122.64.0.0', '122.96.0.0', '122.102.0.0', '122.102.64.0', '122.112.0.0', '122.119.0.0', '122.136.0.0',
|
||||
'122.144.128.0', '122.152.192.0', '122.156.0.0', '122.192.0.0', '122.198.0.0', '122.200.64.0', '122.204.0.0',
|
||||
'122.224.0.0', '122.240.0.0', '122.248.48.0', '123.0.128.0', '123.4.0.0', '123.8.0.0', '123.49.128.0', '123.52.0.0',
|
||||
'123.56.0.0', '123.64.0.0', '123.96.0.0', '123.98.0.0', '123.99.128.0', '123.100.0.0', '123.101.0.0', '123.103.0.0',
|
||||
'123.108.128.0', '123.108.208.0', '123.112.0.0', '123.128.0.0', '123.136.80.0', '123.137.0.0', '123.138.0.0',
|
||||
'123.144.0.0', '123.160.0.0', '123.176.80.0', '123.177.0.0', '123.178.0.0', '123.180.0.0', '123.184.0.0',
|
||||
'123.196.0.0', '123.199.128.0', '123.206.0.0', '123.232.0.0', '123.242.0.0', '123.244.0.0', '123.249.0.0',
|
||||
'123.253.0.0', '124.6.64.0', '124.14.0.0', '124.16.0.0', '124.20.0.0', '124.28.192.0', '124.29.0.0', '124.31.0.0',
|
||||
'124.40.112.0', '124.40.128.0', '124.42.0.0', '124.47.0.0', '124.64.0.0', '124.66.0.0', '124.67.0.0', '124.68.0.0',
|
||||
'124.72.0.0', '124.88.0.0', '124.108.8.0', '124.108.40.0', '124.112.0.0', '124.126.0.0', '124.128.0.0',
|
||||
'124.147.128.0', '124.156.0.0', '124.160.0.0', '124.172.0.0', '124.192.0.0', '124.196.0.0', '124.200.0.0',
|
||||
'124.220.0.0', '124.224.0.0', '124.240.0.0', '124.240.128.0', '124.242.0.0', '124.243.192.0', '124.248.0.0',
|
||||
'124.249.0.0', '124.250.0.0', '124.254.0.0', '125.31.192.0', '125.32.0.0', '125.58.128.0', '125.61.128.0',
|
||||
'125.62.0.0', '125.64.0.0', '125.96.0.0', '125.98.0.0', '125.104.0.0', '125.112.0.0', '125.169.0.0', '125.171.0.0',
|
||||
'125.208.0.0', '125.210.0.0', '125.213.0.0', '125.214.96.0', '125.215.0.0', '125.216.0.0', '125.254.128.0',
|
||||
'134.196.0.0', '159.226.0.0', '161.207.0.0', '162.105.0.0', '166.111.0.0', '167.139.0.0', '168.160.0.0',
|
||||
'169.211.1.0', '192.83.122.0', '192.83.169.0', '192.124.154.0', '192.188.170.0', '198.17.7.0', '202.0.110.0',
|
||||
'202.0.176.0', '202.4.128.0', '202.4.252.0', '202.8.128.0', '202.10.64.0', '202.14.88.0', '202.14.235.0',
|
||||
'202.14.236.0', '202.14.238.0', '202.20.120.0', '202.22.248.0', '202.38.0.0', '202.38.64.0', '202.38.128.0',
|
||||
'202.38.136.0', '202.38.138.0', '202.38.140.0', '202.38.146.0', '202.38.149.0', '202.38.150.0', '202.38.152.0',
|
||||
'202.38.156.0', '202.38.158.0', '202.38.160.0', '202.38.164.0', '202.38.168.0', '202.38.176.0', '202.38.184.0',
|
||||
'202.38.192.0', '202.41.152.0', '202.41.240.0', '202.43.144.0', '202.46.32.0', '202.46.224.0', '202.60.112.0',
|
||||
'202.63.248.0', '202.69.4.0', '202.69.16.0', '202.70.0.0', '202.74.8.0', '202.75.208.0', '202.85.208.0',
|
||||
'202.90.0.0', '202.90.224.0', '202.90.252.0', '202.91.0.0', '202.91.128.0', '202.91.176.0', '202.91.224.0',
|
||||
'202.92.0.0', '202.92.252.0', '202.93.0.0', '202.93.252.0', '202.95.0.0', '202.95.252.0', '202.96.0.0',
|
||||
'202.112.0.0', '202.120.0.0', '202.122.0.0', '202.122.32.0', '202.122.64.0', '202.122.112.0', '202.122.128.0',
|
||||
'202.123.96.0', '202.124.24.0', '202.125.176.0', '202.127.0.0', '202.127.12.0', '202.127.16.0', '202.127.40.0',
|
||||
'202.127.48.0', '202.127.112.0', '202.127.128.0', '202.127.160.0', '202.127.192.0', '202.127.208.0', '202.127.212.0',
|
||||
'202.127.216.0', '202.127.224.0', '202.130.0.0', '202.130.224.0', '202.131.16.0', '202.131.48.0', '202.131.208.0',
|
||||
'202.136.48.0', '202.136.208.0', '202.136.224.0', '202.141.160.0', '202.142.16.0', '202.143.16.0', '202.148.96.0',
|
||||
'202.149.160.0', '202.149.224.0', '202.150.16.0', '202.152.176.0', '202.153.48.0', '202.158.160.0', '202.160.176.0',
|
||||
'202.164.0.0', '202.164.25.0', '202.165.96.0', '202.165.176.0', '202.165.208.0', '202.168.160.0', '202.170.128.0',
|
||||
'202.170.216.0', '202.173.8.0', '202.173.224.0', '202.179.240.0', '202.180.128.0', '202.181.112.0', '202.189.80.0',
|
||||
'202.192.0.0', '203.18.50.0', '203.79.0.0', '203.80.144.0', '203.81.16.0', '203.83.56.0', '203.86.0.0',
|
||||
'203.86.64.0', '203.88.32.0', '203.88.192.0', '203.89.0.0', '203.90.0.0', '203.90.128.0', '203.90.192.0',
|
||||
'203.91.32.0', '203.91.96.0', '203.91.120.0', '203.92.0.0', '203.92.160.0', '203.93.0.0', '203.94.0.0', '203.95.0.0',
|
||||
'203.95.96.0', '203.99.16.0', '203.99.80.0', '203.100.32.0', '203.100.80.0', '203.100.96.0', '203.100.192.0',
|
||||
'203.110.160.0', '203.118.192.0', '203.119.24.0', '203.119.32.0', '203.128.32.0', '203.128.96.0', '203.130.32.0',
|
||||
'203.132.32.0', '203.134.240.0', '203.135.96.0', '203.135.160.0', '203.142.219.0', '203.148.0.0', '203.152.64.0',
|
||||
'203.156.192.0', '203.158.16.0', '203.161.192.0', '203.166.160.0', '203.171.224.0', '203.174.7.0', '203.174.96.0',
|
||||
'203.175.128.0', '203.175.192.0', '203.176.168.0', '203.184.80.0', '203.187.160.0', '203.190.96.0', '203.191.16.0',
|
||||
'203.191.64.0', '203.191.144.0', '203.192.0.0', '203.196.0.0', '203.207.64.0', '203.207.128.0', '203.208.0.0',
|
||||
'203.208.16.0', '203.208.32.0', '203.209.224.0', '203.212.0.0', '203.212.80.0', '203.222.192.0', '203.223.0.0',
|
||||
'210.2.0.0', '210.5.0.0', '210.5.144.0', '210.12.0.0', '210.14.64.0', '210.14.112.0', '210.14.128.0', '210.15.0.0',
|
||||
'210.15.128.0', '210.16.128.0', '210.21.0.0', '210.22.0.0', '210.23.32.0', '210.25.0.0', '210.26.0.0', '210.28.0.0',
|
||||
'210.32.0.0', '210.51.0.0', '210.52.0.0', '210.56.192.0', '210.72.0.0', '210.76.0.0', '210.78.0.0', '210.79.64.0',
|
||||
'210.79.224.0', '210.82.0.0', '210.87.128.0', '210.185.192.0', '210.192.96.0', '211.64.0.0', '211.80.0.0',
|
||||
'211.96.0.0', '211.136.0.0', '211.144.0.0', '211.160.0.0', '218.0.0.0', '218.56.0.0', '218.64.0.0', '218.96.0.0',
|
||||
'218.104.0.0', '218.108.0.0', '218.185.192.0', '218.192.0.0', '218.240.0.0', '218.249.0.0', '219.72.0.0',
|
||||
'219.82.0.0', '219.128.0.0', '219.216.0.0', '219.224.0.0', '219.242.0.0', '219.244.0.0', '220.101.192.0',
|
||||
'220.112.0.0', '220.152.128.0', '220.154.0.0', '220.160.0.0', '220.192.0.0', '220.231.0.0', '220.231.128.0',
|
||||
'220.232.64.0', '220.234.0.0', '220.242.0.0', '220.248.0.0', '220.252.0.0', '221.0.0.0', '221.8.0.0', '221.12.0.0',
|
||||
'221.12.128.0', '221.13.0.0', '221.14.0.0', '221.122.0.0', '221.129.0.0', '221.130.0.0', '221.133.224.0',
|
||||
'221.136.0.0', '221.172.0.0', '221.176.0.0', '221.192.0.0', '221.196.0.0', '221.198.0.0', '221.199.0.0',
|
||||
'221.199.128.0', '221.199.192.0', '221.199.224.0', '221.200.0.0', '221.208.0.0', '221.224.0.0', '222.16.0.0',
|
||||
'222.32.0.0', '222.64.0.0', '222.125.0.0', '222.126.128.0', '222.128.0.0', '222.160.0.0', '222.168.0.0',
|
||||
'222.176.0.0', '222.192.0.0', '222.240.0.0', '222.248.0.0']
|
||||
rnd = random.randint(0, len(ips) - 1)
|
||||
ip = ips[rnd]
|
||||
_ip = ip.split('.')
|
||||
for i, v in enumerate(_ip):
|
||||
if int(v) == 0:
|
||||
_ip[i] = str(random.randint(0, 255))
|
||||
ip = '.'.join(_ip)
|
||||
return ip
|
||||
|
||||
|
||||
# 即时达推送
|
||||
def msgSend(token, title, body, flag=False):
|
||||
url = "http://push.ijingniu.cn/send"
|
||||
data = "key=" + token + "&head=" + urllib.parse.quote(title) + \
|
||||
"&body=" + urllib.parse.quote(body)
|
||||
headers = {
|
||||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
|
||||
}
|
||||
res = requests.post(url=url, data=data, headers=headers)
|
||||
if flag:
|
||||
print(res.text)
|
||||
|
||||
|
||||
# 返回伪装ip
|
||||
def getFalseHeadersIp(headers):
|
||||
ip = get_ip()
|
||||
_headers = {
|
||||
"xforwarded-for": ip,
|
||||
"x-remote-IP": ip,
|
||||
"x-remote-ip": ip,
|
||||
"x-client-ip": ip,
|
||||
"x-client-IP": ip,
|
||||
"X-Real-IP": ip,
|
||||
"client-IP": ip,
|
||||
"x-originating-IP": ip,
|
||||
"x-remote-addr": ip,
|
||||
"Client-Ip": ip,
|
||||
"Remote_Addr": ip,
|
||||
"X-Forwarded-For": ip,
|
||||
"CLIENT_IP": ip,
|
||||
"VIA": ip,
|
||||
"REMOTE_ADDR": ip
|
||||
}
|
||||
headers.update(_headers)
|
||||
return headers
|
||||
|
||||
#获取时间戳
|
||||
def getTimeStamp():
|
||||
return int(round(time.time() * 1000))
|
||||
|
||||
#获取日期时间
|
||||
def getDateTime(timeStamp = None):
|
||||
if timeStamp == None:
|
||||
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(round(time.time() * 1000))/1000))
|
||||
else:
|
||||
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timeStamp/1000))
|
||||
410
脚本库/APP版/抓包/上海杨浦/2025-04-28_sudojia_shmedia_fc123c5c.js
Normal file
410
脚本库/APP版/抓包/上海杨浦/2025-04-28_sudojia_shmedia_fc123c5c.js
Normal file
@@ -0,0 +1,410 @@
|
||||
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/client/sudojia_shmedia.js
|
||||
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/client/sudojia_shmedia.js
|
||||
// # Repo: sudojia/AutoTaskScript
|
||||
// # Path: src/client/sudojia_shmedia.js
|
||||
// # UploadedAt: 2025-04-28T19:26:13+08:00
|
||||
// # SHA256: fc123c5cb93f7069c83f15b2c939881360d4bd0cd21bae12444871e9623216c1
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
/**
|
||||
* 上海杨浦APP
|
||||
*
|
||||
* 抓包 Host:https://ypapi.shmedia.tech 获取请求头 token
|
||||
* export SHYP_TOKEN = 'eyJ0eXxx'
|
||||
* 多账号用 & 或换行
|
||||
*
|
||||
* @author Telegram@sudojia
|
||||
* @site https://blog.imzjw.cn
|
||||
* @date 2024/10/05
|
||||
*
|
||||
* const $ = new Env('上海杨浦')
|
||||
* cron: 33 7 * * *
|
||||
*/
|
||||
const initScript = require('../utils/initScript')
|
||||
const {$, notify, sudojia, checkUpdate} = initScript('上海杨浦');
|
||||
const shMediaList = process.env.SHYP_TOKEN ? process.env.SHYP_TOKEN.split(/[\n&]/) : [];
|
||||
// 消息推送
|
||||
let message = '';
|
||||
// 接口地址
|
||||
const baseUrl = 'https://ypapi.shmedia.tech'
|
||||
// 请求头
|
||||
const headers = {
|
||||
'User-Agent': 'okhttp/4.10.0',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'siteid': '310110',
|
||||
'content-type': 'application/json; charset=UTF-8'
|
||||
};
|
||||
// 请求体
|
||||
const dataBody = {
|
||||
"orderBy": "release_desc",
|
||||
"requestType": "2",
|
||||
"siteId": "310110"
|
||||
}
|
||||
// 映射表用于转换任务 ID
|
||||
const TASK_ID_MAP = {
|
||||
'002': 'read',
|
||||
'003': 'video',
|
||||
'007': 'share'
|
||||
};
|
||||
|
||||
!(async () => {
|
||||
await checkUpdate($.name, shMediaList);
|
||||
for (let i = 0; i < shMediaList.length; i++) {
|
||||
const index = i + 1;
|
||||
console.log(`\n*****第[${index}]个${$.name}账号*****`);
|
||||
headers.token = shMediaList[i];
|
||||
message += `📣====${$.name}账号[${index}]====📣\n`;
|
||||
await main();
|
||||
await $.wait(sudojia.getRandomWait(2000, 2500));
|
||||
}
|
||||
if (message) {
|
||||
await notify.sendNotify(`「${$.name}」`, `${message}`);
|
||||
}
|
||||
})().catch((e) => $.logErr(e)).finally(() => $.done());
|
||||
|
||||
async function main() {
|
||||
await getUserInfo();
|
||||
await $.wait(sudojia.getRandomWait(1500, 2500));
|
||||
await doTask();
|
||||
await $.wait(sudojia.getRandomWait(1500, 2500));
|
||||
await getPoints();
|
||||
await $.wait(sudojia.getRandomWait(1500, 2500));
|
||||
await getGoodsList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getUserInfo() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/get`, 'post', headers);
|
||||
if (0 !== data.code) {
|
||||
return console.error('获取用户信息失败 ->', data.msg);
|
||||
}
|
||||
const mobile = data.data.mobile || '18888888888';
|
||||
const hiddenMobile = `${mobile.slice(0, 3)}***${mobile.slice(-3)}`;
|
||||
console.log(`${data.data.nickname}(${hiddenMobile})`);
|
||||
message += `${data.data.nickname}(${mobile})\n`;
|
||||
} catch (e) {
|
||||
console.error(`获取用户信息时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 签到
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function sign() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/sign`, 'post', headers, dataBody);
|
||||
if (0 !== data.code) {
|
||||
return console.error('签到失败 ->', data.msg);
|
||||
}
|
||||
if (!data.data.score) {
|
||||
return console.error(data.data.title);
|
||||
}
|
||||
console.log(`签到成功,积分+${data.data.score}`);
|
||||
message += `签到成功\n`;
|
||||
} catch (e) {
|
||||
console.error(`签到时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取任务列表
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function doTask() {
|
||||
try {
|
||||
let data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/info`, 'post', headers, dataBody);
|
||||
if (0 !== data.code) {
|
||||
return console.error(`获取任务列表失败 -> ${data.msg}`);
|
||||
}
|
||||
const tasks = data.data.jobs;
|
||||
for (const item of tasks) {
|
||||
if (['004'].includes(item.id)) {
|
||||
console.log(`\n跳过【${item.title}】`);
|
||||
continue;
|
||||
}
|
||||
// 已获得的任务积分
|
||||
let taskScore = item.progress;
|
||||
if (taskScore >= item.totalProgress) {
|
||||
console.log(`【${item.title}】任务已完成`)
|
||||
await $.wait(sudojia.getRandomWait(800, 1300));
|
||||
continue;
|
||||
}
|
||||
console.log(`\n开始【${item.title}】`);
|
||||
await $.wait(sudojia.getRandomWait(1e3, 2e3));
|
||||
while (taskScore < item.totalProgress) {
|
||||
// 获取文章 ID
|
||||
const articleId = await getArticleId();
|
||||
switch (item.id) {
|
||||
case '001':
|
||||
// 签到
|
||||
await sign();
|
||||
await $.wait(sudojia.getRandomWait(2e3, 3e3));
|
||||
break;
|
||||
case '002': // 阅读
|
||||
case '003': // 视频
|
||||
case '007': // 分享
|
||||
await commonTask(item.id, item.title);
|
||||
break;
|
||||
case '005':
|
||||
// 收藏
|
||||
await favorArticle(articleId);
|
||||
await $.wait(sudojia.getRandomWait(5e3, 8e3));
|
||||
break;
|
||||
case '006':
|
||||
// 评论
|
||||
await commentArticle(articleId);
|
||||
await $.wait(sudojia.getRandomWait(15000, 20000));
|
||||
break;
|
||||
default:
|
||||
console.log(`其它任务:${item.title}`);
|
||||
break;
|
||||
}
|
||||
// 更新 taskScore
|
||||
taskScore = await updateTaskScore(item.id);
|
||||
await $.wait(sudojia.getRandomWait(1e3, 2e3));
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`获取任务列表时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用任务 002
|
||||
* 003
|
||||
* 007
|
||||
*
|
||||
* @param taskId
|
||||
* @param taskName
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function commonTask(taskId, taskName) {
|
||||
const taskType = TASK_ID_MAP[taskId];
|
||||
const taskUrl = `${baseUrl}/media-basic-port/api/app/points/${taskType}/add`;
|
||||
const taskData = await sudojia.sendRequest(taskUrl, 'post', headers, {
|
||||
"orderBy": "release_desc",
|
||||
"requestType": "1",
|
||||
"siteId": "310110"
|
||||
});
|
||||
if (0 !== taskData.code) {
|
||||
throw new Error(`${taskName}任务失败 -> ${taskData.msg}`);
|
||||
}
|
||||
console.log(`${taskName}任务成功`);
|
||||
await $.wait(sudojia.getRandomWait(5e3, 8e3));
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新任务积分
|
||||
*
|
||||
* @param itemId
|
||||
* @returns {Promise<*|void>}
|
||||
*/
|
||||
async function updateTaskScore(itemId) {
|
||||
try {
|
||||
const updatedData = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/info`, 'post', headers, dataBody);
|
||||
if (0 !== updatedData.code) {
|
||||
return console.error('更新任务列表失败 ->', updatedData.msg);
|
||||
}
|
||||
const updatedItem = updatedData.data.jobs.find(job => job.id === itemId);
|
||||
if (!updatedItem) {
|
||||
return console.error(`未找到任务ID: ${itemId}`);
|
||||
}
|
||||
return updatedItem.progress;
|
||||
} catch (e) {
|
||||
console.error(`更新任务列表出错 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文章 ID
|
||||
*
|
||||
* @returns {Promise<*|null>}
|
||||
*/
|
||||
async function getArticleId() {
|
||||
try {
|
||||
// 频道列表
|
||||
const channelIds = [
|
||||
// 推荐
|
||||
'a978f44b3e284e5e86777f9d4e3be7bb',
|
||||
// 要闻
|
||||
'01ff4b46f6bf4e19af6fe88e6320a6c1',
|
||||
// 时政
|
||||
'ba1f152e715f4ee99e6e13a02f6a218e',
|
||||
// 三区
|
||||
'0375dc90023f43ffafaf9bc161c30348',
|
||||
// 城事
|
||||
'0ea24f917ab54157bcd2cecffbf9bfa2'
|
||||
];
|
||||
// 随机选择一个频道
|
||||
const channelId = channelIds[Math.floor(Math.random() * channelIds.length)];
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/news/content/list`, 'post', headers, {
|
||||
"channel": {
|
||||
"id": channelId
|
||||
},
|
||||
"pageNo": 1,
|
||||
"pageSize": 30,
|
||||
"orderBy": "release_desc",
|
||||
"requestType": "1",
|
||||
"siteId": "310110"
|
||||
});
|
||||
if (0 !== data.code) {
|
||||
console.error('获取新闻列表失败 ->', data.msg)
|
||||
return null;
|
||||
}
|
||||
const articles = data.data.records[Math.floor(Math.random() * data.data.records.length)];
|
||||
return articles.id;
|
||||
} catch (e) {
|
||||
console.error(`获取文章 ID 时发生异常 -> ${e}`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 收藏文章
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function favorArticle(articleId) {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/news/content/favor`, 'post', headers, {
|
||||
"id": articleId,
|
||||
"orderBy": "release_desc",
|
||||
"requestType": "2",
|
||||
"siteId": "310110"
|
||||
});
|
||||
if (0 !== data.code) {
|
||||
return console.error('收藏文章失败 ->', data.msg);
|
||||
}
|
||||
console.log(`收藏文章成功\n`);
|
||||
} catch (e) {
|
||||
console.error(`收藏文章时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 文章评论
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function commentArticle(articleId) {
|
||||
try {
|
||||
// 随机评论句子
|
||||
const contentList = [
|
||||
'👍',
|
||||
'👍👍',
|
||||
'好!!',
|
||||
'占个楼',
|
||||
'mark!',
|
||||
'读完这篇文章后,我感到充满了力量和决心',
|
||||
'这篇文章让我感到非常温暖和鼓舞',
|
||||
'激荡团结奋斗的强大正能量,汇聚起亿万人民团结奋斗的磅礴之力。'
|
||||
];
|
||||
const content = contentList[Math.floor(Math.random() * contentList.length)];
|
||||
console.log(`随机获取评论句子:[${content}]`);
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/common/comment/add`, 'post', headers, {
|
||||
"content": content,
|
||||
"displayResources": [],
|
||||
"targetId": articleId,
|
||||
"targetType": "content",
|
||||
"pageNo": 0,
|
||||
"pageSize": 10,
|
||||
"orderBy": "create_desc",
|
||||
"requestType": "1",
|
||||
"siteId": "310110"
|
||||
})
|
||||
if (0 !== data.code) {
|
||||
return console.error('评论文章失败 ->', data.msg, '\n');
|
||||
}
|
||||
console.log('评论成功\n');
|
||||
} catch (e) {
|
||||
console.error(`评论文章时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getPoints() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/info`, 'post', headers, dataBody);
|
||||
if (0 !== data.code) {
|
||||
return console.error('获取任务列表失败 ->', data.msg);
|
||||
}
|
||||
const tasks = data.data.jobs;
|
||||
for (const item of tasks) {
|
||||
if (['004'].includes(item.id)) {
|
||||
continue;
|
||||
}
|
||||
if ('1' === item.status) {
|
||||
message += `【${item.title}】已完成\n`;
|
||||
}
|
||||
}
|
||||
$.points = data.data.totalScore || 0;
|
||||
if (data.data.signTitle) {
|
||||
console.log(data.data.signTitle);
|
||||
message += `${data.data.signTitle}\n`;
|
||||
}
|
||||
console.log(`当前积分:${$.points}`);
|
||||
message += `当前积分:${$.points}\n`;
|
||||
} catch (e) {
|
||||
console.error(`获取积分时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品列表
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getGoodsList() {
|
||||
try {
|
||||
const requests = [
|
||||
{
|
||||
params: 'seller_id=31011001&page_no=1&page_size=10&shop_cat_id=1544652237932859394&sort=create_desc',
|
||||
type: '限时商品'
|
||||
},
|
||||
{
|
||||
params: 'keyword=&page_no=1&page_size=20&sort=create_desc&seller_id=31011001&shop_cat_id=1431136756879056898',
|
||||
type: '虚拟商品'
|
||||
}
|
||||
];
|
||||
for (const req of requests) {
|
||||
let data = await sudojia.sendRequest(`https://mall-api.shmedia.tech/goods-service/goods/search?${req.params}`, 'get', headers);
|
||||
await $.wait(sudojia.getRandomWait(1e3, 2e3));
|
||||
if (!data || !data.data) {
|
||||
console.error(`${req.type}: data 数据为空`);
|
||||
continue;
|
||||
}
|
||||
const promotions = data.data.flatMap(item => item.promotion);
|
||||
let hasExchangeableGoods = false;
|
||||
console.log(`${req.type}:`);
|
||||
message += `${req.type}:\n`;
|
||||
for (const ex of promotions) {
|
||||
const {goods_name, exchange_point} = ex.exchange;
|
||||
if ($.points >= exchange_point) {
|
||||
console.log(`可兑换[${goods_name}], 所需[${exchange_point}]积分`);
|
||||
message += `可兑换[${goods_name}], 所需[${exchange_point}]积分\n`;
|
||||
hasExchangeableGoods = true;
|
||||
}
|
||||
}
|
||||
if (!hasExchangeableGoods) {
|
||||
message += `当前积分暂无商品可兑换\n\n`;
|
||||
console.log(`当前积分暂无商品可兑换\n`);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`获取商品列表时发生异常 -> ${e}`);
|
||||
}
|
||||
}
|
||||
16
脚本库/APP版/抓包/兴攀农场.ob/2026-05-01_兴攀农场.ob_1143bc8c.js
Normal file
16
脚本库/APP版/抓包/兴攀农场.ob/2026-05-01_兴攀农场.ob_1143bc8c.js
Normal file
File diff suppressed because one or more lines are too long
147
脚本库/APP版/抓包/摩托范/2025-04-28_sudojia_moto_ba0646a4.js
Normal file
147
脚本库/APP版/抓包/摩托范/2025-04-28_sudojia_moto_ba0646a4.js
Normal file
@@ -0,0 +1,147 @@
|
||||
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/client/sudojia_moto.js
|
||||
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/client/sudojia_moto.js
|
||||
// # Repo: sudojia/AutoTaskScript
|
||||
// # Path: src/client/sudojia_moto.js
|
||||
// # UploadedAt: 2025-04-28T19:26:13+08:00
|
||||
// # SHA256: ba0646a4a049f0e7a0bf3bdbf3ec2ffa6f5a37be53bfe675644630816b6fbad0
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
/**
|
||||
* 摩托范 APP
|
||||
*
|
||||
* 抓包 Host:https://api.58moto.com 获取请求头 token 的值和 uid (token#uid)
|
||||
* export MOTO_TOKEN = 'f08xxxxxxxxxxxxxxxxx#22222222'
|
||||
* 多账号用 & 或换行
|
||||
*
|
||||
* @author Telegram@sudojia
|
||||
* @site https://blog.imzjw.cn
|
||||
* @date 2024/08/27
|
||||
*
|
||||
* const $ = new Env('摩托范')
|
||||
* cron: 33 3 * * *
|
||||
*/
|
||||
const initScript = require('../utils/initScript')
|
||||
const {$, notify, sudojia, checkUpdate} = initScript('摩托范');
|
||||
const moment = require("moment/moment");
|
||||
const motoList = process.env.MOTO_TOKEN ? process.env.MOTO_TOKEN.split(/[\n&]/) : [];
|
||||
// 消息推送
|
||||
let message = '';
|
||||
// 接口地址
|
||||
const baseUrl = 'https://api.58moto.com'
|
||||
// 请求头
|
||||
const headers = {
|
||||
'User-Agent': 'okhttp/4.11.0',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Accept-Encoding': 'gzip',
|
||||
'os': 'OPPO:OPPO+R9s',
|
||||
'osversion': '28',
|
||||
'referer': 'api.58moto.com',
|
||||
'version': '3.57.63',
|
||||
'timestamp': Date.now()
|
||||
};
|
||||
|
||||
!(async () => {
|
||||
await checkUpdate($.name, motoList);
|
||||
for (let i = 0; i < motoList.length; i++) {
|
||||
const index = i + 1;
|
||||
const [token, uid] = motoList[i].split('#');
|
||||
headers.token = token;
|
||||
$.userId = uid;
|
||||
console.log(`\n*****第[${index}]个${$.name}账号*****`);
|
||||
message += `📣====${$.name}账号[${index}]====📣\n`;
|
||||
await main();
|
||||
await $.wait(sudojia.getRandomWait(2000, 2500));
|
||||
}
|
||||
if (message) {
|
||||
await notify.sendNotify(`「${$.name}」`, `${message}`);
|
||||
}
|
||||
})().catch((e) => $.logErr(e)).finally(() => $.done());
|
||||
|
||||
async function main() {
|
||||
await getUserInfo();
|
||||
await $.wait(sudojia.getRandomWait(800, 1200));
|
||||
await isSign();
|
||||
await $.wait(sudojia.getRandomWait(1e3, 2e3));
|
||||
await getPoints();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getUserInfo() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/user/center/info/v2/principal`, 'post', headers, `uid=${$.userId}`);
|
||||
if (data.code !== 0) {
|
||||
return $.log(data.msg);
|
||||
}
|
||||
const mobile = data.data.mobile;
|
||||
const hiddenMobile = `${mobile.slice(0, 3)}***${mobile.slice(-3)}` || '18888888888';
|
||||
console.log(`${data.data.nickname}(${hiddenMobile})`);
|
||||
message += `${data.data.nickname}(${mobile})\n`;
|
||||
headers.token = data.data.token;
|
||||
} catch (e) {
|
||||
console.error(`获取用户信息时发生异常:` + e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测签到
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function isSign() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/coins/task/v2/isSign?uid=${$.userId}`, 'get', headers);
|
||||
if (data.code !== 0) {
|
||||
return $.log(data.msg);
|
||||
}
|
||||
if (data.data.isSign) {
|
||||
message += `今日已签到\n`;
|
||||
return $.log(`今日已签到`);
|
||||
}
|
||||
await $.wait(sudojia.getRandomWait(1e3, 2e3));
|
||||
await sign();
|
||||
} catch (e) {
|
||||
console.error(`检测签到时发生异常:` + e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 签到
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function sign() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/coins/task/dailyCheckIn`, 'post', headers, `uid=${$.userId}&weekDate=${moment().format('YYYYMMDD')}`);
|
||||
if (0 !== data.code) {
|
||||
return $.log(data.msg);
|
||||
}
|
||||
console.log(data.data.contentDesc || '签到成功');
|
||||
message += '签到成功\n';
|
||||
} catch (e) {
|
||||
console.error(`签到时发生异常:` + e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function getPoints() {
|
||||
try {
|
||||
const data = await sudojia.sendRequest(`${baseUrl}/coins/account/energy?uid=${$.userId}`, 'get', headers);
|
||||
if (data.code !== 0) {
|
||||
return $.log(data.msg);
|
||||
}
|
||||
console.log(`当前能量:${data.data.available}`);
|
||||
message += `当前能量:${data.data.available}\n\n`;
|
||||
} catch (e) {
|
||||
console.error(`获取积分时发生异常:` + e);
|
||||
}
|
||||
}
|
||||
79
脚本库/APP版/抓包/有道云笔记/2023-10-25_ydybj_ee4dc424.py
Normal file
79
脚本库/APP版/抓包/有道云笔记/2023-10-25_ydybj_ee4dc424.py
Normal file
@@ -0,0 +1,79 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/bak/ydybj.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/bak/ydybj.py
|
||||
# Repo: yangro/ql
|
||||
# Path: bak/ydybj.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: ee4dc424b3f1ae06d0cabb02ed6ba632f06c9ba877716f279cf3368be1171dd3
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
# coding=utf-8
|
||||
"""
|
||||
cron: 0 0 6 * * ?
|
||||
new Env("有道云笔记")
|
||||
"""
|
||||
import pymysql
|
||||
import requests
|
||||
import utils.db as DB
|
||||
import utils.tool as TOOL
|
||||
|
||||
global msg
|
||||
|
||||
msg = """
|
||||
名称|空间
|
||||
:--:|:--:
|
||||
"""
|
||||
mysql = DB.mysql()
|
||||
|
||||
|
||||
def main():
|
||||
dbUser = mysql.select_all("select * from tb_ydybj where status = 0")
|
||||
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
|
||||
print("获取到: "+str(len(dbUser))+" 个用户")
|
||||
print("-------------------------------------------")
|
||||
|
||||
for user in dbUser:
|
||||
signIn(user)
|
||||
|
||||
|
||||
# 签到
|
||||
def signIn(user):
|
||||
global msg
|
||||
|
||||
ad = 0
|
||||
payload = 'yaohuo:id34976'
|
||||
headers = {'Cookie': user['cookie']}
|
||||
|
||||
re = requests.request(
|
||||
"POST", "https://note.youdao.com/yws/api/daupromotion?method=sync", headers=headers, data=payload)
|
||||
if 'error' not in re.text:
|
||||
res = requests.request(
|
||||
"POST", "https://note.youdao.com/yws/mapi/user?method=checkin", headers=headers, data=payload)
|
||||
for i in range(3):
|
||||
resp = requests.request(
|
||||
"POST", "https://note.youdao.com/yws/mapi/user?method=adRandomPrompt", headers=headers, data=payload)
|
||||
ad += resp.json()['space'] // 1048576
|
||||
if 'reward' in re.text:
|
||||
sync = re.json()['rewardSpace'] // 1048576
|
||||
checkin = res.json()['space'] // 1048576
|
||||
# 签到成功
|
||||
print(user['user_name'] + " ---> " +
|
||||
str(sync + checkin + ad) + 'M\n')
|
||||
msg += user['user_name'] + "|" + \
|
||||
str(sync + checkin + ad) + 'M\n\n'
|
||||
else:
|
||||
if sever != '0':
|
||||
print(user['user_name'] + " ---> " + 'cookie失效\n')
|
||||
msg += user['user_name'] + "|cookie失效\n\n"
|
||||
|
||||
print("-------------------------------------------")
|
||||
|
||||
|
||||
main()
|
||||
|
||||
# 一定要关闭数据库
|
||||
print("\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
|
||||
mysql.close()
|
||||
|
||||
|
||||
TOOL.msgSend("b5fd9aaa249242e3aea2ca4bbebb6bfa", " ", msg, True)
|
||||
77
脚本库/APP版/抓包/有道云笔记/2023-10-25_ydybj_f7a68eb8.py
Normal file
77
脚本库/APP版/抓包/有道云笔记/2023-10-25_ydybj_f7a68eb8.py
Normal file
@@ -0,0 +1,77 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/ydybj.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/ydybj.py
|
||||
# Repo: yangro/ql
|
||||
# Path: ydybj.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: f7a68eb8628692792bf6a8123bf482d57fb78ba20d3641d978fb6a6607d20930
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
# coding=utf-8
|
||||
"""
|
||||
cron: 0 0 6 * * ?
|
||||
new Env("有道云笔记")
|
||||
"""
|
||||
|
||||
import requests
|
||||
import notify
|
||||
import utils.tool as TOOL
|
||||
import utils.getCookie as getCookie
|
||||
|
||||
global msg
|
||||
|
||||
msg = """
|
||||
名称|空间
|
||||
:--:|:--:
|
||||
"""
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
users = getCookie.GetQlEnvs().getCookies('YDYBJ_COOKIE')
|
||||
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
|
||||
print("获取到: "+str(len(users))+" 个用户")
|
||||
print("-------------------------------------------")
|
||||
|
||||
for user in users:
|
||||
signIn(user)
|
||||
|
||||
|
||||
# 签到
|
||||
def signIn(user):
|
||||
global msg
|
||||
|
||||
ad = 0
|
||||
payload = 'yaohuo:id34976'
|
||||
headers = {'Cookie': user['cookie']}
|
||||
|
||||
re = requests.request(
|
||||
"POST", "https://note.youdao.com/yws/api/daupromotion?method=sync", headers=headers, data=payload)
|
||||
if 'error' not in re.text:
|
||||
res = requests.request(
|
||||
"POST", "https://note.youdao.com/yws/mapi/user?method=checkin", headers=headers, data=payload)
|
||||
for i in range(3):
|
||||
resp = requests.request(
|
||||
"POST", "https://note.youdao.com/yws/mapi/user?method=adRandomPrompt", headers=headers, data=payload)
|
||||
ad += resp.json()['space'] // 1048576
|
||||
if 'reward' in re.text:
|
||||
sync = re.json()['rewardSpace'] // 1048576
|
||||
checkin = res.json()['space'] // 1048576
|
||||
# 签到成功
|
||||
print(user['name'] + " ---> " +
|
||||
str(sync + checkin + ad) + 'M\n')
|
||||
msg += user['name'] + "|" + \
|
||||
str(sync + checkin + ad) + 'M\n\n'
|
||||
else:
|
||||
print(user['name'] + " ---> " + 'cookie失效\n')
|
||||
msg += user['name'] + "|cookie失效\n\n"
|
||||
|
||||
print("-------------------------------------------")
|
||||
|
||||
|
||||
main()
|
||||
|
||||
print("\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
|
||||
|
||||
|
||||
notify.send("有道云笔记", msg)
|
||||
149
脚本库/APP版/抓包/瑞数通杀/2025-07-19_瑞数通杀_ea97566a.js
Normal file
149
脚本库/APP版/抓包/瑞数通杀/2025-07-19_瑞数通杀_ea97566a.js
Normal file
@@ -0,0 +1,149 @@
|
||||
// # Source: https://gitee.com/jdqlscript/yyt/blob/master/%E7%94%B5%E4%BF%A1/%E7%91%9E%E6%95%B0%E9%80%9A%E6%9D%80.js
|
||||
// # Raw: https://gitee.com/jdqlscript/yyt/raw/master/%E7%94%B5%E4%BF%A1/%E7%91%9E%E6%95%B0%E9%80%9A%E6%9D%80.js
|
||||
// # Repo: jdqlscript/yyt
|
||||
// # Path: 电信/瑞数通杀.js
|
||||
// # UploadedAt: 2025-07-19T22:58:22+08:00
|
||||
// # SHA256: ea97566a5088d6be6d9f7ad85fceb6bf745d8f79f8e8afcd2babf5e930e16e44
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
/*
|
||||
|
||||
const $ = new Env("瑞数通杀");
|
||||
|
||||
*/
|
||||
delete __filename
|
||||
delete __dirname
|
||||
ActiveXObject = undefined
|
||||
|
||||
window = global;
|
||||
|
||||
|
||||
content="content_code"
|
||||
|
||||
|
||||
navigator = {"platform": "Linux aarch64"}
|
||||
navigator = {"userAgent": "CtClient;11.0.0;Android;13;22081212C;NTIyMTcw!#!MTUzNzY"}
|
||||
|
||||
location={
|
||||
"href": "https://",
|
||||
"origin": "",
|
||||
"protocol": "",
|
||||
"host": "",
|
||||
"hostname": "",
|
||||
"port": "",
|
||||
"pathname": "",
|
||||
"search": "",
|
||||
"hash": ""
|
||||
}
|
||||
|
||||
i = {length: 0}
|
||||
base = {length: 0}
|
||||
div = {
|
||||
getElementsByTagName: function (res) {
|
||||
console.log('div中的getElementsByTagName:', res)
|
||||
if (res === 'i') {
|
||||
return i
|
||||
}
|
||||
return '<div></div>'
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
script = {
|
||||
|
||||
}
|
||||
meta = [
|
||||
{charset:"UTF-8"},
|
||||
{
|
||||
content: content,
|
||||
getAttribute: function (res) {
|
||||
console.log('meta中的getAttribute:', res)
|
||||
if (res === 'r') {
|
||||
return 'm'
|
||||
}
|
||||
},
|
||||
parentNode: {
|
||||
removeChild: function (res) {
|
||||
console.log('meta中的removeChild:', res)
|
||||
|
||||
return content
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
]
|
||||
form = '<form></form>'
|
||||
|
||||
|
||||
window.addEventListener= function (res) {
|
||||
console.log('window中的addEventListener:', res)
|
||||
|
||||
}
|
||||
|
||||
|
||||
document = {
|
||||
|
||||
|
||||
createElement: function (res) {
|
||||
console.log('document中的createElement:', res)
|
||||
|
||||
|
||||
if (res === 'div') {
|
||||
return div
|
||||
} else if (res === 'form') {
|
||||
return form
|
||||
}
|
||||
else{return res}
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
addEventListener: function (res) {
|
||||
console.log('document中的addEventListener:', res)
|
||||
|
||||
},
|
||||
appendChild: function (res) {
|
||||
console.log('document中的appendChild:', res)
|
||||
return res
|
||||
},
|
||||
removeChild: function (res) {
|
||||
console.log('document中的removeChild:', res)
|
||||
},
|
||||
getElementsByTagName: function (res) {
|
||||
console.log('document中的getElementsByTagName:', res)
|
||||
if (res === 'script') {
|
||||
return script
|
||||
}
|
||||
if (res === 'meta') {
|
||||
return meta
|
||||
}
|
||||
if (res === 'base') {
|
||||
return base
|
||||
}
|
||||
},
|
||||
getElementById: function (res) {
|
||||
console.log('document中的getElementById:', res)
|
||||
if (res === 'root-hammerhead-shadow-ui') {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setInterval = function () {}
|
||||
setTimeout = function () {}
|
||||
window.top = window
|
||||
|
||||
|
||||
'ts_code'
|
||||
|
||||
|
||||
|
||||
function main() {
|
||||
cookie = document.cookie.split(';')[0]
|
||||
return cookie
|
||||
}
|
||||
|
||||
102
脚本库/APP版/抓包/电信金豆话费获取查询/2025-07-19_电信金豆话费获取查询_108adee7.py
Normal file
102
脚本库/APP版/抓包/电信金豆话费获取查询/2025-07-19_电信金豆话费获取查询_108adee7.py
Normal file
@@ -0,0 +1,102 @@
|
||||
# Source: https://gitee.com/jdqlscript/yyt/blob/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E8%AF%9D%E8%B4%B9%E8%8E%B7%E5%8F%96%E6%9F%A5%E8%AF%A2.py
|
||||
# Raw: https://gitee.com/jdqlscript/yyt/raw/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E8%AF%9D%E8%B4%B9%E8%8E%B7%E5%8F%96%E6%9F%A5%E8%AF%A2.py
|
||||
# Repo: jdqlscript/yyt
|
||||
# Path: 电信old/电信2/电信金豆话费获取查询.py
|
||||
# UploadedAt: 2025-07-19T22:58:22+08:00
|
||||
# SHA256: 108adee7f631d1a668a42554330fde8cbcc867e3f2e415cde4f56f875e4d9094
|
||||
# Category: APP版/抓包
|
||||
# Evidence: APP/Android/iOS/device关键词
|
||||
|
||||
"""
|
||||
cron: 00 20 * * *
|
||||
new Env('电信金豆话费获取查询');
|
||||
"""
|
||||
"""
|
||||
使用方法:
|
||||
啥也不用设置,调用的面板配置的推送
|
||||
"""
|
||||
import json
|
||||
from collections import defaultdict
|
||||
import sys
|
||||
import os # 导入os模块用于检查文件是否存在
|
||||
|
||||
|
||||
# 控制变量,用于控制是否发送通知
|
||||
enable_notification = 1 # 0 不发送 1发送通知
|
||||
|
||||
# 如果需要发送通知,则尝试导入notify模块
|
||||
if enable_notification:
|
||||
try:
|
||||
from notify import send
|
||||
except ModuleNotFoundError:
|
||||
print("警告:未找到notify.py模块。程序将退出。")
|
||||
sys.exit(1)
|
||||
|
||||
# 定义日志文件路径
|
||||
log_file_path = '电信金豆换话费.log'
|
||||
|
||||
# 检查日志文件是否存在
|
||||
if not os.path.exists(log_file_path):
|
||||
print("垃圾都没中,还统计个锤子")
|
||||
sys.exit(0)
|
||||
|
||||
# 读取日志数据
|
||||
def read_log_data(log_file_path):
|
||||
try:
|
||||
with open(log_file_path, 'r', encoding='utf-8') as file:
|
||||
log_data = json.load(file)
|
||||
return log_data
|
||||
except Exception as e:
|
||||
print(f"读取日志数据时发生错误: {e}")
|
||||
return None
|
||||
|
||||
# 格式化日志输出
|
||||
def generate_log_output(log_data):
|
||||
log_lines = []
|
||||
|
||||
# 遍历每个月的数据
|
||||
for month, fees in log_data.items():
|
||||
log_lines.append(f"--- {month} ---") # 分割线,标识月份
|
||||
|
||||
# 收集每个手机号获得的所有话费类型
|
||||
phone_to_fees = defaultdict(set)
|
||||
|
||||
for fee_type, phones in fees.items():
|
||||
# 获取手机号列表
|
||||
phone_numbers = phones.strip('#').split('#') if phones else []
|
||||
|
||||
# 格式化输出日志行
|
||||
if phone_numbers:
|
||||
log_line = f"{fee_type} : " + ", ".join(phone_numbers)
|
||||
for phone in phone_numbers:
|
||||
phone_to_fees[phone].add(fee_type) # 记录手机号对应的所有话费类型
|
||||
else:
|
||||
log_line = f"{fee_type} : 还没有中的哦"
|
||||
|
||||
log_lines.append(log_line)
|
||||
|
||||
# 添加每个月的手机号统计信息
|
||||
log_lines.append("统计信息:")
|
||||
for phone, fee_types in phone_to_fees.items():
|
||||
log_lines.append(f"{phone} 中了: {', '.join(fee_types)}")
|
||||
|
||||
log_lines.append("") # 每个月份后添加空行,分隔月份数据
|
||||
|
||||
# 返回生成的日志内容
|
||||
return "\n".join(log_lines)
|
||||
|
||||
# 获取日志内容
|
||||
def get_log_content():
|
||||
log_data = read_log_data(log_file_path)
|
||||
if log_data:
|
||||
log_content = generate_log_output(log_data)
|
||||
return log_content
|
||||
return None
|
||||
|
||||
# 调用函数获取日志内容
|
||||
log_content = get_log_content()
|
||||
|
||||
# 如果获取到日志内容,则打印或者推送
|
||||
if log_content:
|
||||
print(log_content) # 在这里输出日志,您可以修改为推送日志的代码
|
||||
send('电信当月兑换统计', log_content)
|
||||
73
脚本库/APP版/抓包/百度贴吧/2023-10-25_bdtb_2ed7b1db.py
Normal file
73
脚本库/APP版/抓包/百度贴吧/2023-10-25_bdtb_2ed7b1db.py
Normal file
@@ -0,0 +1,73 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/bdtb.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/bdtb.py
|
||||
# Repo: yangro/ql
|
||||
# Path: bdtb.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: 2ed7b1db26174adf149b12b54b87b87d464a8cffe95d490efc914e0a1c6b9028
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
# coding=utf-8
|
||||
"""
|
||||
每日8:30
|
||||
cron: 0 30 8 * * ?
|
||||
new Env("百度贴吧")
|
||||
"""
|
||||
import requests
|
||||
import notify
|
||||
import utils.tool as TOOL
|
||||
import utils.getCookie as getCookie
|
||||
|
||||
|
||||
global msg
|
||||
|
||||
msg = """
|
||||
名称|状态
|
||||
:--:|:--:
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
users = getCookie.GetQlEnvs().getCookies('BDTB_COOKIE')
|
||||
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
|
||||
print("获取到: "+str(len(users))+" 个用户")
|
||||
print("-------------------------------------------")
|
||||
|
||||
for user in users:
|
||||
signIn(user)
|
||||
|
||||
|
||||
# 签到
|
||||
def signIn(user):
|
||||
global msg
|
||||
url = 'http://c.tieba.baidu.com/c/c/forum/msign'
|
||||
data = user['cookie']
|
||||
res = requests.post(url=url, data=data)
|
||||
json = res.json()
|
||||
|
||||
code = json['error_code']
|
||||
if (code == '0'):
|
||||
userMsg = json['error']['usermsg']
|
||||
if (userMsg == '成功'):
|
||||
print(user['name'] + " ---> " + "签到成功\n")
|
||||
msg += user['name'] + "|" + "签到成功" + "\n\n"
|
||||
else:
|
||||
if (userMsg == "你签得太快了,先看看贴子再来签吧:)"):
|
||||
print(user['name'] + " ---> " + "今日已签到" + "\n")
|
||||
msg += user['name'] + "|" + "今日已签到" + "\n\n"
|
||||
else:
|
||||
print(user['name'] + " ---> " + userMsg+"\n")
|
||||
msg += user['name'] + "|" + userMsg + "\n\n"
|
||||
else:
|
||||
errMsg = json['error_msg']
|
||||
print(user['name'] + " ---> " + errMsg + "\n")
|
||||
msg += user['name'] + "|" + errMsg + "\n\n"
|
||||
|
||||
print("-------------------------------------------\n")
|
||||
|
||||
|
||||
main()
|
||||
|
||||
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
|
||||
|
||||
notify.send("百度贴吧", msg)
|
||||
75
脚本库/APP版/抓包/百度贴吧/2023-10-25_bdtb_6343e8c2.py
Normal file
75
脚本库/APP版/抓包/百度贴吧/2023-10-25_bdtb_6343e8c2.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# Source: https://gitee.com/yangro/ql/blob/main/bak/bdtb.py
|
||||
# Raw: https://gitee.com/yangro/ql/raw/main/bak/bdtb.py
|
||||
# Repo: yangro/ql
|
||||
# Path: bak/bdtb.py
|
||||
# UploadedAt: 2023-10-25T14:45:53+08:00
|
||||
# SHA256: 6343e8c273006584d3aca462016087152ecb29707ad13272b8100c0f652e1677
|
||||
# Category: APP版/抓包
|
||||
# Evidence: cookie/token/authorization/header
|
||||
|
||||
# coding=utf-8
|
||||
"""
|
||||
每日8:30
|
||||
cron: 0 30 8 * * ?
|
||||
new Env("百度贴吧")
|
||||
"""
|
||||
import requests
|
||||
import utils.db as DB
|
||||
import utils.tool as TOOL
|
||||
|
||||
global msg
|
||||
|
||||
msg = """
|
||||
名称|状态
|
||||
:--:|:--:
|
||||
"""
|
||||
mysql = DB.mysql()
|
||||
|
||||
|
||||
def main():
|
||||
dbUser = mysql.select_all("select * from tb_bdtb where status = 0")
|
||||
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
|
||||
print("获取到: "+str(len(dbUser))+" 个用户")
|
||||
print("-------------------------------------------")
|
||||
|
||||
for user in dbUser:
|
||||
signIn(user)
|
||||
|
||||
|
||||
# 签到
|
||||
def signIn(user):
|
||||
global msg
|
||||
url = 'http://c.tieba.baidu.com/c/c/forum/msign'
|
||||
data = user['cookie']
|
||||
res = requests.post(url=url, data=data)
|
||||
json = res.json()
|
||||
|
||||
code = json['error_code']
|
||||
if (code == '0'):
|
||||
userMsg = json['error']['usermsg']
|
||||
if (userMsg == '成功'):
|
||||
print(user['user_name'] + " ---> " + "签到成功\n")
|
||||
msg += user['user_name'] + "|" + "签到成功" + "\n\n"
|
||||
else:
|
||||
if (userMsg == "你签得太快了,先看看贴子再来签吧:)"):
|
||||
print(user['user_name'] + " ---> " + "今日已签到" +"\n")
|
||||
msg += user['user_name'] + "|" + "今日已签到" + "\n\n"
|
||||
else:
|
||||
print(user['user_name'] + " ---> " + userMsg+"\n")
|
||||
msg += user['user_name'] + "|" + userMsg + "\n\n"
|
||||
else:
|
||||
errMsg = json['error_msg']
|
||||
print(user['user_name'] + " ---> " + errMsg +"\n")
|
||||
msg += user['user_name'] + "|" + errMsg + "\n\n"
|
||||
|
||||
|
||||
print("-------------------------------------------\n")
|
||||
|
||||
|
||||
main()
|
||||
|
||||
# 一定要关闭数据库
|
||||
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
|
||||
mysql.close()
|
||||
|
||||
TOOL.msgSend("d9ff2162c1584f6c834204b0bca56c54", " ", msg, True)
|
||||
48
脚本库/APP版/抓包/螃蟹租号顶一顶/2025-10-28_螃蟹租号顶一顶_d226aa65.js
Normal file
48
脚本库/APP版/抓包/螃蟹租号顶一顶/2025-10-28_螃蟹租号顶一顶_d226aa65.js
Normal file
@@ -0,0 +1,48 @@
|
||||
// # Source: https://github.com/NaroisCool/naro-scripts/blob/master/%E8%9E%83%E8%9F%B9%E7%A7%9F%E5%8F%B7%E9%A1%B6%E4%B8%80%E9%A1%B6.js
|
||||
// # Raw: https://raw.githubusercontent.com/NaroisCool/naro-scripts/master/%E8%9E%83%E8%9F%B9%E7%A7%9F%E5%8F%B7%E9%A1%B6%E4%B8%80%E9%A1%B6.js
|
||||
// # Repo: NaroisCool/naro-scripts
|
||||
// # Path: 螃蟹租号顶一顶.js
|
||||
// # UploadedAt: 2025-10-28T05:54:28+08:00
|
||||
// # SHA256: d226aa65a404bab483d61dbe95bb8088170487c349b8b982b5d7b11d006c33f2
|
||||
// # Category: APP版/抓包
|
||||
// # Evidence: cookie/token/authorization/header
|
||||
//
|
||||
|
||||
/*
|
||||
cron: 0 0 9 * * *
|
||||
螃蟹租号顶一顶
|
||||
*/
|
||||
const axios = require('axios')
|
||||
const notify = require('./sendNotify')
|
||||
const header = {
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
|
||||
"Accept": "application/json, text/plain, */*",
|
||||
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
|
||||
"Content-Type": "application/json;charset=utf-8",
|
||||
"Authorization": process.env.pxtoken,
|
||||
"LoginStatus": "true",
|
||||
"x-fronend-tcpport": "5628657",
|
||||
"Sec-Fetch-Dest": "empty",
|
||||
"Sec-Fetch-Mode": "cors",
|
||||
"Sec-Fetch-Site": "same-site"
|
||||
}
|
||||
const pids = [29217,113576]
|
||||
const game_ids = [79,61]
|
||||
for (pid of pids){
|
||||
for (game_id of game_ids){
|
||||
const payload = `{\"game_id\":${game_id},\"product_id\":${pid}}`
|
||||
axios.post('https://api.pxb7.com/api/product/gore',payload,{headers:header} )
|
||||
.then((res) => {
|
||||
notify.sendNotify('螃蟹租号顶一顶',JSON.stringify(res.data))
|
||||
console.log(res.data)
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error)
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user