校长bloG
type: channel
link: https://vpsaz.cn/
description: 一个出生于北方的男孩er
items: 抖音聊天监控与自动回复
items: M3U8分片式广告过滤
items: ZeppLife 步数同步
items: [完结] Telegram 机器人开发
items: PHPAPI开发笔记
items: 影视搜索源码
items: 网站标题首次打开滚动文本
items: APP Soul 透明头像底色
items: 百度识图网页版入口
items: TT语音隐身原理

抖音聊天监控与自动回复
type: item
date: 2026-04-10T06:36:00+08:00
description: 前言抖音PC端没有开放聊天API，想做消息监控或自动回复只能自己动手。传统方案是抓包拦截WebSocket，门槛高且容易被检测。本文介绍一种纯前端注入方案，零依赖，浏览器控制台粘贴即用。核心思路MutationObserver 监听DOM变化，实时捕获新消息data-index="0" 始终指向最新一条消息，避免全量扫描data-index递增遍历 查找连续消息的真实发送者昵称document.execCommand 向Slate富文本编辑器写入内容并模拟发送踩坑记录消息重复输出[class*="message"] 选择器太宽泛，匹配到了消息容器的子元素，一条消息被处理多次。改用精确类名 .messageMessageBoxmessageBox 解决。昵称互相覆盖最初用一个变量 lastNick 记住上一个昵称，但群聊里多个人轮流发言会互相覆盖。拆分为 lastSelfNick / lastOtherNick 后仍然有问题——群聊中任何非己方消息的 isSelf 都是 false，无法区分是A发的还是B发的。真正解决是用 data-index 向上遍历查找。抖音群聊的消息结构中，同一个人连续发消息时只有第一条显示昵称，后续消息省略头像和昵称元素。当我们需要获取当前消息的发送者昵称时，直接查 .MessageBoxMessageTitleavatarName 元素，如果没有就往 data-index+1 的消息找，直到找到有昵称的为止。发送后旧消息重复DOM重新渲染后元素引用失效，Set 去重失败。改用 data-index="0" 只监听最新消息，配合 lastContent 内容对比去重。两个data-index="0"左侧会话列表也有 data-index="0"，querySelector 会误匹配。遍历所有 data-index="0"，只取包含 .messageMessageBoxmessageBox 的那个。写入输入框但发送按钮禁用直接改 textContent 不会触发Slate编辑器内部状态更新。改用 document.execCommand('insertText') + Selection API，Slate能正确识别。连发相同消息被吞按内容去重导致相同内容被过滤。改为只对比 lastContent，新消息插入后 data-index="0" 的DOM元素变了，自然不会被误判。昵称元素根本不存在最初尝试用"有没有头像"来判断是否需要查历史，这是不对的。.commonIMAvataravatarContainer 不存在不代表没有昵称，应该直接查 .MessageBoxMessageTitleavatarName 元素。功能实时监听：文本、图片、大表情、小表情、分享视频昵称识别：连续消息无头像时自动往上查找真实发送者关键词自动回复：支持精确匹配和模糊匹配，3秒冷却防刷屏重复注入自动清理：断开旧Observer，重新启动使用方法打开抖音PC端，进入群聊页面修改 autoReply 数组配置关键词和回复F12打开控制台，粘贴代码回车// matchType: 'exact' = 精确匹配, 'fuzzy' = 模糊匹配 const autoReply = [ { keyword: '在吗', reply: '在的~', matchType: 'exact' }, { keyword: '加群', reply: '群主，群众中有坏蛋', matchType: 'fuzzy' } ];完整代码(function() { if (window.__chatMonitorObserver) { window.__chatMonitorObserver.disconnect(); window.__chatMonitorObserver = null; console.log('[已移除旧注入，重新启动]'); } window.__chatMonitorRunning = true; let lastContent = ''; let lastMsgEl = null; // matchType: 'exact' = 精确匹配(消息内容完全等于关键词), 'fuzzy' = 模糊匹配(消息内容包含关键词) const autoReply = [ { keyword: '建档', reply: '微扫置顶小程序码！', matchType: 'exact' }, { keyword: '在吗', reply: '在的~', matchType: 'exact' }, { keyword: '加群', reply: '群主，群众中有坏蛋', matchType: 'fuzzy' } ]; let replyCooldown …

M3U8分片式广告过滤
type: item
date: 2025-07-06T11:12:00+08:00
description: 🎥 全新升级 - 智能广告过滤网页播放器，畅享纯净观影体验！购买地址：初心杂货铺 互联网视频内容丰富，但广告频繁插播，严重影响了观影体验。为了解决这一痛点，我们推出了全新的智能广告过滤播放器，让你轻松告别片头广告和无聊插播，只专注于你想看的内容。🔥 为什么选择这款播放器？随着在线视频的发展，广告时长和频次也越来越高。传统播放器常常让用户忍受：开头长时间的片头广告中间反复插入的广告片段无法跳过的强制广告我们的播放器在此基础上引入智能广告过滤技术，自动识别并跳过广告内容，无需用户手动快进，带来前所未有的流畅观影体验。🌟 核心功能介绍1. 智能广告自动过滤全自动识别视频流中的广告片段，包括片头广告、插播广告、以及其他干扰内容过滤过程无缝衔接，跳过广告不影响视频连续性和画质不影响正常视频播放，确保观影体验纯净无忧2. 多格式视频支持兼容 .m3u8(HLS)、.flv(Flash)、.mpd(DASH)主流流媒体格式适配各种在线视频平台和私有视频资源，支持多样化播放需求3. 跨平台兼容，随时随地观影支持主流桌面浏览器 (Chrome、Firefox、Edge)适配移动端浏览器 (Android、iOS)响应式界面设计，自动调整屏幕尺寸和布局，保证手机和平板端观看体验4. 现代化播放器 UI简洁美观，支持亮暗主题自由切换支持截图、倍速播放、快进快退、画面翻转等高级功能支持悬浮小窗（画中画）播放，提升多任务操作体验5. 贴心用户交互提示播放器初始化时提示“广告过滤已开启”，让你随时掌握状态硬件加速状态检测，自动启用优化播放性能异常播放自动修复，减少卡顿和崩溃💡 适用场景举例个人观影：无论是喜欢追剧、看电影还是短视频，都能畅享无广告干扰的观看体验教育培训：避免教学视频被广告打断，保证学习连贯性内容创作：视频创作者可嵌入播放器，提升用户体验和留存率企业展示：企业宣传片播放更专业，不被广告侵扰🎯 未来展望我们正在不断完善广告过滤算法，未来将加入：智能跳广告时长显示，让用户了解跳过的广告时间自定义广告过滤规则，支持用户手动添加关键词或白名单多语言支持，覆盖更广泛用户群播放数据统计与分析，帮助内容提供方更好优化视频体验🚀 立即体验体验网址：Mvideo 打开网页，视频自动加载并播放，广告自动跳过，即刻享受纯净视听盛宴！🙋 常见问题Q1：播放器支持哪些视频格式？ A1：目前支持 HLS (.m3u8)、FLV (.flv)、DASH (.mpd)三大主流格式。Q2：广告过滤会不会误杀正片内容？ A2：过滤逻辑经过多轮优化，尽可能保证仅跳过广告片段，不影响正片内容。Q3：需要安装额外插件或扩展吗？ A3：完全不需要，所有功能均集成在播放器内部，打开即可使用。🙌 结语广告虽然是内容平台的重要收入来源，但用户体验同样重要。我们希望通过这款智能广告过滤播放器，让你重新找回纯粹、流畅、舒适的观影感受。未来，我们将持续投入优化，让每一位观众都能享受更美好的视频时光。感谢关注，欢迎分享和反馈！ 祝观影愉快！🎉

ZeppLife 步数同步
type: item
date: 2025-02-25T13:39:00+08:00
description: <?php // error_reporting(0); header("Access-Control-Allow-Origin:*"); header('Content-type:text/json; charset=utf-8'); $user = '小米运动帐号'; $pwd = '小米运动密码'; $steps = 66666; // 要刷的步数 $code = access_code($user, $pwd); if (strlen($code) > 3) { $tokenjson = login_token($code); $login_token = $tokenjson['token_info']['login_token']; $user_id = $tokenjson['token_info']['user_id']; $appjson = get_app_token($login_token); $user_id = $appjson['token_info']['user_id']; $app_token = $appjson['token_info']['app_token']; $t = get_time(); $time = date("Y-m-d", time()); $data_json = data_json($time, $steps); $res = change_steps($t, $user_id, $app_token, $data_json); echo $res; } else { exit("登录失败"); } exit(); function access_code($user, $pwd) { $url = "https://api-user.huami.com/registrations/+86{$user}/tokens"; $header = ["Content-Type " => "application/x-www-form-urlencoded;charset=UTF-8"]; $post_data = array( "client_id" => "HuaMi", "password" => $pwd, "redirect_uri" => "https://s3-us-west-2.amazonaws.com/hm-registration/successsignin.html", "token" => "access" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_USERAGENT, "MiFit/4.6.0 (iPhone; iOS 14.0.1; Scale/2.00)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_HEADER, true); $output = curl_exec($ch); preg_match_all('/access=(.*?)&country_code/i', $output, $out); curl_close($ch); return $out[1][0]; } function login_token($code) { $url = "https://account.huami.com/v2/client/login"; $header = ["Content-Type " => "application/x-www-form-urlencoded;charset=UTF-8"]; $post_data = array( "app_name" => "com.xiaomi.hm.health", "app_version" => "4.6.0", "code" => $co…

[完结] Telegram 机器人开发
type: item
date: 2025-01-04T15:53:00+08:00
description: 一、创建机器人找到BotFather 打开Telegram，搜索并找到@BotFather（官方机器人创建工具）。创建新机器人 向@BotFather发送指令/newbot，按照提示完成以下步骤：输入机器人的昵称（显示名称）。设置机器人的用户名（必须以_bot或Bot结尾，且唯一）。创建成功后，@BotFather会返回一个API Token，务必妥善保存，这是控制机器人的关键。二、基础设置编辑机器人属性 通过@BotFather的指令/mybots，选择你创建的机器人，进行以下设置：名称：/setname修改显示名称。描述：/setdescription设置机器人的简短描述。头像：/setuserpic上传机器人头像。命令：/setcommands设置自定义命令列表（如/start、/help等）。配置机器人权限群组权限：通过/setjoingroups设置机器人是否可加入群组。隐私模式：通过/setprivacy设置机器人是否可读取所有群组消息（默认仅响应以/开头的命令）。三、编程实现框架代码已完成，接口文件不在此处展示！四、部署与测试本地测试使用getUpdates方法轮询消息，适合本地调试。运行代码后，向机器人发送消息，检查是否正常响应。Webhook部署准备一个支持HTTPS的服务器（如Google Cloud或Heroku）。设置Webhook URL：通过API setWebhook将机器人绑定到服务器的回调地址。https://api.telegram.org/bot<token>/setWebhook?url=<your_server_url>

PHPAPI开发笔记
type: item
date: 2024-12-30T12:27:00+08:00
description: 为了确保接口的返回格式统一且易于维护，我整理了一些通用的响应格式和状态码规范。这些笔记不仅帮助我在开发过程中保持一致性，也便于后续的调试和维护。设置响应头每个API的响应头可以统一设置如下，以确保跨域访问和正确的内容类型：header('Access-Control-Allow-Origin: *'); // 允许所有来源访问 header('Access-Control-Allow-Methods: POST, GET'); // 允许的访问方法 header('Content-type: application/json;charset=utf-8'); // 设置响应头编码为UTF-8JSON格式化为了确保JSON数据的可读性和一致性，可以使用 json_encode 的以下选项：$options = JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES; echo json_encode($response, $options);JSON_NUMERIC_CHECK：将所有数字字符串转换为数字。JSON_PRETTY_PRINT：格式化JSON，便于阅读。JSON_UNESCAPED_UNICODE：不对中文字符进行转义。JSON_UNESCAPED_SLASHES：不对斜杠进行转义。常见HTTP状态码在处理HTTP请求时，以下是一些常见的状态码及其说明：200：请求成功，表示服务器成功处理了请求。400：请求错误，比如参数错误或请求格式不正确。401：未授权，通常指用户未提供有效的身份验证信息。403：禁止访问，用户没有权限访问该资源。404：资源未找到，表示请求的API端点不存在。BaseResponse响应格式为了使API响应格式保持一致，可以使用一个通用的 BaseResponse 函数：function BaseResponse($code, $message, $data = []) { $response = [ 'code' => $code, 'message' => $message, 'data' => $data ]; // 设置响应头 header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET'); header('Content-type: application/json;charset=utf-8'); // 输出JSON echo json_encode($response, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); exit(); }接口文档规范编写接口文档时，可以按照以下结构进行描述：接口标题：简要描述接口的功能。接口描述：详细说明接口的作用。请求方法：例如 POST 或 GET。请求URL：接口的访问地址。请求参数：参数名、类型、是否必填、说明返回参数：参数名、类型、说明

影视搜索源码
type: item
date: 2024-12-19T15:35:00+08:00
description: <?php function getInitialTheme() { if (isset($_COOKIE['theme_preference'])) { return $_COOKIE['theme_preference'] === 'dark' ? 'dark' : 'light'; } if (isset($_SERVER['HTTP_ACCEPT'])) { $accept = $_SERVER['HTTP_ACCEPT']; if (strpos($accept, 'prefers-color-scheme: dark') !== false) { return 'dark'; } } return 'light'; } $initialTheme = getInitialTheme(); $selected_source = isset($_GET['y']) ? $_GET['y'] : (isset($_COOKIE['selected_source']) ? $_COOKIE['selected_source'] : '1'); $search_query = isset($_GET['search']) ? urlencode($_GET['search']) : ''; $search_results = []; if ($search_query) { $search_url = "https://baiapi.cn/api/ysss/?apikey=密钥&y={$selected_source}&wd={$search_query}"; $search_data = @file_get_contents($search_url); if ($search_data) { $search_results = json_decode($search_data, true); } } $movie_details = null; if (isset($_GET['movie_id'])) { $details_url = "https://baiapi.cn/api/ysss/?apikey=密钥&y={$selected_source}&id=". urlencode($_GET['movie_id']); $details_data = @file_get_contents($details_url); if ($details_data) { $movie_details = json_decode($details_data, true); } } ?> <html lang="zh-CN" data-theme="<?php echo $initialTheme; ?>"> 影视搜索 <i class="<?php echo $initialTheme === 'dark' ? 'fas fa-sun' : 'fas fa-moon'; ?>"> 📢 免责声明 本站所有内容均来自互联网，本站不会保存、复制或传播任何视频文件，也不对本站上的任何内容负法律责任。如果本站部分内容侵犯您的版权请告知，在必要证明文件下我们第一时间撤除。 请勿相信视频中的任何广告！ 开源地址：GitHub 5 秒后可关闭 影视搜索 <input type="text" name="search" value="<?php echo isset($_GET['search']) ? htmlspecialchars($_GET['search']) : ''; ?>" placeholder="请输入影片名称" style="flex-grow: 1; padding: 10px 10px; font-size: 16px; border: 1px solid var(--border-color); border-radius: 5px; margin-right: 10px; background-color: var(--input-bg); color: var(--input-text);"/> <option value="1" <?php echo ($selected_source == '1') ? 'selected' : ''; ?>>片源1 <option value="2" <?php echo ($selected_source == '2') ? 'selected' : ''; ?>>片源2 <option value="3" <?php echo ($selected_source == '3') ? 'selected' : ''; ?>>片源3 <option value="4" <?ph…

网站标题首次打开滚动文本
type: item
date: 2023-09-23T00:23:00+08:00

APP Soul 透明头像底色
type: item
date: 2023-03-19T20:20:00+08:00
description: 之前有人问soul如何设置怀旧头像的透明底色，看效果图！[gallery][/gallery]方法其实很简单，先设置一个你喜欢的怀旧头像(底色无所谓)，然后进入超萌捏脸捏一个临时头像保存，最后打开历史头像切换回之前使用的怀旧头像即可！步骤设置怀旧头像 > 捏临时头像 > 历史头像中切换怀旧头像

百度识图网页版入口
type: item
date: 2023-01-14T23:20:00+08:00
description: 百度为了让更多的用户引入APP端，关闭了百度识图网页版查询入口。其实这个入口还是存在的，只不过百度上搜不到，通过以下网址可以进入。https://image.baidu.com/?fr=shitu

TT语音隐身原理
type: item
date: 2022-12-04T02:03:00+08:00
description: 没有任何技术可言，只要利用抓包软件就可以实现，这里说的抓包并不是指http/https 协议的抓包，而是TCP/UDP 一般来说如果加密不算复杂可以完全逆向出来，这样的话能做到的权限就更大，明文的数据更好，很遗憾的是现在已经很少用明文了都是加密了的数据。抓包原理涉及到hook的知识，不管是游戏还是软件发送数据包的函数就这么几个，TCP协议使用的send、recv、WSASend、WSARecv，UDP协议使用的sendto、recvfrom、WSASendTo、WSARecvFrom。而TT语音的数据就用到了WSAend发送，可以通过hook获取到封包的数据存储然后重发和修改发送都是可以实现的，hook api还可以进行拦截失效，同理数据包也是如此。这里不过多解释，感兴趣的话可以自己去了解。BUG版本：1.7.5 ~ 1.7.8Q：为什么要抓包进自己房间？A：在其他房间发送进入自己房间的数据包，由于本地客户端不会退出，所以就停留在别人房间了。