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,141 @@
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/Nodeseek.py
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Nodeseek.py
# Repo: CN-Grace/QinglongScripts
# Path: Nodeseek.py
# UploadedAt: 2026-05-23T15:48:24Z
# SHA256: fe954847cd0f827c46a977716be00547e6496cf4df72f558542e5c846db4a19d
# Category: web版/抓包
# Evidence: web/H5关键词 + cookie/token/header
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
cron: 0 0 * * *
new Env("NodeSeek签到")
NodeSeek 论坛自动签到脚本
- 使用 curl_cffi 模拟浏览器指纹
- 支持随机延迟签到
"""
import os
import random
import time
from datetime import datetime
from typing import Tuple
import requests
from curl_cffi import requests as cffi_requests
from utils import log_info, log_success, log_warning, log_error, beijing_now, beijing_time_str
from notifier import send as notify_send
# ==================== 用户配置 ====================
NS_COOKIE = os.getenv("NS_COOKIE", "").strip()
NS_RANDOM = os.getenv("NS_RANDOM", "true").strip().lower()
NS_IMPERSONATE = os.getenv("NS_IMPERSONATE", "chrome110").strip()
def _curl_post_json(url: str, headers: dict, timeout: int = 25):
return cffi_requests.post(url, headers=headers, json={}, timeout=timeout, impersonate=NS_IMPERSONATE)
def _normalize_random_flag(v: str) -> str:
v = (v or "").strip().lower()
return v if v in ("true", "false") else "true"
def _sleep_jitter_before_checkin() -> int:
"""签到前随机延迟 0~5 分钟"""
delay_seconds = random.randint(0, 5 * 60)
if delay_seconds <= 0:
log_info("签到前随机延迟: 0s跳过")
return 0
minutes = delay_seconds // 60
seconds = delay_seconds % 60
log_info(f"签到前随机延迟: {minutes}m {seconds}s ...")
time.sleep(delay_seconds)
return delay_seconds
def nodeseek_checkin(cookie: str, ns_random: str) -> Tuple[bool, str, str]:
"""返回 (ok, status, message)"""
if not cookie:
return False, "invalid", "无有效 Cookie"
random_flag = _normalize_random_flag(ns_random)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0",
"origin": "https://www.nodeseek.com",
"referer": "https://www.nodeseek.com/board",
"Content-Type": "application/json",
"Cookie": cookie,
}
url = f"https://www.nodeseek.com/api/attendance?random={random_flag}"
try:
start = datetime.now()
r = _curl_post_json(url, headers=headers)
elapsed_ms = int((datetime.now() - start).total_seconds() * 1000)
data = None
try:
data = r.json()
except Exception:
pass
msg = ""
success_flag = None
if isinstance(data, dict):
msg = str(data.get("message") or "")
success_flag = data.get("success")
if "鸡腿" in msg or bool(success_flag) is True:
return True, "success", msg or "签到成功"
if "已完成签到" in msg:
return True, "already", msg
if isinstance(data, dict) and data.get("status") == 404:
return False, "invalid", msg or "Cookie 已失效"
if getattr(r, "status_code", 0) >= 400:
snippet = (r.text or "").strip()[:200]
return False, "error", f"HTTP {r.status_code}: {snippet or '请求失败'}"
return False, "fail", msg or "签到失败"
except Exception as e:
return False, "error", f"签到异常: {e}"
def _format_result(ok: bool, status: str, message: str, elapsed_ms: int, delay_seconds: int) -> str:
icon = "" if ok else ""
delay_str = f"{delay_seconds // 60}m {delay_seconds % 60}s" if delay_seconds else "0s"
lines = [
f"{icon} 状态: {status}",
f"🕒 时间: {beijing_time_str()} (UTC+8)",
f"⏱️ 耗时: {elapsed_ms} ms",
f"🕯️ 延迟: {delay_str} (签到前随机延迟)",
f"📝 说明: {message}",
]
return "\n".join(lines)
def main() -> int:
log_info(f"NodeSeek 签到脚本启动(单账号)")
if not NS_COOKIE:
content = _format_result(False, "invalid", "未配置 NS_COOKIE无法签到。", 0, 0)
print("\n" + content)
notify_send("NodeSeek 签到结果", content)
return 1
delay_seconds = _sleep_jitter_before_checkin()
start = datetime.now()
ok, status, message = nodeseek_checkin(NS_COOKIE, NS_RANDOM)
elapsed_ms = int((datetime.now() - start).total_seconds() * 1000)
content = _format_result(ok, status, message, elapsed_ms, delay_seconds)
title = f"NodeSeek 签到结果 @ {beijing_time_str()}"
print("\n" + content)
notify_send(title, content)
return 0 if ok else 1
if __name__ == "__main__":
raise SystemExit(main())