# Source: https://github.com/LinYuanovo/AutoTaskScripts/blob/main/miniapp/%E9%93%B6%E9%B1%BC%E8%B4%A8%E4%BA%AB.py # Raw: https://raw.githubusercontent.com/LinYuanovo/AutoTaskScripts/main/miniapp/%E9%93%B6%E9%B1%BC%E8%B4%A8%E4%BA%AB.py # Repo: LinYuanovo/AutoTaskScripts # Path: miniapp/银鱼质享.py # UploadedAt: 2025-08-27T15:31:08+08:00 # SHA256: 268054af55717b04f504b744a0d78db677dcc6b46d085ce5db1e93d8e5b09527 # Category: 微信小程序/抓包版 # Evidence: appid/openid/session_key/encryptedData等小程序字段 """ 作者: 临渊 日期: 2025/6/18 小程序: 银鱼质享 功能: 看视频、提现 变量: yyzx='authori-zation' (n05.sentezhenxuan.com域名下authori-zation) 多个账号用换行分割 定时: 一天一次 cron: 10 10 * * * 更新日志: 2025/6/18: 初始化脚本 """ import random import requests import os import logging import traceback from datetime import datetime import time class AutoTask: def __init__(self, site_name): """ 初始化自动任务类 :param site_name: 站点名称,用于日志显示 """ self.site_name = site_name self.host = "n05.sentezhenxuan.com" self.user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/8555" self.setup_logging() def setup_logging(self): """ 配置日志系统 """ logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s\t- %(message)s', datefmt='%Y-%m-%d %H:%M:%S', handlers=[ # logging.FileHandler(f'{self.site_name}_{datetime.now().strftime("%Y%m%d")}.log', encoding='utf-8'), # 保存日志 logging.StreamHandler() ] ) def check_env(self): """ 检查环境变量 :return: 环境变量字符串 """ try: # 从环境变量获取cookie cookie = os.getenv(f"yyzx") if not cookie: logging.warning(f"[检查环境变量]没有找到环境变量yyzx,退出") return None # 多个账号用换行分割 cookies = cookie.split('\n') for cookie in cookies: if "=" in cookie: cookie = cookie.split("=")[1] yield cookie else: yield cookie except Exception as e: logging.error(f"[检查环境变量]发生错误: {str(e)}\n{traceback.format_exc()}") raise def get_video_list(self, host, cookie): """ 获取视频列表 :param host: 域名 :param cookie: cookie :return: 视频列表 """ try: url = f"https://{host}/api/video/list?page=1&limit=10&status=1&source=0&isXn=1" headers = { 'authori-zation': cookie, 'User-Agent': self.user_agent } response = requests.get(url, headers=headers) response.raise_for_status() response_json = response.json() video_list = response_json.get('data', []) return video_list except Exception as e: logging.error(f"[获取视频列表]发生错误: {str(e)}\n{traceback.format_exc()}") return [] def watch_video(self, host, cookie, video_id, watch_time): """ 执行看视频 :param host: 域名 :param cookie: cookie :param video_id: 视频id :param watch_time: 观看时间 """ try: url = f"https://{host}/api/video/videoJob" headers = { 'authori-zation': cookie, 'User-Agent': self.user_agent } # 获取当前时间戳(毫秒) current_timestamp = int(datetime.now().timestamp() * 1000) payload = { "vid": video_id, "startTime": current_timestamp, "endTime": current_timestamp + watch_time + 1000, "baseVersion": "3.3.5", "playMode": 0 } response = requests.post(url, headers=headers, json=payload) response.raise_for_status() # 处理响应 response_json = response.json() if response_json.get('status') == 200: logging.info(f"[看视频]成功,视频ID: {video_id}") return True else: logging.warning(f"[看视频]失败: {response_json['msg']}") return False except requests.RequestException as e: logging.error(f"[看视频]发生网络错误: {str(e)}\n{traceback.format_exc()}") return False except Exception as e: logging.error(f"[看视频]发生未知错误: {str(e)}\n{traceback.format_exc()}") return False def update_withdraw_info(self, host, cookie): """ 更新提现信息 :param host: 域名 :param cookie: cookie :return: 当前余额 """ try: url = f"https://{host}/api/updateTxInfo" headers = { 'authori-zation': cookie, 'User-Agent': self.user_agent, 'content-type': 'application/json' } response = requests.get(url, headers=headers) response.raise_for_status() response_json = response.json() if response_json.get('status') == 200: logging.info(f"[更新提现信息]当前余额:{response_json['data']['now_money']}元") balance = float(response_json['data']['now_money']) return balance else: logging.warning(f"[更新提现信息]失败: {response_json['msg']}") return 0 except Exception as e: logging.error(f"[更新提现信息]发生错误: {str(e)}\n{traceback.format_exc()}") return 0 def withdraw(self, host, cookie): """ 执行提现 :param host: 域名 :param cookie: cookie """ try: url = f"https://{host}/api/userTx" headers = { 'Host': host, 'Connection': 'keep-alive', 'charset': 'utf-8', 'form-type': 'routine-zhixiang', 'referer': 'https://servicewechat.com/wx5b82dfe3747e533f/5/page-frame.html', 'authori-zation': cookie, 'User-Agent': self.user_agent, 'content-type': 'application/json' } response = requests.get(url, headers=headers) response.raise_for_status() response_json = response.json() if response_json.get('status') == 200: logging.info(f"[提现]{response_json['msg']}") return True else: logging.warning(f"[提现]失败: {response_json['msg']}") return False except Exception as e: logging.error(f"[提现]发生错误: {str(e)}\n{traceback.format_exc()}") return False def run(self): """ 运行任务 """ try: logging.info(f"【{self.site_name}】开始执行任务") # 1. 检查cookie for index, cookie in enumerate(self.check_env(), 1): logging.info("") logging.info(f"------ 【账号{index}】开始执行任务 ------") # 2. 获取视频列表 video_list = self.get_video_list(self.host, cookie) if not video_list: logging.warning(f"[获取视频列表]失败,跳过当前账号看视频任务") # 3. 执行看视频任务 for video in video_list: video_id = video['id'] if video_id: watch_time = video['wait_time'] self.watch_video(self.host, cookie, video_id, watch_time) time.sleep(random.randint(10, 15)) # 4. 提现 user_balance = self.update_withdraw_info(self.host, cookie) if user_balance >= 0.2: self.withdraw(self.host, cookie) else: logging.warning(f"[提现]当前余额不足0.2元,跳过提现") logging.info(f"------ 【账号{index}】执行任务完成 ------") except Exception as e: logging.error(f"【{self.site_name}】执行过程中发生错误: {str(e)}\n{traceback.format_exc()}") if __name__ == "__main__": auto_task = AutoTask("银鱼质享") auto_task.run()