Xuan's blog - 功能增强
type: channel
link: https://blog.ybyq.wang/category/feature-enhancement/
description: 博客功能扩展、交互优化、视觉美化教程
items: 解决AI摘要不显示的三种方案 -AIsummary插件
items: Typecho handsome 睡眠记录数据展示插件 - SleepData
items: Handsome 主题导航栏添加热榜聚合功能教程
items: Typecho handsome 添加评论区OwO表情包 - QQ,抖音,B站等
items: Typecho handsome 侧边栏显示网站请求总数
items: Typecho Handsome 添加实时QPS图表 - 兼容pjax
items: Typech handsome 侧边栏添加QQ等级和信息显示
items: 分享60个有趣实用的API及其Typecho博客集成指南
items: WeFootStep：微信运动步数同步到Typecho博客的完整解决方案
items: Typecho博客评论邮箱通知

解决AI摘要不显示的三种方案 -AIsummary插件
type: item
date: 2025-09-21T15:18:00+08:00
description: 前言在自定义主题的某天，AI摘要突然不显示了，前前后后改了好几次，通过重启插件无数次、移除全部自定义js和css、关闭pjax、一一恢复改过的页面代码，均未果。这次是通过本文第二个方法改好的，所以至今不知道突然不显示的原因。下面是解决AISummary插件的摘要块不显示的三种方案，前提是摘要内容已正确生成且保存。针对handsome主题，其他主题可借鉴思路。技术环境博客系统: Typecho 1.2.1主题: Handsome 10.1.0插件: AISummary v1.1.0解决方案方案一：修改插件核心逻辑直接修改 Plugin.php 中的 customContent 方法，将摘要插入到内容末尾：// 修改前 $content = $summaryString . $content; // 修改后 $content = $content . $summaryString;方案二：主题模板直接集成（推荐）在主题模板文件中直接添加摘要显示逻辑，绕过插件的 customContent 方法。实施步骤在插件设置中将"正文摘要显示样式"设置为"默认"或者"自定义"，推荐设置为自定义。在主题模板中添加摘要显示代码在 usr/themes/handsome/post.php 第74行的 下方添加：[hide] <?php // 添加AI摘要显示 $options = Typecho_Widget::widget('Widget_Options')->plugin('AISummary'); if ($options->summaryStyle !== '0') { $summaryField = $options->field ?: 'summary'; $db = Typecho_Db::get(); $row = $db->fetchRow($db->select('str_value')->from('table.fields')->where('cid = ?', $this->cid)->where('name = ?', $summaryField)); if ($row && !empty($row['str_value'])) { $pureSummary = str_replace("{{text}}", $row['str_value'], $options->prefix); // 根据插件配置选择样式 if ($options->summaryStyle === '1') { // 使用默认引用样式 $summaryString = ' ' . $pureSummary . ' '; } else if ($options->summaryStyle === '2') { // 使用自定义样式，只添加class，让CSS控制样式 $summaryString = ' ' . $pureSummary . ' '; } else { // 默认样式 $summaryString = ' ' . $pureSummary . ' '; } echo $summaryString; } } ?>[/hide]这种方式不依赖于Typecho的钩子系统，直接在主题模板中添加摘要显示代码。方案三：针对开启了前台Vditor解析方式第一种：1、打开文件：usr/themes/handsome/libs/content/PostContent.php2、找到第382行（大约在第380-385行之间）3、将$content = $obj->text;改为$content = $obj->content;4、保存文件$obj->text是vditor原始的Markdown文本，没有经过任何插件处理$obj->content是经过Typecho插件系统处理后的HTML内容，包括AISummary插件的customContent方法添加的摘要通过使用$obj->content，确保所有插件的钩子都能正常工作第二种：在handsome插件后台切换vidtor为typecho自带的即可下面是自定义模板的文章：[post cid="335" /]

Typecho handsome 睡眠记录数据展示插件 - SleepData
type: item
date: 2025-07-31T23:41:00+08:00
description: SleepData 插件是一个用于在 Typecho 博客系统中记录、存储和分析个人睡眠数据的工具。它解决了部分健康应用（如 OPPO 健康）数据封闭、无公开 API 的问题，允许用户将数据掌握在自己手中。核心问题与解决方案许多健康应用（例如 OPPO 健康）不提供公开的 API 接口，也无法将数据同步到 Google Fit 等开放平台，导致用户的健康数据完全封闭，难以进行统一管理和长期分析。本插件通过提供一个独立的数据录入和存储系统来解决此问题。用户可以通过截图 OCR 识别、手动录入或 API 调用等方式，将睡眠数据保存在自己的服务器上，从而实现数据的自主掌控和长期追踪。工作流程整个数据处理流程从用户手机端的健康应用开始，经过前端的 OCR 识别与数据提交，再到服务器端的处理与存储，最后通过不同的页面进行展示。插件特性数据自主可控: 所有数据存储在用户自己的服务器上。双重存储: 同时保存到数据库和 JSON 文件，保证数据安全。OCR 自动录入: 通过识别截图，简化数据输入过程。API 支持: 开放 API 接口，方便进行二次开发或批量导入。自适应存储: 自动检测服务器环境，寻找可写目录，无需手动配置。双重配置: 支持后台配置和文件配置两种方式，提高灵活性。Handsome 主题集成: 与 Handsome 主题无缝集成，支持顶部导航栏和侧边栏展示。使用指南1. 安装插件从源码地址下载插件压缩包。解压后，将文件夹重命名为 SleepData。上传 SleepData 文件夹到 Typecho 的 usr/plugins 目录下。登录 Typecho 后台，进入"控制台" -> "插件"，找到"SleepData"并启用。2. 配置插件启用插件后，点击"设置"进入配置页面。API 访问令牌: 设置一个足够复杂的字符串作为 API 访问的密钥。这是保证数据安全的关键。此令牌有两种配置方式，系统会优先使用方法一：方法一（推荐）: 直接在后台设置页面填写并保存。方法二（备用）: 编辑插件目录下的 data_config.php 文件，修改 API_ACCESS_TOKEN 的值。3. 数据录入方式一：OCR 识别上传（推荐）这是最便捷的方式，尤其适用于从手机健康 App 录入数据。在浏览器中打开插件目录下的 https://博客地址/sleep-data-uploader/index.html 文件。填写您的 API 地址 和 访问令牌 （一次填写后浏览器会记住）。点击"拍照识别"或"选择截图"按钮，上传您在健康 App 中截取的睡眠数据图片。系统会自动识别图片中的数据并填充到表单中。核对无误后，点击"发送数据"。方式二：手动输入如果 OCR 识别有误或没有截图，可以选择手动填写所有睡眠数据，然后点击"发送数据"。方式三：通过 API 上传对于有开发能力的用户，可以通过 POST 请求直接向 API https://博客地址/usr/plugins/SleepData/simple-api.php 提交数据。请求体为 JSON 格式，需包含access_token及所有睡眠数据字段。4. 查看数据后台查看: 在 Typecho 后台的插件设置页面，会直接展示最近 50 条睡眠记录。独立页面查看: 访问 https://博客地址/usr/plugins/SleepData/view-data.php 可以查看 JSON 文件中的所有数据记录。数据库查看: 在数据库中的typecho_sleep_data表中查看所有数据记录。根目录查看: 在根目录下的temp/sleep_data.json文件中查看所有数据记录。5. 在 Handsome 主题中展示睡眠数据展示一：添加到顶部导航栏效果展示添加代码到主题的headnav.php文件中。[collapse status="false" title="php代码，放在nav navbar-nav hidden-sm的ul中"][hide] <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path> 睡眠统计 今日睡眠 本周平均 本月平均 累计睡眠 平均入睡 本周最晚 质量最佳 质量最差 睡眠趋势 加载中... [/hide][/collapse][collapse status="false" title="JS代码，添加到/header前面"][hide] [/hide][/collapse]展示二：添加到侧边栏效果展示添加代码到主题的sidebar.php文件中。[collapse status="false" title="php代码，放在博客信息的上下即可"][hide] <?php if (class_e…

Handsome 主题导航栏添加热榜聚合功能教程
type: item
date: 2025-07-31T15:39:00+08:00
description: 前言在 Typecho Handsome 主题的导航栏添加"热榜聚合"功能，以下拉菜单形式展示"历史上的今天"、"抖音热榜"和"CSDN热榜"的实时内容，提升博客吸引力。效果：鼠标悬停或点击导航栏上的"火焰"图标，弹出包含三列热榜的窗口。操作步骤第一步找到并打开：/usr/themes/handsome/component/headnav.php文件第二步：添加代码将以下代码复制到 headnav.php 文件中。粘贴位置： 在文件中找到 <?php endif; ?> 这一行（约在 517 行，统计信息功能的结束标签），将代码粘贴在其后面。[hide] <path d="M9 14c1.5-2-1-4-2-5 1.5 3-2 6-2 8 0 .5 0 1 .5 1C8 19 13 16 9 14zm1-5c0-2-2-3-3-4 1 2-1 3-1 5s2 4 3 2v-3z"></path> 历史上的今天 查看更多 加载中... 抖音热榜 查看更多 加载中... CSDN热榜 查看更多 加载中... [/hide]如果主题未引入图标，则需要在此文件顶部添加 第三步：保存并刷新保存 headnav.php 文件，刷新博客页面。导航栏会出现新的火焰图标，点击即可看到热榜内容。代码解析代码由三部分组成：HTML 结构、CSS 样式和 JavaScript 逻辑。HTML：定义下拉菜单框架，包括三个板块展示不同热榜。CSS：为热榜列表提供样式，前三名设置醒目颜色。JavaScript：数据获取：通过 ajax 请求 https://api.guiguiya.com/api/hotlist 接口获取实时热榜数据。懒加载：数据仅在用户首次点击图标时加载，减少性能开销。浏览器缓存：数据缓存在 localStorage 中，缓存时间 30 分钟，提高加载速度，减轻 API 服务器压力。注意事项功能依赖第三方 API (api.guiguiya.com)，API 服务中断可能导致功能失效。代码使用 Font Awesome 图标库，Handsome 主题通常已包含，若图标未显示，请确认主题已加载该库。修改文件前请做好备份。结语通过此教程，可为 Handsome 主题博客添加热榜聚合功能，美化网站并为访客提供更多价值。

Typecho handsome 添加评论区OwO表情包 - QQ,抖音,B站等
type: item
date: 2025-07-29T18:46:00+08:00
description: 我对网站的 OwO 表情包进行了一次大规模的扩充，新增和整理了包括 QQ、抖音、哔哩哔哩、微博、贴吧、酷安 等多个平台在内的热门表情。表情总览阿鲁推特B 站抖音酷安QQ微博贴吧滑稽表情包配置详情[collapse status="false" title="QQ"][tabs][tab name="json" active="true"]{ "QQ": { "name": "QQ", "type": "image", "container": [ { "icon": "aini", "text": "爱你" }, { "icon": "aixin", "text": "爱心" }, { "icon": "aoman", "text": "傲慢" }, { "icon": "baiyan", "text": "白眼" }, { "icon": "bangbangtang", "text": "棒棒糖" }, { "icon": "baojin", "text": "抱紧" }, { "icon": "baoquan", "text": "抱拳" }, { "icon": "bishi", "text": "鄙视" }, { "icon": "bizui", "text": "闭嘴" }, { "icon": "cahan", "text": "擦汗" }, { "icon": "daku", "text": "大哭" }, { "icon": "doge", "text": "doge" } // ... 更多QQ表情 ] } }[/tab][tab name="CSS"].emotion-QQ{width: 35px; height: auto;}[/tab][/tabs][/collapse][collapse status="false" title="抖音"][tabs][tab name="json" active="true"]{ "抖音": { "name": "douyin", "type": "image", "container": [ { "icon": "1", "text": "抖音-1" }, { "icon": "2", "text": "抖音-2" }, { "icon": "3", "text": "抖音-3" }, { "icon": "4", "text": "抖音-4" }, { "icon": "5", "text": "抖音-5" }, { "icon": "6", "text": "抖音-6" }, { "icon": "7", "text": "抖音-7" }, { "icon": "8", "text": "抖音-8" }, { "icon": "9", "text": "抖音-9" }, { "icon": "10", "text": "抖音-10" } // ... 更多抖音表情 ] } }[/tab][tab name="CSS"].emotion-douyin{width: 35px; height: auto;}[/tab][/tabs][/collapse][collapse status="false" title="哔哩哔哩"][tabs][tab name="json" active="true"]{ "哔哩哔哩":{ "name": "bilibili", "type": "image", "container":[ { "icon": "baiyan", "text": "白眼" }, { "icon": "bishi", "text": "鄙视" }, { "icon": "bizui", "text": "闭嘴" }, { "icon": "chan", "text": "馋" }, { "icon": "daku", "text": "大哭" }, { "icon": "dalao", "text": "大佬" }, { "icon": "dalian", "text": "打脸" }, { "icon": "dianzan", "text": "点赞" }, { "icon": "doge", "text": "doge" }, { "icon": "facai", "text": "发财" }, { "icon": "fadai", "text": "发呆" }, { "icon": "fanu", "text": "发怒" } // ... 更多B站表情 ] } }[/tab][tab name="CSS"].emotion-bilibili{width: 35px; height: auto;}[/tab][/tabs][/collapse][…

Typecho handsome 侧边栏显示网站请求总数
type: item
date: 2025-07-25T12:16:00+08:00
description: 本文将详细介绍如何在博客侧边栏实现请求总数显示功能，让您随时掌握网站的访问情况。一、请求总数统计预览二、实现思路实现侧边栏请求总数显示主要包含以下几个步骤：数据来源：从 WAF 获取请求总数数据数据缓存：利用本地缓存减少请求次数前端显示：在侧边栏显示数据自动更新：使用 JavaScript 定期刷新数据保持实时性三、后端实现1. 创建访问统计数据获取脚本首先，创建一个 PHP 脚本来获取来自 WAF 的访问统计数据：[hide]<?php // usr/themes/handsome/component/visitor-stats.php // 设置响应头 header('Content-Type: application/json; charset=utf-8'); header('Cache-Control: no-cache, no-store, must-revalidate'); header('Expires: 0'); // 缓存文件路径 $cache_dir = __DIR__ . '/cache'; if (!is_dir($cache_dir)) { @mkdir($cache_dir, 0755, true); } $cache_file = $cache_dir . '/visitor_stats.json'; $log_file = $cache_dir . '/visitor_stats.log'; // 缓存时间设置为10分钟 $cache_time = 600; // API配置 - WAF接口 $api_url = 'https://your.waf.domain:9443/api/open/dashboard/user/counts'; $api_token = 'YOUR_WAF_API_TOKEN'; // 使用WAF的API Token // 检查缓存是否存在且有效 if (file_exists($cache_file) && (time() - filemtime($cache_file) < $cache_time) && !isset($_GET['refresh'])) { // 缓存有效，直接读取缓存 $content = file_get_contents($cache_file); echo $content; exit; } // 从WAF获取请求总数 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Accept: application/json', 'X-SLCE-API-TOKEN: ' . $api_token ]); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); if ($http_code === 200 && $response) { $data = json_decode($response, true); if ($data && isset($data['data']['total_requests'])) { // 成功获取数据 $result = [ 'total_pv' => (int)$data['data']['total_requests'], 'timestamp' => time(), 'cached' => false ]; // 保存到缓存 file_put_contents($cache_file, json_encode($result)); echo json_encode($result); } else { // API返回数据格式不正确 echo json_encode([ 'error' => '数据格式错误', 'total_pv' => 0, 'timestamp' => time() ]); } } else { // API请求失败 echo json_encode([ 'error' => $err…

Typecho Handsome 添加实时QPS图表 - 兼容pjax
type: item
date: 2025-07-25T11:05:20+08:00
description: 对于使用 Typecho Handsome 主题的博主来说，在侧边栏添加一个能实时反馈网站负载的 QPS (每秒查询率) 图表，是一项非常酷的功能。然而，Handsome 主题强大的 PJAX 无刷新加载特性，也给这类需要持续运行的动态脚本带来了挑战。本教程将详细介绍如何创建一个与 PJAX 完全兼容的实时 QPS 图表，彻底解决在页面跳转后图表“罢工”、数据不再更新的问题。一、最终效果我们最终实现的效果是，在博客侧边栏有一个动态的QPS图表，无论您是首次加载页面，还是通过PJAX在不同页面间导航，这个图表都能持续、稳定地从服务器获取最新数据并实时渲染。二、实现原理为了完美兼容PJAX，我们将整个功能拆分为三个核心部分，各司其职：后台数据更新器：这是“数据源”的核心。它由一个JavaScript脚本 (qps-updater.js) 和一个PHP脚本 (update-qps.php) 组成。qps-updater.js 会在后台持续运行，每隔5秒就向 update-qps.php 发起请求，后者则负责从您的WAF（如长亭雷池）获取最新的QPS数据，并将其写入一个简单的服务器缓存文件 (safeguard_qps.json)。前台图表渲染器：这是“看得见”的部分。它位于您的侧边栏 (sidebar.php)，包含一个图表容器 ( ) 和一段独立的 ECharts 渲染脚本。这段脚本只做一件事：同样每隔5秒，从另一个PHP脚本 (get-qps.php) 读取上述的缓存文件，然后将数据绘制成图表。PJAX 兼容粘合剂：这是解决问题的关键。我们将前台图表的初始化逻辑，封装在一个全局函数 initQPSChartForHandsome() 中。然后，我们只需在 Handsome 主题后台的PJAX回调设置中填入这个函数名。这样，每次PJAX导航完成，主题就会自动调用这个函数，它会先彻底清理掉旧的图表实例和定时器，再重新初始化一个新的，从而实现了完美的无缝衔接。这种前后端分离、逻辑解耦的架构，确保了即使在复杂的PJAX环境中，数据更新和图表渲染也能独立、稳定地运行。三、文件准备请将以下4个文件，按照指定的路径和内容，放置到您的主题目录中。注意：本教程假设您已在 /usr/themes/handsome/static/js/ 目录下放置了 echarts.min.js 文件。这是本地的ECharts图表库，您可以从 ECharts官网 下载最新版本。若您没有此文件，我们的加载器会自动尝试从CDN获取，但建议使用本地版本以获得更好的加载速度和稳定性。1. 数据读取脚本路径: /usr/themes/handsome/component/get-qps.php(该脚本用于让前台图表安全地读取缓存数据)<?php // usr/themes/handsome/component/get-qps.php header('Content-Type: application/json; charset=utf-8'); header('Cache-Control: no-cache, no-store, must-revalidate'); $cache_dir = __DIR__ . '/cache'; $cache_file = $cache_dir . '/safeguard_qps.json'; if (file_exists($cache_file)) { echo file_get_contents($cache_file); } else { // 如果缓存文件不存在，返回一个默认的JSON结构 echo json_encode(['qps' => 0, 'timestamp' => time(), 'simulated' => true]); }2. 数据更新脚本路径: /usr/themes/handsome/component/update-qps.php(该脚本用于从WAF获取真实数据并写入缓存)[hide]<?php // usr/themes/handsome/component/update-qps.php // 仅允许内部JS脚本通过AJAX调用 if ( !isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest' ) { header('HTTP/1.1 403 Forbidden'); exit('Access Denied'); } // --- WAF API 配置 --- $api_url = 'https://your.waf.domain:944…

Typech handsome 侧边栏添加QQ等级和信息显示
type: item
date: 2025-07-17T21:13:00+08:00
description: 前言在个人博客的侧边栏展示自己的QQ信息，包括头像、昵称、QQ号、等级和Q龄等，不仅可以增加博客的个性化，还能让访客更好地了解博主。本教程将详细介绍如何在Typecho博客的Handsome主题侧边栏中添加QQ信息卡片功能。效果展示实现后的效果是在侧边栏显示一个包含以下信息的QQ卡片：QQ头像QQ昵称QQ号码Q龄（注册年份）QQ等级（使用emoji表情：👑☀️🌙⭐表示不同等级）实现步骤1. 准备工作首先，我们需要找到合适的API来获取QQ信息。本教程使用的是jkapi.com提供的API服务，它可以根据QQ号获取相关信息，这个用了半个月就不行了，换成了api.dwo.cc的。2. 修改sidebar.php文件在Handsome主题中，侧边栏的内容是由sidebar.php文件控制的。我们需要编辑这个文件来添加QQ信息卡片。2.1 找到合适的位置通常，我们会将QQ信息卡片添加到侧边栏的个人信息模块附近。在sidebar.php文件中找到合适的位置，例如在博主信息卡片之后。2.2 添加QQ信息卡片代码将以下代码添加到选定的位置：[hide] <?php _me("QQ信息") ?> <?php function getQQInfoFromDwoApi($qq) { $url = "https://api.dwo.cc/api/aiys_qq?qq=" . $qq; $ch = curl_init(); // 设置cURL选项 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'ckey: *************', // 在header中传递秘钥 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' ]); $response = curl_exec($ch); curl_close($ch); if ($response) { $data = json_decode($response, true); if (isset($data['code']) && $data['code'] == 200) { return $data; } } return null; } function generateQQLevelIconsHtml($level) { $html = ''; $level = intval($level); // 等级计算规则 $crowns = floor($level / 64); $suns = floor(($level % 64) / 16); $moons = floor(($level % 16) / 4); $stars = $level % 4; // 使用emoji表情替代图片，更加稳定可靠 $crown_icon = '👑'; // 皇冠 $sun_icon = '☀️'; // 太阳 $moon_icon = '🌙'; // 月亮 $star_icon = '⭐'; // 星星 $icon_style = 'style="font-size:16px; margin:0 1px;"'; for ($i = 0; $i < $crowns; $i++) { $html .= '' . $crown_icon . ''; } for ($i = 0; $i < $suns; $i++) { $html .= '' . $sun_icon . ''; } for ($i = 0; $i < $moons; $i++) { $html .= '' . $moon_icon . ''; } for ($i = 0; $i < $stars; $i++) { $html .= '' . $star_icon . ''; } return $html; } // 缓存文件路径 - 使用Typecho的缓存目录 $cache_dir = defined('__TYPECHO_TMP_DIR__') ? __TYPECHO_TMP_D…

分享60个有趣实用的API及其Typecho博客集成指南
type: item
date: 2025-07-17T16:26:00+08:00
description: 引言突发奇想，搜集了一些公开API，为博客添加一些动态和个性化的元素让网站更加生动有趣。本文介绍60个有趣的API，它们都可以集成到Typecho博客中，让您的博客脱颖而出。目录个人社交账号API热搜榜单API工具类API内容增强类API博客功能增强类API游戏与娱乐类API个人社交账号API1. QQ等级显示通过QQ空间API获取您的QQ等级、成长值等信息，并在博客中展示。<?php // 在sidebar.php或自定义页面中添加 function getQQLevel($qq) { $url = "https://r.qzone.qq.com/fcg-bin/cgi_get_score.fcg?mask=7&uins=".$qq; $data = file_get_contents($url); $data = mb_convert_encoding($data, "UTF-8", "GBK"); preg_match('/lvtext:"(\d+级)"/', $data, $level); return isset($level[1]) ? $level[1] : '获取失败'; } $qq = '你的QQ号'; echo '我的QQ等级: '.getQQLevel($qq); ?>2. QQ音乐状态API展示您正在听的QQ音乐歌曲信息。<?php function getQQMusicStatus($qq) { // QQ音乐状态获取 $url = "https://c.y.qq.com/rsc/fcgi-bin/fcg_get_profile_homepage.fcg?format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=yqq&uin=".$qq; $context = stream_context_create([ 'http' => [ 'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' ] ]); $data = json_decode(file_get_contents($url, false, $context), true); // 判断是否有正在收听的歌曲 if (isset($data['data']['listen']) && !empty($data['data']['listen']['now'])) { return [ 'status' => true, 'song_name' => $data['data']['listen']['now']['song_name'], 'singer' => $data['data']['listen']['now']['singer'][0]['name'], 'cover' => $data['data']['listen']['now']['cover'] ]; } else { return [ 'status' => false ]; } } $qq = '你的QQ号'; $music = getQQMusicStatus($qq); if ($music['status']) { echo ' '; echo ' 我正在听 '; echo ' '; echo ' '; echo ' '.$music['song_name'].' '; echo ' - '.$music['singer'].' '; echo ' '; echo ' '; echo ' '; } else { echo '暂无音乐播放记录'; } ?>3. 哔哩哔哩UP主数据展示您的B站粉丝数、视频数、播放量等数据。<?php function getBiliStats($uid) { $url = "https://api.bilibili.com/x/relation/stat?vmid=".$uid."&jsonp=jsonp"; $data = json_decode(file_get_contents($url), true); return $data['data']; } $uid = '你的B站UID'; $stats = getBiliStats($uid); echo "粉丝数: ".$stats['follower']; ?>4. 网易云音乐状态展示您最近听的歌曲或者创建一个迷你播放器。<?php // 网易云音乐用户歌单获取 function get…

WeFootStep：微信运动步数同步到Typecho博客的完整解决方案
type: item
date: 2025-07-15T23:57:00+08:00
description: 1. 项目概述WeFootStep 是一个 Typecho 插件，它能够将用户的微信运动步数同步到您的 Typecho 博客并在前端展示。本项目由 Typecho 插件（后端）和微信小程序（前端）两部分组成。通过这两部分的协同工作，实现了微信运动数据的采集、传输、存储和展示的完整流程。1.1 功能特点步数同步：通过微信小程序安全地获取并同步微信运动步数。数据统计：在导航栏提供今日步数、周/月平均、累计步数和最佳纪录等统计功能。历史图表：以图表形式直观展示历史步数变化趋势。后台管理：支持在后台查看和管理已同步的步数记录。高度自定义：支持将步数模块显示在侧边栏、页脚或主题任意自定义位置。安全可靠：严格遵循微信官方加密和验证机制，确保数据安全。1.2 技术架构2. 安装与配置2.1 插件安装从 GitHub 下载 WeFootStep 项目的 ZIP 压缩包并解压。将解压后得到的 WeFootStep 文件夹上传到您 Typecho 博客的 /usr/plugins/ 目录下。在 Typecho 后台管理界面的“控制台” > “插件”中，找到 WeFootStep 并启用它。2.2 插件配置启用插件后，点击“设置”进入配置页面：微信小程序 AppID / AppSecret：（必填） 填写您的小程序 AppID 和 AppSecret。显示样式与位置：选择步数在前台的显示样式（如进度条、文本）和位置（侧边栏、页脚或自定义）。卸载时是否删除数据：建议保留数据，除非您确定不再需要历史步数记录。2.3 微信小程序配置WeFootStep 目录中包含的 miniprogram 文件夹是小程序的前端项目。创建小程序：如果您还没有小程序，请先在 微信公众平台 注册并创建一个。获取凭证：在“开发” > “开发管理” > “开发设置”中，找到并记录您的 AppID 和 AppSecret。开启接口权限：在“开发” > “开发管理” > “接口设置”中，务必手动开启“微信运动步数”接口权限。配置服务器域名：在“开发” > “开发管理” > “开发设置” > “服务器域名”中，将您的博客域名添加到 request合法域名 列表中。这是小程序能成功请求到您博客的必要前提。配置小程序代码：使用“微信开发者工具”导入 miniprogram 文件夹。打开 pages/index/index.js 文件，将第 8 行的 url 修改为您博客的同步接口地址。地址必须是公网可访问的 HTTPS 地址。//... url: 'https://博客地址/index.php/action/wefootstep?do=sync', //... //如果这个有问题，可以改成https://博客地址/index.php/action/WeFootStep?do=sync上传和预览：在微信开发者工具中，点击“上传”将代码上传到微信后台，然后设置为“体验版”供自己或朋友测试使用。3. 使用方法3.1 博客端数据展示自动显示：如果您在插件设置中选择了“侧边栏”或“页脚”，插件会自动在相应位置显示。自定义位置：如果选择“自定义位置”，您需要在主题的模板文件（如 sidebar.php, footer.php 或 header.php）中，在您希望展示步数的地方添加以下调用代码：<?php WeFootStep_Plugin::render(); ?>或者使用 HTML 注释作为标记（适用于不方便修改 PHP 的场景）： 导航栏统计：导航栏的步数统计功能是自动集成的，启用插件后即可在前台看到效果。3.2 小程序端数据同步小程序支持两种同步方式：自动同步：每次打开小程序时，它会自动尝试从微信服务器获取最新步数并同步到您的博客。手动同步：可以随时点击界面上的“同步步数”按钮来触发一次同步。成功同步后，小程序界面会显示“同步成功”的提示，同时您的博客前端数据也会刷新。4. 功能与接口4.1 后台管理插件在 Typecho 后台的“独立页面”菜单旁增加了一个“微信步数”管理面板，您可以在此：查看所有已同步的步数历史记录。对特定日期的步数记录进行编辑或删除。4.2 API 接口WeFootStep 提供了两个核心的 API 接口：POST /index.php/action/wefootstep?do=sync：小程序专用接口，用于接收小程序发送的加密步数数据并执行同步操作。GET /index.php/action/wefootstep?do=getStepData：前端专用接口，用于为导航栏的统计模块提供格式化的 JSON 数据。5. 主题集成：以 Handsome 主题为例本教程将指导您如何直接修改 Handsome 主题，在顶部导航栏中添加一个交互式的微信运动步数统计面板，契合主题所有颜…

Typecho博客评论邮箱通知
type: item
date: 2025-05-26T18:35:00+08:00
description: 背景随着博客的发展，我觉的评论通知需要特别提示，于是就找到了一个插件CommentNotifier，能完美适配1.2.1，且符合我的使用需求，我使用的是QQ邮箱通知，其他的也未进行测试。插件介绍Typecho博客评论邮件提醒，支持异步回调（异步回调优点就是不影响博客评论提交速度），支持编辑邮件模板，支持第三方开发邮件模板，发信方式支持SMTP与阿里云邮箱推送，支持表情回调（需要主题支持）插件地址：https://github.com/jrotty/CommentNotifier安装教程下载后将压缩包解压到 /usr/plugins目录文件夹名改为CommentNotifier登录管理后台，激活插件配置插件 填写SMTP参数/阿里云邮箱推送参数使用教程以QQ邮箱为例设置插件发件人昵称可填写自己的博客网站名，注意无法解析符号QQ邮箱SMTP服务配置QQ邮箱的安全设置中，生成授权码作为插件中的SMTP登录密码模板更换在控制台→评论邮件模板里可以切换以及编辑模板template文件夹里存放的就是邮件发信模板，可以参考内置的几个模板来写属于自己的邮件模板，当然也可以在后台直接修改默认模板来达到邮件美化的作用。