阅读视图

发现新文章,点击刷新页面。

Jefrss Simple 订阅插件 Wp-rss 朋友圈订阅插件

Jefrss Reader Lite1.03 WP-Rss博友圈展示插件

该版本为单独新作的插件,我的邻居页面插件是旧版的,一直没有换,推荐使用现在这个版本的插件。

 

展示短代码支持六种主题展示方式,6个短代码展示主题分别借鉴(抄袭)6位博友。参考在主题中心有提示,请大家多多关注访问6位提供思路博主。

用户主题展示。

杂志主题  FindBlog

现代主题  @惟康   @从良未遂

默认主题  文案笔记姐

网格主题 耳朵的主人

下载地址:jefrss-simple_AYweS.zip

如果有使用的问题,可以邮件或者评论区沟通。

============ =================

2025年3月4日更新

解决插件停用报错

解决添加异常

解决后台时间和前台展示时间不同步问题

请点击下载插件然后升级

==============================

2025年3月6日更新

解决插件链接验证权限问题*编辑文章冲突

解决站点JS冲突问题

==============================

2025年3月10日

重新打包文件上传,修改了下载链接的文件名称,之前一直上传的都是旧版本,导致博友安装并不是最新版的。

 

===============================

如果有问题请邮件或者评论,由于个人时间问题,回复或者更新较慢请见谅。

RSS to Email使用教程

一个简单的功能介绍和使用说明:

1、注册登录后自动进入个人首页,有账户类型、余额、消费记录、充值记录和Newsletter列表。

2、点击创建,进入创建页面,可创建自己的RSS转Newsletter任务:

  • 名称:任务的名称,自定义
  • 简介:Newsletter的简介
  • RSS URL:RSS地址
  • 发送频率:抓取RSS发邮件的频率,支持每5分钟、每天、每周
  • 是否启用:勾选则会按设置的频率发邮件,否则不发

3、Newsletter详情页(比如拾月通讯

4、Newsletter详情的「订阅组件代码」,提供一段代码可以贴在自己的博客中,支持读者直接在博客订阅。

点击邮件订阅,弹出浮窗,填写邮箱即可订阅,且支持RSS地址订阅。(此交互灵感来自typlog),点击本站菜单栏「订阅」观看效果。

5、我非常在意数据所有权,所以Newsletter的订阅列表可以方便的导入和导出

新项目RSS to Email上线

上一篇拾月推荐(第38期)中提到我在做一个实验,其实是测试我的新项目:RSS to Email

我的博客同时支持RSS和Email订阅,其中Email订阅的服务换过很多次,或是因为价格,或是因为服务关停。

2023年4月,我用Python写了一个RSS转Newsletter的脚本,实现了自给自足,每次文章发布后,执行一次脚本就能发送邮件。其中Email列表使用Notion存储,Email地址收集使用NotionForm。

上述方案够用但不完美。比如:

  1. NotionForm收集Email地址无法去重
  2. 取消订阅无法自动化完成,需要收集Email地址,我再手动从Notion中删除

因此,一起想自己做个网站实现RSS转Email,今天春节趁着DeepSeek大爆发,顺势借AI编程做了个框架出来,之后陆陆续续优化一些细节,已经达到基本可用的状态,决定正式上线开放注册。

产品地址:https://rsstoemail.skyue.com

本产品需要付费使用,原因有二:

  1. 网站运营有成本,且邮件发送越多成本越高,无边际递减效应
  2. 我想赚钱

同时定价上有三个基本原则:

  1. 邮件发送量小的用户,使用成本低 --> 按量付费
  2. 与用户建立长期信任关系 --> 给予种子用户&老用户更优惠的价格
  3. 让用户没有后顾之忧 --> 任何时候都可以退款

具体来说:

  1. 标准账户:每自然年内前20000封邮件0.002元/封,超过部分0.0015元/封
  2. VIP账户:所有邮件均0.0015元/封

VIP用户即为种子用户和老用户:

  • 种子用户:前100位付费用户
  • 老用户:网站刚上线,暂未定义

同时,考虑网站刚上线,为降低用户试用门槛,前100位注册用户赠送5元。

最后,本站尚未接入支付系统,因为充值需要走支付宝转账,具体参考网站定价页面的充值说明。充值退款均为手动处理,如有延误还请谅解。

AriaRSS for Typecho 内容保护

插件介绍

AriaRSS 是一个专门为 Typecho(一个轻量级的博客系统)开发的 保护 RSS 插件,它用于帮助保护博客的 RSS 内容。这个插件通常被用来防止他人直接抓取网站的 RSS 内容,避免站点的内容被未经授权转载或者滥用。

插件功能概述

  • 增加内容保护:防止别人未经允许将你的文章内容直接复制或者盗用,提高原创内容的保护性;
  • 增加站点访问量:通过强制访问原文页面,间接提升站点的访问量和流量;
  • 增强版权意识:通过在 RSS Feed 中显示版权声明,提升用户对内容版权的认知;
  • 自定义保护信息:插件支持你自定义隐私保护和版权声明的文字内容。你可以根据自己的需求修改这些文字,适应不同的需求
  • 文章数量:设定生成 RSS 文件时包含的文章数量。

订阅效果


AriaRSS 前言

AriaRSS是根据CustomRSS修改而来,RSS订阅界面设计参考夕格树洞,旨在为用户提高两种不同的RSS内容。

AriaRSS 插件的使用方法

  1. 安装插件:

    • 下载插件:你可以在 GitHub 上下载 AriaRSS 插件。
    • 上传插件:将下载的插件文件解压,上传到 Typecho 的插件目录(/usr/plugins/)中。
    • 启用插件:登录到 Typecho 后台,进入“插件”管理页面,找到 AriaRSS 插件,点击“启用”按钮。
  2. 配置插件:

    • 进入插件设置:插件启用后,你可以在 Typecho 后台的插件设置页面找到 AriaRSS,点击“设置”按钮进行配置。
    • *设置隐私保护和版权声明:你可以在设置页面中输入隐私保护内容,如“由于图片显示问题,部分内容已被隐藏,详细信息请通过原文链接查看”。同时,还可以设置版权声明,如“本文所有内容均采用 (CC BY-NC-ND 4.0),转载需保留出处”。
    • 选择保护内容:配置 RSS 中要显示的RSS篇数。你还可以选择显示文章的字符数,需在文件Plugin.php内修改。
  3. 生成和查看 RSS:

    • 配置完成后,插件会自动生成更新的 RSS 文件,并在后台发布时生效。你可以通过订阅你的 RSS 地址来查看修改后的效果。如果发现RSS的设置没有生效,请进入 Typecho 的根目录,删除rss.xml文件,重新在插件页面点击保存设置,或者等待缓存刷新。

如何删除 AriaRSS 插件功能

如果你不再需要 AriaRSS 插件或者想要禁用它,可以按照以下步骤删除或禁用插件的功能:

  1. 禁用插件:登录到 Typecho 后台,进入“插件”管理页面。找到 AriaRSS 插件,点击插件旁的“禁用”按钮。禁用插件后,RSS 中的内容保护功能将不再生效。
  2. 清理缓存: 在插件被禁用或删除后,记得清理网站的缓存和浏览器缓存,确保新的 RSS 设置生效。

WordPress 主题 Hera

WordPress 主题 Hera

过气老博主的垂死挣扎。

当前版本0.1.3,最后更新日期2025/01/06

项目地址

演示地址

通用文档

英文字体采用了Open Sans

本主题使用古法制作,不依赖三方框架,依然不是区块主题,颜色选择了最新的潘通年度色。

本主题对本人插件都做了适配,强烈建议使用本人全家桶。

依旧是极致性能跑分,老派博主最后的倔强。

PC 端
移动端

本人一般不开启要饭模式,不过有条件的希望在Github 上赞助1刀,帮我点亮一下状态栏。

首页
文章页
分类卡片页

Hugo 版本

当前版本0.0.8,最后更新日期2025/01/07

使用方法

Farallon 同属本人第三代主题,配置方法基本相同。

更新日志

更新日志

宝塔正式版9.3.0更新和Typecho适配php8.4版本

今天,宝塔面板更新到正式版9.3.0,这意味着,网站可以正式部署php8.4版本了。先说一下,此次宝塔面板的更新,更新的内容还是比较多的,具体更新细节,点击官网查看。

其中,我注意到或者最关心的就两个,一个是支持php8.4,另一个是优化SSL自动续签成功率。当然,如果使用wordpress的朋友们也可以使用新增的 WP Tools工具,专门为wp配备的。同时,也逐渐提升了Docker的使用功能。

为什么说,我想要升级到php8.4呢?

1733796708984.jpg

于我个人而言,或者我这个博客而言,php7.4和php8.4,没有本质区别,但玩博客,不就是硬凑吗?每次更新,我都喜欢冲在前面,尝试一些新的东西,而且我又是个喜欢折腾的人,备份好数据,就是干!

PHP 8.4 对于网站的提升主要体现在性能优化、新特性以及安全性提升三个方面。

1.性能优化:PHP 8.4 引入了 JIT(Just-In-Time)编译器,这意味着一些代码块会被编译成机器码,从而提升执行速度。
2.新特性:PHP 8.4 带来了许多新特性,例如联合类型、nullsafe操作符、属性类型、数据投影等,这些可以帮助开发者写出更加清晰、类型安全的代码。
3.安全性提升:PHP 8.4 在安全性上有所增强,例如引入了新的错误处理机制、对参数进行验证等。

实际升级到php8.4以后,不知道是不是错觉,或者心理作用,感觉就是比php7.4丝滑,这东西就是让人身心愉快。

Typecho支持且兼容php8.4

注意,升级到php8.4前,做好备份工作,因为Ty1.2.1虽然兼容,但也需要做部分适配。且有的主题需要去调试才能完美兼容,所以一定要保护好自己的数据,以免造成不必要的损失。

1733795960873.jpg

Ty升级到php8.4以后,会出现以上错误,不包含(主题和插件)的错误,仅程序本身。以上错误参考如下:

public function getHeader(string $key, ?string $default = null): ?string

我们找到错误的文件对应位置,然后只需要删除getHeader(string $key, ?string $default = null)中的?string即可,当然,如果你的$default后面如果没有null,加上就可以了,有些参数也不是必须的。根据你升级后出现的问题,自行调整即可。

上两张图中,出现的错误都是一样的,所以我们只需要删除$default前面的标记即可,对应的哪一项出错,就改哪一项,其余的别改动就行。

如果是插件和主题的错误,则需要具体去看,我这个主题因为简单,所以未出现报错。插件也只是蓝河兄的RSS插件有一处报错,和上面的情况类似,都很容易处理。

SSL即将来到45天的时代?

缩短SSL证书有效期为90天是谷歌去年3月份提出的,一年半后,苹果公司提出的方案是45天。具体可查看《SSL证书有效期将缩短为45天》一文。

2025年9月15日 至 2026年9月14日,证书有效期缩短为200天
2026年9月15日 至 2027年4月14日,证书有效期缩短为100天
2027年4月15 日起,证书有效期缩短为45天

真假,目前自不可知,不过自动化SSL申请续签部署,应该是必不可少的环节了。

以后只存在两种情况,要么付费整年的证书,(这里给龙笑天下打个广告,他的证书一年只需50元,五年更便宜只用198元,具体的点击去看),要么就是自己部署工具。所以宝塔这次优化的自动续签成功率,对于我们这种小白来说也是一种好消息。

当然你也可以使用脚本工具或者相关工具,进行自动化续签。也可以参考前文我提到的工具《在宝塔面板上,用Docker安装部署Certimate可视化SSl证书管理工具》来部署。

本文参考资料:

[1]我爱水煮鱼://blog.wpjam.com/2024/11/23/php-8-4/
[2]PHP中文网://www.php.net/releases/8.4/zh.php
[3]宝塔面板://www.bt.cn/bbs/thread-19376-1-1.html
[4]KIMI://kimi.moonshot.cn/

wordpress全站外链跳转中间页

本来不想折腾的,但是没忍住。 前阶段搞那些地图、友圈时本来想顺便搞下的,不过大部分的wp外链跳转,都是针对文章内的链接跳转,没有评论者的网址链接跳转,试了几次都不尽如人意,原本都放弃了,正好浏览到 风未止博客 上有一篇文章,讲解通过js调用...

如何选择笔记软件

源起

作为OneNote重度用户,用了15年,工作、生活、知识库,都基于OneNote。之前我的笔记都是单篇,OneNote一直能满足我的要求:便利性、操作性、安全性:

  • 多端同步,Windows、手机、Mac都能使用;
  • 笔记容量大(我买了office365)
  • 类office操作,容易上手,跟office协同方便,富文本编辑功能强大;
  • 多端剪藏功能齐全,手机、电脑端都很容就剪藏到笔记;
  • 类笔记本层级结构,对于构建知识框架很方便;
  • OneNote用户群体大,背靠微软,从来不担心倒闭的问题。
  • 大企业,对隐私、数据的保护相对靠谱。

一直到2024年,准备写书的时候,才发现OneNote对于写作,确实不太友好:

  • 没有文章目录,并不利于长文写作;
  • 标签系统不方便;
  • 搜索功能拉胯,有些笔记,有时候搜索不出来,即使就在眼前,无法有效利用储备知识库。

结论:如果你现阶段以知识输入为主,OneNote是一个很好的知识容器,当你把知识转化为内容输出的时候,就发现其明显的弊端。简单说:用OneNote来装东西很好,但用起来不方便。

以上,说明一个基本事实:笔记用途决定了你的选择。

关于笔记的用途

一个全面的笔记软件,具备四个最重要的功能:

  • 输入:无论是剪藏还是记录个人想法,都很方便。
  • 管理:知识大多数都分解为元知识,以此为最小单元进行应用,双链笔记的意义就在此。例如某个人,某个知识点,某个观点等。
  • 输出:即个人想法,一般情况下以文章的形式输出,最终积累出多篇文章甚至一本书,这就需要对内容进行组织。
  • 规划:即用笔记来管理自己的生活和工作,明显的特点是:对人生体系、知识体系进行规划,对过程进行检验,并输出结论。

这就是俗称的all in one。

关于笔记,你不可忽视的事实

对于笔记,有些基本事实必须认清楚,才能更好做出决策。

容量问题

如果你是终身学习者,笔记会随着积累,容量不断扩大。我现在的笔记容量就达到了25G,还不包括图片和视频资料。这样的容量无论是obsidian还是思源的同步功能,都无法满足。如果你有留意两者的同步套餐,你会发现如下: - 思源:官方云端储存大小8G,居然没招到单位件限制; - obsidian:官方云端储存10G,单个文件200M; - Notion个人专业版:无限容量,单个文件没有限制; 这点考虑,obsidian和思源的同步功能是无法满足我长期的需求的,除非是搭建第三方同步。Notion可以,但考虑到如此大量的笔记存放在云端,这绝对是一件高危事项,风险太大。

笔记内容的组织方式问题

你希望自己的笔记、图片、视频,放入笔记之后,依然保持独立性,还是混杂在一个笔记里?Notion、OneNote这样的在线笔记,一旦上传进去就跟笔记整合在一起,无法单独管理和再次应用,例如:我希望把一系列的视频,整理成一个新的合集的时候,就很费劲,得挨个去找。但obsidian就很明显是独立一个文件夹存放,里面的图片和视频就是单独一个个文件,依然保持单元元素的特点。它跟Onedrive的结合,完美实现了大容量、元素独立应用、便于组织和整合的特点。

笔记的使用习惯问题

每一个笔记都有自己的优点,很难去区分优劣,例如:obsidian的优势是 Markdown格式,但这也是它的劣势;思源对此做了中庸的处理,增加了所见即所得功能,并且通过格式的转化,让双链达到了块级。Typora的优势是简洁专注,颜值高,这是它的优势也是劣势。OneNote拥有很好的兼容性,笔记操作超级灵活,即点即输入,可以插入任何文档,兼容HTML格式等等,但对于写书,它并不是最好的选择。

所以,如果你根据自己的用途选择了最合适的笔记,就必须慢慢去适应、使用和挖掘它的优势。当你习惯了,坚持使用了,用到深处,它必然就是最好的笔记软件。

安全性问题

物理上的安全性:

这是一个无法回避的问题,很多人宣传obsidian本地储存,不会消失。这是一种错觉!消失这件事,不会因为你是本地储存而风险降低。现实生活中,手机被偷、电脑损坏等情况数不胜数,多方式备份才是关键。

使用上的安全性:

在线文档你随时有被供应商查阅、训练AI的可能,为知笔记审查内容、松果文档泄露用户信息,是活生生的案例。从这个角度看,本地储存更安全。网络上的数据没有隐私可言,谁都不想自己的数据成果,被人白白利用。而且随着互联网内容质量逐步降低,个人笔记数据被用于训练的可能性,会越来越高。人性是不可以被考验的,考一个死一个。况且,我们也不是菩萨。

时间上的安全性:

笔记软件的寿命,很重要,笔记搬家绝对是极其痛苦的事。但一个笔记软件的寿命如何判断?主要从两个方面: 1、供应商的规模和市场份额、盈利能力:小企业和盈利模式不明确的笔记,暂时就不用选择了,不过知识管理工具不是一个高盈利的产品,赚的不多,没有情怀的企业,是做不下去的,我们看看为知笔记、幕布这两个软件就知道了,幕布现在都不更新了,老板跑去做氢图了。OneNote作为office365套装的一部分,在所有笔记软件中,安全系数是最高的。 2、如果是非商业化运作的软件,例如obsidian、思源等,这种能在本地部署的笔记软件,远比在线的笔记软件安全性高,因为即使供应商倒闭,依然能够单机处理笔记。

笔记目的

目的决定形式和内容。你跟一个女孩子想结婚还是玩玩,决定了你们做什么以及怎么做。

考虑笔记目的必须把时间拉长去看,而不是仅仅聚焦于眼前,毕竟笔记是一生的数字资产。在未来世界,也是最重要的资产。因为这个世界是波浪式前进的,一朵浪花产生,另一朵浪花就消失了,随着时间的推移,一些文明消失了,新的文明诞生了,社会文明总在湮灭和创造当中前进。笔记的作用是减少文明的湮灭。怎么理解?很多很有用的书籍,在我们6070年代能看到,但现在已经消失了,例如这本书《老实人启蒙》,替代它出现的是各种厚黑学及人性的书籍,但是从现在来看,《老实人启蒙》这本书,依然秒杀目前大多数的书籍。

在上一章《关于笔记的用途》中提到四个重要功能,前面三个至关重要,而在前三个中,整理和输出最为重要。我们做笔记肯定不是为了好看、好玩,而是产生价值。

关于笔记的选择

写到这里,相信大家对如何选择笔记,都有了自己的思路。我说下自己的选择思路,供参考。

首先:

我希望笔记具有双重的储存模式,本地和网络。这样在线笔记软件如Notion、flowus、语雀等就被枪毙了。

其次:

我希望笔记的储存、上传和处理,具有更高的灵活性,并且能跟我储存在云盘的图片、视频、语音、文件等具有良好的互动,且容量大。这样就必须用第三方储存的方式实现,而我是office365的长期会员,Onedrive就是我的最优选择。那就剩下OneNote、obsidian、Typora、思源笔记,不过,思源使用onedrive同步会有问题,直接pass掉。

第三:

我希望这个笔记软件具有较为强大的知识管理功能,很好调用元知识,并且形成网络关联,从而加深理解和应用,OneNote和Typora就直接pass掉了,最后剩下了obsidian。logseq也可以本地储存,但没有我习惯的文件夹目录结构,一来是不习惯,二来是无法直观看到内容,从而无法判断是否漏掉哪些重要知识。

最后:

在评估使用体验、笔记功能等,发现obsidian通过插件的应用,基本能满足我的要求。

小瑕疵:

很多人发了obsidian通过onedrive实现同步的教程,我发现onedrive一直卡在鉴权的步骤,其实onedrive已经授权了笔记的访问权限,但是!obsidian没有反应!况且,Remotely Save是个人写的插件,不是官方,太依赖它或者太相信它,总觉得有问题,因此就不在使用Remotely Save这个插件同步。

我现在觉得能实现不同电脑之间的同步,就很不错。至于移动端,我打算用微信笔记或者给自己发信息来记录临时想法,遇到好的文章,就发给自己或者使用微信收藏。到了电脑端再处理。

况且,现在我也确实想减少手机依赖,让眼睛休息一下。

目前使用的 WordPress 插件

以下是我目前使用的WordPress插件,共 11 个:

  • UpdraftPlus,核心备份插件,免费版支持定期备份到 Google Drive。近期迁移了一次,安装好WordPress和该插件,再关联一下 Google 账号即可备份成功,体验很好。
  • Blocksy 主题 + 插件,目前在使用的主题,免费版够用,可自定义选项多,颜值高。
  • Polylang,多语言插件,免费版功能齐全,中英文界面可同时 SEO 索引,增强博客覆盖面。
  • Antispam Bee,屏蔽广告评论。
  • Post SMTP,邮件发送插件,更简单的配置 SMTP。
  • Wenprise Better Emails,提供邮件模板,美化邮件。
  • WP Super Cache,网站缓存插件,提升网站加载速度。
  • WPS Hide Login,安全插件,可以自定义WordPress登录页面URL。
  • Rank Math SEO,SEO 优化插件,增强搜索引擎可见度。
  • Meow Gallery,图片画廊插件。
  • Juicer,社交媒体聚合插件,能为国内用户展示 Twitter 时间线。

目前已有足够的舒适度,之后会偏重稳定性,于是关闭了插件和主题的自动更新。除了安全性更新,尽量不动。

除了 Blocksy,都用的免费版。但 Blocksy 其实也没用到几个付费功能,只是比较喜欢,且长期使用,支持一下。

在 Jack 的帮助下,最近管理面板换成了 1Panel,舒适度比 AMH 要高一些,操作也更简单。

截图留念!

CleanShot 2024-11-24 at 15.52.48@2x.png

Follow:信息浏览聚合,万物皆可订阅

简介 Follow 是一款被标榜为“下一代信息浏览器”的软件,近期在信息聚合领域引起了广泛关注。它不仅仅是一个 RSS 阅读器,更是一个全方位的信息管理助手。这一创新的工具由资深互联网创业者 DIYgod 创立,他也是 RSSHub、xLog、DPlayer 等知名产品的创始人。Follow 的诞生,不仅延续了 RSSHub 的“万物皆可 RSS”的理念,更进一步扩展了信息订阅的边界,为用户提供了前所未有的信息整合体验。 Follow 通过结合 RSSHub 与 RSS3 的生态软件,极大地扩展了其订阅源的范围,使得用户可以订阅包括文章、社交媒体、图片、视频、音频以及通知等多种类型的内容。这种多元化的订阅模式,打破了传统 RSS 阅读器仅限于文本信息的局限,为用户带来了更加丰富和直观的信息消费方式。 什么是 RSS? RSS 是一种基于 XML 的数据格式,用于描述网站上的文章、新闻等内容。通过 RSS,网站可以将最新的内容推送给订阅者,而不需要订阅者手动访问每个网站。这种方式大大提高了信息获取的效率,让用户能够专注于感兴趣的内容。 软件特色 Follow 作为一款新一代的信息聚合平台,其核心功能和特色主要体现在以下几个方面: (一)多样化的订阅能力 Follow 的订阅能力堪称强大。除了支持常规的 RSS/Atom feeds,它还能订阅任何网页内容(即使该网页原本没有 RSS 订阅功能)以及各种社交媒体内容。用户可以轻松订阅 X 时间线、YouTube 频道、Bilibili 用户动态、邮件通讯等,真正实现了“万物皆可订阅”。 (二)智能过滤和推荐系统 面对信息爆炸的时代,Follow 采用先进的 AI 算法,为用户提供了智能过滤和推荐服务。它能够自动过滤重复内容,智能推荐用户感兴趣的文章,并根据用户的阅读习惯调整内容展示顺序,确保用户不会错过任何重要信息。 (三)多平...

WordPress首页调用memos方法!

WordPress首页调用memos方法! - 第1张图片

老张一直想把wordpress和memos能整合在一起,前几天在段先生的博客上看到了教程,便死皮赖脸的问他方法,原来是AI搞定的。刚开始的时候是直接拿段先生的用,但是里面有一些达不到自己想要的效果。比如段先生是从memos的RSS文件里取数但,如果memo里有多篇图片的话,RSS只能输出一张链接地址,其他找不到。通过找木木大佬,用了他提供的《Memos API 非官方不完全说明》便可以解决。另外在CSS布局上也不是自己想要的效果,便想着自己也来让AI搞吧!

让AI帮你写代码,你必须要学会怎么样能更好的和AI对话,必须要有一点点的代码基础,才能把把问题问在点子上。我在把memos的API输出的数据模式先告诉AI,然后再提出自己的要求,要求如下:

我想在wordpress获取memos的api发布第一条动态内容,API的链接地址是https://zhangbo.net/api/v1/memo?creatorId=1&rowStatus=NORMAL&limit=1 ,内容格式如下:
按以下要求进行操作:
1.读取第一个"id"后面的数据,并形成“https://zhangbo.net/m/+“id后面的数据”” 做为链接,赋值给变量$link_content
2.读取"content"后面的数据,读取以#号开始、空格结束的内容,并在前面加#号后赋值给变量$tag_content。
3.读取"createdTs"后面的数值,转化为时间后与当前时间计算时间间隔。时间间隔为1小时内的,以时间间隔+“分钟前”赋值给$time_content;时间间隔为24小时内的,以时间间隔+“小时前”赋值给$time_content;时间间隔为30天内的,以时间间隔+“天之前”赋值给$time_content;时间间隔超过30天的,直接以“年月日”形式赋值给$time_content。
4.读取"content"后面的数据,排除“![]()”图片形式、排除#、#及空格前的内容后,赋值给$content。
5.读取"content"后面的数据,如果有“![]()”图片形式,将()内的图片链接赋值给$image_content;如果"externalLink": 后面有数据,赋值给$image_content;如果"filename"后面有数据,将以“https://zhangbo.net/o/r/+filename上第四行ID后的数值+"filename"的数据”赋值给$image_content。如果以上情况都存在,那将以数值组形式赋值。
以上生成的代码,将保存在wordpress的主题文件functions.php中以便调用。
按以下要求生成CSS代码
1.对于在首页展示的要求,在首页文章列表上方,与首页文章空两行
2.显示框宽度100%、背景灰色、四角椭圆。
3.第一个DIV展示框以"h2”格式展示“最新动态”四个字、靠左对齐、左边距空20px;务必同一行展示$time_content值,右居中对齐,右边距空20PX
4.第二DIV插入细实线、深灰色
5.第三DIV展示$content值
5.第四DIV展示$image_content值的缩略图,缩略图四角椭圆并有阴影,如果多图从左往右排列。并按确保引入 Lightbox.js,也写入到本代码中,达到点击放大效果
6.第五DIV靠左对齐展示$tag_content值,背景灰色并四角椭圆,靠右展示“点击评价”点击链接到$link_content。
再生成输出代码以便插入在首页文件index.php,以便在首页显示。/

我分别测试了官方GPT、三方GPT和豆包,结果是官方GPT直接来句“问题太复杂,请分类进行提问”,三方GPT给出的代码效果完全不对,而豆包给出的代码基本上达到要求。当然,还是由于自己的表述,导致代码在图片显示这块有些问题。今天中午利用几分钟时间,进行了修改,对获取图片链接地址重新让AI写,我是这样提问的:

我现在的要求是其他代码不需修改,只对获取图片链接重新按以下要求来修改
1.读取"content"后面的数据,如果有“![]()”图片形式,将()内的图片链接赋值给$image_content;
2.获取  "resourceList": []的中括号里数据,这是图片组,每组以{}进行区分,查询每个{}内的"externalLink",如果"externalLink": 后面有数据,赋值给$image_content;如果"externalLink"无数据,则以“https://zhangbo.net/o/r/+该图片id+"filename"的数据”赋值给$image_content。
如果以上情况都存在,那将以数值组形式赋值。

经过这样的修改,图片才得要正确显示。后来又陆陆续续的修改了CSS样式,最终达到目前的效果。

现在把相关代码贴给大家吧,需要的自取,不合自己要求的,也可以让AI帮你来修改。

1.把下面的代码插入到主题文件的index.php合适位置。

 <?php
$memoOutput = processMemoData();
if ($memoOutput) {
echo $memoOutput;
}
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox-plus-jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css">/* Your code... */

2.把CSS样式代码放置到主题CSS定义设置里,当然也可以直接放到style.css中。


/* 首页调用memos效果---开始 */
/* 缩小与顶部距离,增加与首页文章列表距离 */
.memo-display {
    margin-top: 0px; /* 减少与顶部的距离 */
    margin-bottom: 40px; /* 增加与文章列表的距离 */
    margin-right: 40px; /* 设置右边距为20px */
    width: calc(100% - 40px); /* 计算宽度以适应右边距 */
    background-color: #f2f2f2;
    border-radius: 10px;
    padding: 20px;
    border: 1px solid #ccc; /* 添加细线边框,颜色为浅灰色 */
}


/* 第一个 DIV:展示“最新动态”和时间 */
.memo-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.memo-header h2 {
    margin-left: 0px;
}

.memo-header span {
    margin-right: 0px;
}

/* 第二 DIV:插入细实线、深灰色 */
.memo-divider {
    border-top: 1px solid #999;
    margin: 10px 0;
}

/* 第三 DIV:展示内容 */
.memo-content {
    margin-bottom: 10px;
    line-height: 1.5; /* 或者可以使用具体的像素值,如 1.5em 或 24px */
}
/* 第四 DIV:展示缩略图 */
.memo-images {
    display: flex;
    flex-wrap: wrap;
}

.memo-images img {
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
    margin-right: 10px;
    cursor: pointer;
    transition: transform 0.3s ease; /* 添加过渡效果 */
}

.memo-images img:hover {
    transform: scale(1.1); /* 鼠标悬浮时放大 */
}

/* 第五 DIV:展示标签和链接 */
.memo-footer {
    display: flex;
    align-items: center;
    margin-top: 10px; /* 设置与上面容器的距离为 30px */
}

.memo-footer div:first-child {
    background-color: #9999;
    border-radius: 6px;
    padding: 5px 10px;
    margin-right: 10px;
}

.memo-footer a {
    text-decoration: none;
    margin-left: auto; /* 靠右对齐 */
    margin-right: 0px; /* 右边距 20px */
}
/* 首页调用memos效果---结束 */

3.把下面代码插入到主题functions.php文件中。

/* Your code... */
//-------首页调用memoe代码-----开始
function getTimeContent($createdTs) {
    $current_time = time();
    $time_diff = $current_time - $createdTs;
    static $cachedTimeContent = null;
    static $lastCreatedTs = null;
    if ($lastCreatedTs === $createdTs) {
        return $cachedTimeContent;
    }
    if ($time_diff  100) {
        $substr_content = mb_substr($content, 0, 100, 'UTF-8');
        $last_char = mb_substr($substr_content, -1, 1, 'UTF-8');
        $last_char_ascii = ord($last_char);
        while ($last_char_ascii  126) {
            $substr_content = mb_substr($substr_content, 0, -1, 'UTF-8');
            $last_char = mb_substr($substr_content, -1, 1, 'UTF-8');
            $last_char_ascii = ord($last_char);
        }
        $content = $substr_content. '......';
        $link_text = '查看原文';
    } else {
        $link_text = '点击评价';
    }

    $content_without_tags_and_images = preg_replace('/#.*? /', '', $content);
    $content_without_tags_and_images = preg_replace('/!\[.*?\]\(.*?\)/', '', $content_without_tags_and_images);
    $content = $content_without_tags_and_images;

    // 构建输出内容
    $output = '
'; $header = '

最新动态

'. $time_content. '
'; $divider = '
'; $contentDiv = '
'. $content. '
'; $imagesDiv = ''; if (!empty($image_content)) { $imagesDiv = '
'; foreach ($image_content as $image_link) { $imagesDiv.= 'Image'; } $imagesDiv.= '
'; } $footer = '
'. $tag_content. '
'. $link_text. '
'; $output.= $header. $divider. $contentDiv. $imagesDiv. $footer; $output.= '
'; return $output; }

OK,结束!折腾十几个小时,就是出了这篇教程!!

WordPress创建自定义读者墙功能

前言

在逛不亦乐乎博客时,我被其留言页面上读者墙的样式深深吸引。此外,在wys的友链页面,我也看到了独特的样式,这让我心痒难耐。于是,我开始在网上搜索相关的信息,偶然发现了张戈博客之前写过的一个插件。虽然这个插件由于年代久远已不再适用,但我决定根据其代码进行修改,并将其实现到自己的博客中。

步骤

1. 添加代码至 functions.php

首先,在你博客的主题目录下找到并打开 functions.php 文件。然后,将以下代码添加到文件末尾:

// 注册并加载读者墙的CSS样式
function enqueue_readers_wall_styles() {
    global $post;
    if (is_a($post, 'WP_Post') && has_shortcode($post->post_content, 'readers_wall')) {
        wp_enqueue_style('readers-wall-style', get_template_directory_uri() . '/css/readers-wall.css', array(), '1.0.0');
    }
}
add_action('wp_enqueue_scripts', 'enqueue_readers_wall_styles');

// 辅助函数:生成排行列表
function generate_readers_list($title, $query, $limit) {
    global $wpdb;
    $output = '';

    // 使用 transient 缓存查询结果
    $transient_key = 'readers_wall_' . md5($query);
    $wall = get_transient($transient_key);

    if (false === $wall) {
        $wall = $wpdb->get_results($query);
        set_transient($transient_key, $wall, 3600);
    }

    $output .= '<div class="readers-section">';
    $output .= '<h2 class="entry-title">' . esc_html($title) . ' TOP' . esc_html($limit) . '</h2>';

    if ($wall) {
        $output .= "<ul class='readers-list'>";
        foreach ($wall as $comment) {
            $avatar = get_avatar($comment->comment_author_email, 64, '', '', array('loading' => 'lazy'));
            $url = esc_url($comment->comment_author_url ? $comment->comment_author_url : "#");
            $author = esc_html($comment->comment_author);
            $count = intval($comment->cnt);
            // 用作者名称替代邮箱作为 tooltip 的 ID
            $tooltip_id = sanitize_title($author);

            $tooltip = "{$author}<br>评论数: {$count}";

            $output .= "<li>
                            <a rel='friend' target='_blank' href='{$url}' aria-describedby='tooltip-{$tooltip_id}'>
                                {$avatar}
                                <div class='tooltip' id='tooltip-{$tooltip_id}' role='tooltip'>{$tooltip}</div>
                            </a>
                        </li>";
        }
        $output .= "</ul>";
    } else {
        $output .= "<p>没有找到" . esc_html($title) . "数据。</p>";
    }

    $output .= '</div>';

    return $output;
}

// 短代码函数:读者墙
function readers_wall_shortcode() {
    global $wpdb;
    $output = '';

    // 评论总排行榜
    $query2 = $wpdb->prepare(
        "SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email 
        FROM $wpdb->comments 
        LEFT JOIN $wpdb->posts ON ($wpdb->posts.ID = $wpdb->comments.comment_post_ID) 
        WHERE post_password = '' 
        AND comment_approved = '1' 
        AND comment_author != %s 
        GROUP BY comment_author_email 
        ORDER BY cnt DESC 
        LIMIT %d",
        '段先森',
        12
    );
    $output .= generate_readers_list('评论总排行榜', $query2, 12);

    // 年度评论排行
    $query1 = $wpdb->prepare(
        "SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email 
        FROM (
            SELECT * FROM $wpdb->comments 
            LEFT JOIN $wpdb->posts ON ($wpdb->posts.ID = $wpdb->comments.comment_post_ID) 
            WHERE comment_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 YEAR) AND NOW() 
            AND post_password = '' 
            AND comment_approved = '1'
            AND comment_author != %s
        ) AS tempcmt 
        GROUP BY comment_author_email 
        ORDER BY cnt DESC 
        LIMIT %d",
        '段先森',
        365
    );
    $output .= generate_readers_list('年度评论排行', $query1, 365);

    // 本月评论排行
    $query2 = $wpdb->prepare(
        "SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email 
        FROM (
            SELECT * FROM $wpdb->comments 
            LEFT JOIN $wpdb->posts ON ($wpdb->posts.ID = $wpdb->comments.comment_post_ID) 
            WHERE DATE_FORMAT(comment_date, '%%Y-%%m') = DATE_FORMAT(NOW(), '%%Y-%%m') 
            AND post_password = '' 
            AND comment_approved = '1'
            AND comment_author != %s
        ) AS tempcmt 
        GROUP BY comment_author_email 
        ORDER BY cnt DESC 
        LIMIT %d",
        '段先森',
        31
    );
    $output .= generate_readers_list('本月评论排行', $query2, 31);

    // 本周评论排行
    $query3 = $wpdb->prepare(
        "SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email 
        FROM (
            SELECT * FROM $wpdb->comments 
            LEFT JOIN $wpdb->posts ON ($wpdb->posts.ID = $wpdb->comments.comment_post_ID) 
            WHERE YEARWEEK(DATE_FORMAT(comment_date, '%%Y-%%m-%%d')) = YEARWEEK(NOW()) 
            AND post_password = '' 
            AND comment_approved = '1'
            AND comment_author != %s
        ) AS tempcmt 
        GROUP BY comment_author_email 
        ORDER BY cnt DESC 
        LIMIT %d",
        '段先森',
        7
    );
    $output .= generate_readers_list('本周评论排行', $query3, 7);

    return $output;
}
add_shortcode('readers_wall', 'readers_wall_shortcode');

2. 创建 CSS 文件

在你主题的目录下,找到 css 文件夹,并新建一个名为 readers-wall.css 的文件。将以下样式代码粘贴到该文件中:
/* readers-wall.css */

/* 容器样式 */
.readers-section {
    margin-bottom: 30px;
}
.readers-section h2.entry-title {
    font-size: 24px;
    margin-bottom: 15px;
    color: #333;
}

/* 头像列表样式 */
.readers-list { 
    display: flex; 
    flex-wrap: wrap; 
    list-style: none; 
    padding: 0;
    margin: 0;
}
.readers-list li {
    position: relative;
    margin: 10px;
    width: 50px; /* 调整头像大小 */
    height: 50px;
}
.readers-list li a {
    display: block;
    width: 100%;
    height: 100%;
    text-align: center;
    text-decoration: none;
    position: relative;
}
.readers-list li img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
    transition: transform 0.3s ease;
}
.readers-list li a:hover img,
.readers-list li a:focus img {
    transform: scale(1.1);
}

/* 悬停信息框样式 */
.readers-list li .tooltip {
    visibility: hidden;
    opacity: 0;
    width: 160px;
    background-color: rgba(0, 0, 0, 0.75);
    color: #fff;
    text-align: center;
    border-radius: 6px;
    padding: 8px;
    position: absolute;
    bottom: 60px; /* 头像上方 */
    left: 50%;
    transform: translateX(-50%);
    transition: opacity 0.3s ease;
    z-index: 10;
    font-size: 14px;
}
.readers-list li .tooltip::after {
    content: "";
    position: absolute;
    top: 100%; /* 箭头指向头像 */
    left: 50%;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: rgba(0, 0, 0, 0.75) transparent transparent transparent;
}
.readers-list li:hover .tooltip,
.readers-list li a:focus .tooltip {
    visibility: visible;
    opacity: 1;
}

/* 响应式设计 */
@media (max-width: 600px) {
    .readers-list li {
        width: 40px;
        height: 40px;
    }
    .readers-section h2.entry-title {
        font-size: 20px;
    }
    .readers-list li .tooltip {
        width: 140px;
        font-size: 12px;
    }
}

3. 新建页面并插入简码

在你的 WordPress 后台,创建一个新页面或编辑现有页面,并插入以下简码:
readers_wall

结尾

以上就是我在个人博客上实现自定义读者墙功能的步骤。如果你希望根据自己的需求进行样式调整,可以随意修改 readers-wall.css 中的 CSS 代码,

感谢 maie 的提醒,已修改funtions.php相关代码,隐藏邮箱地址。新增评论排行总榜

你好,follow

感谢diygod让我使用上了这款体验感非常强的神器。

关于

Follow是rsshub开源作者的又一款项目,作者的定义是下一代信息浏览器。

介绍

欢迎使用 Follow!此软件旨在让您在一个地方关注您喜爱的网站、博客、社交媒体帐户、播客和通知。它被设计为一个现代、快速且方便的一体化信息中心。

AI:Follow 利用先进的 AI 来协助您的运营。除了基本的 AI 翻译、摘要和推荐之外,它还提供每日两次的 AI 报告,以突出显示您订阅中的关键信息。此外,它还提供根据您的订阅构建的个性化 AI 知识库。

区块链:Follow采用区块链技术作为活跃用户和优秀创作者的激励机制,用户通过持有和使用Power Token可以获得更多服务和福利,创作者通过提供优质内容和服务可以获得更多奖励。

社交:Follow 也是一个社交平台,您可以关注其他用户、分享您的订阅并发现新内容。它还提供订阅列表同步功能,让您的朋友同步您的订阅。

支持的平台:关注适用于 Windows、macOS、Linux 和浏览器的桌面版;关注适用于 Android 和 iOS 的移动版(即将推出)。

体验

让我体验感最大的就是不用输入rss地址,直接输入网址自动获取,还可以看见订阅你博客的人数(前提是使用follow订阅)

图片模式很爽,壁纸、摄影等等,我把订阅的阿里云网盘以图片的方式呈现出来,真的很不错。

视频里面可以添加B站、YouTube等等,可以直接在线观看,爽爆了。

还有社交、音频等等,我都还没体验过,就前面的这些,我都体验不过来咯。

总结

Follow是目前在我看来,非常完美的信息聚合神器。它的使用方法需要邀请码来实现,每次邀请一人需要花费100Power。每天登录可获得20power,所以说,5天可以邀请一人。

之前对于rss订阅,在我的理解方式里是聚合文章,主要是为了查看博友文章。Follow的出现,让我打开了一座新大门。
话不多说,赶紧体验吧,一起交流、一起学习。

使用 Follow 的第 50 天:RSS 迎来又一春?

刚刚翻了翻在 Twitter 上和 DIYgod 的私信,他于7月31日送我一枚邀请码,我至今已使用 Follow 50天,说长不长,说短不短,我猜应该是最早的一批内测用户,其他人还在苦苦等待邀请码,而我却早早用上,今天简要分享我的使用体验与感受。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第1张图片

RSS 与我

我已记不清从什么时候开始接触 RSS 及 RSS 阅读器,最早的印象来自它的图标,一个向右倾斜 45° 的 Wi-Fi 图标。最早使用的 RSS 服务是 Inoreader,除了免费账户150个订阅源限制,基本上没有缺点,但对于轻度或中度用户来说,150个订阅源足够,并不是说订阅越多越好,重点在于对信息的取舍,你关注什么内容固然重要,但放弃什么内容也是一种选择。

最初仅仅用来订阅博客,每天早上打开电脑就直奔 Inoreader,刷新一遍,读一读更新内容,后来订阅了一些资讯网站,比如少数派、IT之家。再接触到 RSSHub,一个让网站 RSSible 的工具,扩宽了我的订阅源。

直到使用 Follow 之前,我使用的是自建 FreshRSS 服务与 NetNewsWire 阅读器。

传统的 RSS 阅读器

我在之前的文章《我还是更喜欢这样的RSS阅读》和《如何订阅一个博客?》都介绍过几款较为流行的 RSS 服务,包括在线网页服务以及客户端软件,这些似乎都可以被归类为传统的 RSS 阅读器,不管是通过 FreshRSS 同步,还是本地保存,本质都是输入 RSS 地址进行订阅,支持导入和导出 OPML 文件。

功能大多类似,比如抓取全文内容,即使 RSS 源只提供摘要,也能在阅读器里查看全文,再比如给你推荐感兴趣的订阅源、收藏喜欢的文章等等。Readwise Reader 似乎与笔记软件结合,可以一边阅读文章,一边划线、做笔记,我没有用过,暂不进行讨论。

也正是因为现在越来越多的网站为了引导读者进入原网站进行阅读,而取消 RSS,使用 RSS 的人也越来越少,RSS 和 RSS 阅读器似乎成了被时代遗弃的产物。

新兴的 RSS 阅读器——Follow

传统 RSS 阅读器提供的功能,Follow 都有,传统工具没有的功能,Follow 添加的十分巧妙、有趣。

RSSHub 和 Follow 来自于同一个开发团队,两者一起使用,堪称绝配。因此 Follow 上少不了 RSSHub 的影子,点击 Follow 左上角的加号,可以通过搜索关键词、域名查找对应的 RSS 源,也可以通过输入 RSSHub 路由订阅由 RSSHub 生成的源。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第2张图片

使用 Follow 的第 50 天:RSS 迎来又一春? - 第3张图片

如果实在不知道订阅什么(说明你不适合使用 RSS 服务),下方的“热门”或许可以提供一些参考和灵感,再或者,直接订阅我的博客,设置分类为“特别关心”。

毕竟 P 站都摆在那了,再不懂就说不过去了,感谢贡献者

使用 Follow 的第 50 天:RSS 迎来又一春? - 第4张图片

Follow 提供文章以外的多种形式。

  • 文章。适合博客、newsletter 等长篇内容网站;
  • 社交。适合订阅 Twitter、微博等社交媒体,关注某个人或某个关键词的时间线;
  • 图片。适合订阅 Instagram、Tumblr 等图片网站;
  • 视频。除了上面提到的 P 站,YouTube、哔哩哔哩都是可以订阅的;
  • 播客。我对播客了解甚少,订阅某一档播客之后,可以直接在 Follow 中收听;
  • 通知。适合订阅某个软件、服务的更新通知,简短快捷。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第5张图片

简单来说,RSSHub 提供源,Follow 提供阅读的形式。思维发散一下,往往会有不一样的惊喜,比如下面我使用图片形式订阅 Twitter 上的壁纸分享账号和 Telegram 上的影视资源分享频道。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第6张图片

使用 Follow 的第 50 天:RSS 迎来又一春? - 第7张图片

使用 Follow 的第 50 天:RSS 迎来又一春? - 第8张图片

一个简单的壁纸墙、影视库就呈现在眼前。剧荒了,刷一刷,壁纸厌倦了,刷一刷。

使用视频形式订阅了几个Up主,不用跳转到原网站,也能直接观看视频。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第9张图片

使用 Follow 的第 50 天:RSS 迎来又一春? - 第10张图片

对于喜欢边看视频边发弹幕讨论的人来说,就不太友好,无法发弹幕和评论,但对我来说简直不要太爽,因为我看视频不喜欢评论和弹幕来影响我的观看体验。

Feedly 上使用了 AI 功能,具体什么用途我也搞不懂,但是 Follow 上的 AI 倒是有挺大用处。主要体现在“自动化”上,通过设置相应的条件,执行某个动作,其中就有“使用 AI 生成摘要”、“翻译”,我猜翻译也使用了 AI 加成。

我目前只设置了一项,即当标题是英文,则自动将其翻译成中文,类似 Buzzing.cc 的用母语阅读新闻,其中用到了正则表达式,我不会写,幸好有 Perplexity.ai 代劳,这叫 AI helps AI。最后隔空喊话 Follow 开发团队,是否有正文双语翻译功能?

使用 Follow 的第 50 天:RSS 迎来又一春? - 第11张图片

如果仅仅是加上 AI,也并没有非常吸引人,反而还会被人说成“跟风”,但如果加上轻社交,体验又不一样了。

或许是为了满足大家的偷窥欲,使用者可以查看其他用户订阅的内容,甚至直接订阅他的订阅。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第12张图片

使用 Follow 的第 50 天:RSS 迎来又一春? - 第13张图片

或许是为了满足大家的成就感,在阅读界面上方,展现了当前文章有多少人阅读过。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第14张图片

又或许是为了满足大家的撒币感,接入了 Web3,使用代币 Power,成为金主爸爸,给你喜欢的作者打赏和充电,以及生成邀请码。欢迎大家做我的金主爸爸。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第15张图片

如何让别人知道这是你的源,方便直接打赏给你呢,Follow 提供了 claim 功能,只需要在 RSS 中添加相应内容,即可将其认证为自己的源。比如我的博客、Telegram 频道、Twitter 账号,均已认证,名称旁边有个小金标,多好看,多酷,不愧是全宇宙最帅的 DIYgod,这都被他考虑到了。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第16张图片

使用 Follow 的第 50 天:RSS 迎来又一春? - 第17张图片

如何简单、快捷、高效地 claim 呢?移步至槿呈Twitter 分享,他已经介绍得足够详细,有问题找他,解决不了再找 AI,这叫 AI helps RSS

紧接着就可以在阅读的末尾看到金主爸爸的头像。

使用 Follow 的第 50 天:RSS 迎来又一春? - 第18张图片

据小道消息,目前 Follow 还处于 Alpha 阶段,存在许多 bug,便采用邀请制度,但也在慢慢扩大内测范围,已经有资格的用户每5天即可生成一个邀请码,即使邀请码不易获得,但不建议大家花钱购买,也不建议大家将其售卖,我的朋友槿呈说找他要邀请码的人已经排到了猴年马月,可以尝试继续找他,当然也可以找我,通过 Telegram 和 Twitter 私信、电子邮件联系,先到先得,再或者继续骚扰下 DIYgod,多夸夸他,或许就有了呢。看到 Twitter、Telegram 上有许多人在等待 Follow 邀请码,突然间觉得 RSS 不单单是我们博客圈的小众爱好,或许 RSS 将迎来又一春。

由于 PC 端存在 bug,无法加载中文语言包,上述内容和截图都基于 Web 版 Follow,客户端上还有更多有趣的功能,不再一一叙述,留给自己去挖掘。

《阿甘正传》中有一句经典台词:Life was like a box of chocolates. You never know what you're gonna get. Follow 也像一盒巧克力,你永远不知道开发者在下一次更新中会带来什么口味的功能。

使用 Follow 的第 50 天:RSS 迎来又一春?》最先出现在印记

1Panel 反向代理网站并解决 502 错误

使用 1G 内存的阿里云轻量香港一段时间了,由于内存过小,机器内存占用长期超过 70%,时不时会卡到需要重启,于是又搞了台 2G 内存洛杉矶的 VPS,决定把将博客迁移过去,然后使用阿里云香港进行反向代理,做一个 CDN 节点。这篇文章会简单记录一下,在两台 VPS 均使用 1Panel 面板的情况下,如何实现发反向代理网站,并解决出现的 502 错误。

1Panel 反向代理网站并解决 502 错误最先出现在Jack‘s Space

Hi,Follow

非常喜欢「Follow」这个名,F谁F什么内容本该是一种主动行为。古早有句调侃“打开 Feed 订阅器,如批阅奏章,或细看或一键已阅”。现在更是丰富多彩,一个 APP 集中浏览这奏章,有文、有图、有音频、有视频、还是通知,大千世界,尽在眼前 👀

感谢 @大毛 的邀请码,使用 Follow (https://follow.is/) 已一周有余,趁台风天宅家记录一下 123。

什么可以 F

如题图,直接粘贴链接即可判断是不是支持,比手动查询 RSS、RSSHub 规则等方便太多太多太多。

光这点,已经满足很多刚需,各平台上的UP主、Vlog 动态、频道更新,不用一个个打开各自的 APP 接手各类算法推荐信息后才确认自己关注的是否更新。

提醒:默认个人关注的 Feed 列表是公开的。

什么值得 F

在具体的文章页面顶部,能看到一串头像,点开一个即可看这个小伙的关注列表,所以个别 Feed 记得选择好 Private 不公开。

怎么 F 更爽

图片模式

把电报的云盘频道以图片瀑布流模式显示,嗯,养眼。🤩

视频模式

B站、小红书、P站?……

怎么 F 更强

操作 Action

开启全局 AI 摘要、过滤时间轴上的 Re 推等。简单点用来过滤,不知之后会不会加上自动化啥的。

Feed Claim

认领自己的 Feed,收到内置的 Power 能量代币?不管与否,先认了再说。

This message is used to verify that this feed (feedId:42331815237783583) belongs to me (userId:56221637590078464). Join me in enjoying the next generation information browser https://follow.is.

结语

照目前来看, Follow 充满了想象力,比如直接内置 xlog 平台的评论系统?付费订阅支付系统?

免费引入商用黑体字体系列整理及 CSS 字体引入亲妈式教程(20240915更新)

由于微软雅黑的设计太过老旧,所以很多网站在设置font-family字体家族时,都会首先引入苹果的苹方字体(PingFang SC)。一来为了照顾 MAC,二来可以改善 Windows 上显示效果(已安装苹方字体的前提)。现在,一些厂商会在官网上引入自己研发的字体。感谢各大厂商没有禁止 woff 字体文件跨域使用,可以让我们白嫖,因为你们的字体是真的漂亮,并且以下字体可以个人免费使用。

更新说明

20240915 更新说明
1. 去除失效链接
2. 增加 MiSans 可变字体链接
3. 增加快看世界体

20230606 更新说明
1. 增加了阿里妈妈系列三款字体:方圆体/灵动体/刀隶体 web 引用链接

20230405 更新说明
1. 增加了钉钉进步体、阿里妈妈东方大楷 web 引用链接

20230312 更新说明
1. 增加了钉钉进步体和斗鱼追光体文件下载链接,但暂未有 web 引用链接
2. 标注华康金刚黑授权性质,请谨慎使用
3. 优化排版

20230306 更新说明
1. 增加了阿里妈妈数黑体 cdn 链接
2. 标注 CDN 公开性质
3. 优化部分说明文案
4. 优化排版

20221123 更新说明
1. 2022 年 11 月 17 日发现 OPPO 字体 – MasterGo 网站已关闭跨域请求,链接仅供下载使用了。
2. 增加了 unicode-range 优化说明

字体列表及引用链接

专题站点

服务商链接
Googlehttps://fonts.google.com(需 VPN)
Adobehttps://fonts.adobe.com(需授权)
阿里巴巴https://fonts.alibabagroup.com
钉钉进步体https://page.dingtalk.com/wow/dingtalk/default/dingtalk/y-W5aF3_ZJwzulU0nceIl
斗鱼追光体https://www.douyu.com/topic/douyuZGT
快看世界体https://www.kuaikanmanhua.com/webs/fontPromotion
Mi Sanshttps://hyperos.mi.com/font/zh/
HarmonyOS Sanshttps://developer.huawei.com/consumer/cn/design/resource-V1
OPPO Sanshttps://open.oppomobile.com/new/developmentDoc/info?id=13223

网页引入

字体名称服务商字重链接
Noto SansGoogle可变https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100..900&display=swap
Mi Sans小米多种https://font.sec.miui.com/font/css?family=MiSans:0:Chinese_Simplify,Latin&display=swap
可变https://cdn-font.hyperos.mi.com/font/css?family=MiSans_VF:VF:Chinese_Simplify,Latin&display=swap
HarmonyOS SansB 站400https://s1.hdslb.com/bfs/static/jinkela/long/font/regular.css
500https://s1.hdslb.com/bfs/static/jinkela/long/font/medium.css
OPPO Sans#1OPPO400https://code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Regular.woff2
500https://code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Medium.woff2
华康金刚黑#2字节跳动400https://fonts.bytedance.com/dfd/api/v1/css?family=DFPKingGothicGB-Regular&display=swap
500https://fonts.bytedance.com/dfd/api/v1/css?family=DFPKingGothicGB-medium&display=swap
  1. OPPO 的在线引用 WOFF2 截取了 5000 字,因此在一些不常用的字上回出现不显示的情况
  2. 华康金刚黑实际和苹方是一个字体,因此需要授权才可使用。虽然 cdn 是可以跨域使用,但请谨慎。

引入字体

上述字体列表链接中,若是 css 链接可直接引用,若是 woff 字体链接需在你的 css 文件中引入。具体方式见下:

CSS

方式 1	在 html 中直接引入:<link rel='stylesheet' href='链接.css'>
方式 2	在 css 中引入:@import url('链接.css');

WOFF2

在 css 中引入
@font-face {
	font-family: OPPOSans;	//定义字体名称
	font-weight: 400;	//定义字重
	font-display: swap;
	src:url('链接.woff2') format('woff2');	//字体链接
}

完成上述引入字体文件后,那么在需要使用的元素处设定 css 属性 font-family 中输入字体名称即可,注意:字体名称要和引用的字体名称相同。

字重说明

浏览器默认字重 400,假如对标题想要使用粗体该如何操作呢?在设定字体字重时会有两种不同的呈现效果方式。

情况一

例如下述两个不同字重文件都使用 OPPO-Sans 名称,但在引入字体时设置了不同的字重和链接:
@font-face {
	font-family: OPPO-Sans;
	font-weight: 400;
	font-display: swap;
	src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Regular.woff2) format('woff2');
}
@font-face {
	font-family: OPPO-Sans;
	font-weight: 500;
	font-display: swap;
	src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Medium.woff2) format('woff2');
}

那么在对 h1 这个部分引用时,如何使用字重 500 的字体呢?只需要在实用的元素设定 CSS 属性 font-weight 为 500 即可。即下述:
div { font-weight: 400; }	// 普通元素在引入 400 字重时
h1 { font-weight: 500; }	// 标题元素在引入 500 字重时

情况二

例如下述两个不同字重文件使用不同字体名称,在引入字体时也设置了不同的字重和链接:
@font-face {
	font-family: OPPO-Sans-Regular;
	font-weight: 400;
	font-display: swap;
	src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Regular.woff2) format('woff2');
}
@font-face {
	font-family: OPPO-Sans-Medium;
	font-weight: 500;
	font-display: swap;
	src: url(//code.oppo.com/content/dam/oppo/common/fonts/font2/new-font/OPPOSansOS2-5000-Medium.woff2) format('woff2');
}

那么在使用不同字重时,只能使用当初设定该字重的字体名称。即下述:
div { font-family: OPPO-Sans-Regular; }	// 普通元素在引入 400 字重时
h1 { font-family: OPPO-Sans-Medium; }	// 标题元素在引入 500 字重时

你会发现,无论是否使用相同名称,font-weight 的值都必须要与实际的字体字重文件匹配。若使用不同的字体名称,一方面增加代码工作量,另一方面还不易解读。因此,通过两个字重的使用方式,如果从便于管理的角度来看,情况一更为方便。

font-display swap 说明

你会发现很多引入字体的文件都会标注这个属性,它的作用是在没有加载出字体前,优先加载本地字体进行渲染,避免网页出现空屏。若您想了解关于该部分的研究资料及加载字体所带来的影响,推荐您查看该文章《知乎:一种减少字体加载影响的新方法:CSS 字体描述符(译)》

unicode-range 优化说明

当你引入官方的 css 字体链接后,有些文件里的一个 unicode-range 属性引起了你的注意,这个属性的作用是规定不同的字符加载不同字符集文件。通俗讲我们会把一个字体分成多个字符集,然后按需加载。例如一个页面只有 500 个字,但是这 500 个字恰好都在一个字符集里面,那么其他的字符集就不需要加载,换句话说就不需要加载整个字体文件,因此节省了流量和优化了加载速度。

使用该优化方式的上述链接中有:思源黑体(谷歌)、小米字体(小米)、鸿蒙字体(B 站)、华康金刚黑(字节跳动)

字体文件格式

本文一律使用 woff2 字体格式,在如今浏览器趋于 Chromium 内核的潮流下,作为个人站点可以不需要考虑旧版本浏览器的兼容性。若您想了解其他字体格式,推荐您查看《知乎:关于字体格式》

结语

就 windows 上的清晰效果而言,无论你使用何种字体,都没有在 windows 经过特殊优化的微软雅黑更好。如今当你在 windows 安装苹方字体后,你会发现苹方字体的显示效果也十分漂亮,这是因为科技的进步使得显示器分辨率越来越清晰。所以就算使用没有在 Windows 经过特殊优化的字体,也会在 Windows 上大放异彩。

使用 Docker 自托管 VS Code 网页版

code-server 是一款强大开源工具,它将 Visual Studio Code 带入了基于 Web 的在线环境。它使您可以通过 Web 浏览器远程访问和使用 VS Code 的功能,而无需在本地安装应用程序。

主要功能

远程开发:允许您从任何地方使用 Web 浏览器访问您的开发环境。这意味着您可以在不同设备和操作系统上一致地编辑和运行代码;

扩展系统:可以安装并使用 VS Code 的广泛扩展库,从而扩展编辑器的功能。包括语言支持、主题、代码片段和工作流自动化等方面;

语言支持:提供了广泛的编程语言支持,包括 JavaScript/Python/Java 等。您可以在一个统一的开发环境中处理多种编程任务;

集成终端:它内置了一个终端,让您可以在同一界面中执行命令、安装依赖、运行应用程序;

版本控制:集成版本控制系统,使您可以轻松地管理和跟踪代码更改;

团队协作:允许多个开发人员同时协作,通过共享工作区和代码库来增强团队协作能力。

部署过程

使用 Docker 自托管 VS Code 网页版是一种便捷方式,首先确保系统上安装 Docker。可以使用以下命令来安装 Docker:

1
curl -fsSL https://get.docker.com | sh

使用 Docker 命令拉取 code-server 镜像:

1
docker pull codercom/code-server:latest

在宿主机创建一个目录用于持久化配置和数据:

1
mkdir -p /docker/vscode

运行容器,并设置密码和端口映射「这里 your_password 替换为你想要设置的密码」

1
docker run -d --name code-server -p 8080:8080 -e PASSWORD=your_password -v /docker/vscode:/root/.vscode-server codercom/code-server:latest

验证访问

检查容器是否成功运行:

1
docker ps -a

在浏览器访问以下地址,并使用设置的密码登录:

1
http://IP:8080

运行效果

工具的运行效果如下图所示:

中秋明月照,灯笼映团圆

挂灯笼不仅仅是一种装饰,更是一种情感的寄托。每一盏灯笼都承载着祝福和期盼,它们在风中轻轻摇曳,仿佛在向远方的亲人传递着思念。无论是在城市的高楼大厦之间,还是在乡村的小巷深处,灯笼的光芒都能让人感受到中秋节的浓厚氛围和家的温暖

记录本站的一些优化

之前搭建了个本地搜索,大约1.74M,让网页访问拉慢了,但是没办法,不然搜索不能用。

现在想办法把加载速度从其他地方找补一点回来。

使用图片延迟加载

github地址: hexo-lazyload-image
使用下面指令安装
npm install hexo-lazyload-image --save

配置如下,loadingImg需要注意要添加站点url,否则会出现页面内的post找不到loading图问题

1
2
3
4
5
lazyload:
enable: true
onlypost: false
imageCDN: # eg https://same.cdn.com/
loadingImg: # eg ./images/loading.gif

在这里可免费制作loading图 loading.io

资源压缩

Hexo-minify
Hexo-minify 是一款 Hexo 压缩插件,它可以压缩 HTML、CSS、JS、Font、Image(jpg,png,gif,webp,svg)

网页预加载

InstantClick CDN
当用户的鼠标悬停在一个链接上时,InstantClick 就会开始预加载该链接指向的页面内容。一旦用户点击这个链接,新页面几乎可以瞬间显示出来,因为大部分内容已经被预加载好了。它通过在后台异步加载页面资源,减少了用户等待页面加载的时间。

奇趣周刊 - 第 67 期

奇趣周刊,每周四发布,分享有趣的软件,程序,动态新闻等。 周刊列表 | rss 订阅

2024 年 9 月 6 日,telegra.ph 网站限制一切 api 上传媒体文件。很多绕过 telegraph 的项目上传图片的图床项目,生命因此走到了终结,不过这也在意料之中,白嫖不是长久之计,不过之前已经上传的媒体文件并不会受影响。建议平替到 CloudFlare R2,毕竟是正经的本地存储功能,且背靠互联网大厂信誉很不错,还是值得使用的。

1. Git 客户端

https://ugit.qq.com/

腾讯为数不多的良心软件,自研 Git 客户端,便捷的大文件管理,快速提交,检出子目录,使用很流畅,可以替代 GitHub Desktop。

1725505460403

2. 杂交版植物大战僵尸官网

https://pvzgame.net/

植物大战僵尸杂交版是由 B 站(哔哩哔哩)UP 主潜艇伟伟迷以个人兴趣和创意开发的一款植物大战僵尸同人游戏,完全免费且不涉及商业利益​ ​。这个版本包含了大量新设计的僵尸和植物,以及许多新机制和挑战,玩家可以在不联网的情况下离线进行游戏​。

3. 火烧云分析与记录

https://sunsetbot.top/

国内自然气候爱好者的小众记录网站,主要内容就是火烧云分析与记录。

1725513913681

4. Virtual Try-On Chrome Extension

https://github.com/shyjal/visual-try-on

基于快手 Kolors 图像模型开发,可在任何电商网站上,上传一张自己照片,即可一键让自己试穿喜欢的衣服。

查看插件的演示视频:https://www.youtube.com/watch?v=1LQ2345lANM

1725550106946

5. Logoly —— Pornhub 风格的标志生成器

https://www.logoly.pro

一个简单的在线徽标生成器,适合想要轻松设计徽标的人们,生成类似 PornHub 或 OnlyFans 的徽标,支持下载 PNG/SVG 格式的图片。

1725583704258

6. 文颜 - 多平台写作,一键排版美化。

https://yuzhi.tech/wenyan

「文颜」是一款全自动的文章排版美化工具,专为简化您的内容发布工作而设计。它可以将 Markdown 格式的文章快速转换为适合微信公众号、今日头条、知乎等平台的排版格式,从而省去因平台差异带来的繁琐调整。

1725584932468

7. 动态文档计算器

https://www.inkandswitch.com/potluck/demo/?openDocument=math-pack

可以一边写文档,一边进行计算。

1725607705140

8. 一个可以下载书的网站

https://24hbook.store/

1725635616415


This message is used to verify that this feed (feedId:55064361156653076) belongs to me (userId:54877812003614720). Join me in enjoying the next generation information browser https://follow.is.

This message is used to verify that this feed (feedId:52896630195224576) belongs to me (userId:54877812003614720). Join me in enjoying the next generation information browser https://follow.is.


周刊导航: 上一期(#66) | 下一期(#68)

使用Docker快速部署一个QQ机器人

AI摘要:DeepSeek AI摘要 DeepSeek
本文介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。文章详细介绍了在Windows和Linux系统下的部署步骤,并提供了相应的代码示例。通过绑定Memos账号和转发消息发送到Memos,实现了将QQ机器人的消息转发到Memos的功能。最后,文章提供了一个QQ机器人的账号供读者尝试使用。

简介

介绍如何使用Docker快速部署一个QQ机器人并对接Nonebot实现Memos机器人的功能:

  • 绑定memos账号
  • 转发消息发送到memos

步骤

部署QQ机器人

这里使用的项目是基于QQNT的无头机器人方案,使用webui登录,相对于之前我部署的Go-cqhttp的方案的好处是不会被风控掉线.
稳定性很nice

使用的项目地址
使用的项目文档: https://llonebot.github.io/zh-CN/guide/getting-started

Windows系统

在windows下非常简单,下载QQNT版本的QQ,登录你的QQ机器人账号

https://github.com/super1207/install_llob/releases

下载 exe,双击运行即可,之后打开 QQ 的设置,看到了 LLOneBot 就代表安装成功了。

Linux系统

在linux下 我选择使用 的项目 NapCatQQ
地址 : https://github.com/NapNeko/NapCatQQ

使用Docker部署
docker-compose.yaml内容如下

services:
  napcat:
    environment:
      - ACCOUNT=153985848 #QQ机器人号码
      - WS_ENABLE=true
      - NAPCAT_UID=0
      - NAPCAT_GID=0
    ports:
      - 3001:3001 #上传端口
      - 6099:6099 #webui端口
      - 3000:3000 #http端口 
    restart: always
    image: mlikiowa/napcat-docker:latest
    volumes:
      - "./napcat/app/.config/QQ:/app/.config/QQ"
      - "./napcat/app/napcat/config:/app/napcat/config"
    network_mode: host #使用host的原因是为了方便对接宿主机的nonebot框架

启动

docker-compose up -d

访问 http://ip:6099/webui/login.html

注意 : 登录所使用的 token 在docker-compose.yaml 所在目录下的
/napcat/app/napcat/config中的webui.json
QQ20240912-083331.png

扫码登录

在设置页面中添加反向 WS 地址,地址为 ws://127.0.0.1:8080/onebot/v11/ws, 这里的 8080 是 NoneBot 输出的端口号,/onebot/v11/ws 是 NoneBot onebot 适配器默认的路径
2024-09-12T00:36:18.png

部署nonebot

要求环境​Python 版本 >= 3.9

按照文档操作 https://llonebot.github.io/zh-CN/guide/nonebot2

Memos转发机器人的实现

在nonebot 项目中

新建 bot.py 内容为

import nonebot
from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter

# 初始化 NoneBot
nonebot.init()

# 注册适配器
driver = nonebot.get_driver()
driver.register_adapter(ONEBOT_V11Adapter)

# 在这里加载插件
nonebot.load_builtin_plugins("echo")  # 加载内置插件
nonebot.load_from_toml("pyproject.toml")  # 从 toml 文件加载插件

# 如果有额外的插件目录,可以这样加载
# nonebot.load_plugins("src/plugins")

if __name__ == "__main__":
    nonebot.run()

新建 memos/plugins 文件夹 , 在其下创建 qq_to_memos.py 内容为

from nonebot import on_command, on_message, get_driver
from nonebot.rule import to_me
from nonebot.adapters.onebot.v11 import Bot, Event, Message
from nonebot.params import CommandArg
import json
import os
import httpx
from typing import Dict, Any
import logging

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    filename='memos_bot.log',
    filemode='a'
)
logger = logging.getLogger(__name__)

# 文件路径
JSON_FILE = "users_data.json"

# 读取 JSON 数据
def read_json() -> Dict[str, Any]:
    if os.path.exists(JSON_FILE):
        with open(JSON_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    return {}

# 写入 JSON 数据
def write_json(data: Dict[str, Any]):
    with open(JSON_FILE, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=4)

# 初始化函数
async def init():
    if not os.path.exists(JSON_FILE):
        write_json({})
        logger.info(f"Created new JSON file: {JSON_FILE}")

# 注册命令
start = on_command("start", rule=to_me(), priority=5)

@start.handle()
async def handle_start(bot: Bot, event: Event, args: Message = CommandArg()):
    user_id = event.get_user_id()
    token = args.extract_plain_text().strip()
    if not token:
        await start.finish(" 请提供 Token,格式:/start <token>")
        logger.warning(f"User {user_id} failed to start due to missing token")
        return

    users_data = read_json()
    users_data[user_id] = {"token": token}
    write_json(users_data)

    logger.info(f"User {user_id} started successfully")
    await start.finish(" 绑定成功!现在您可以直接发送消息,我会将其保存到 Memos。")

# 处理所有消息
memo = on_message(priority=5)

@memo.handle()
async def handle_memo(bot: Bot, event: Event):
    user_id = event.get_user_id()
    message = event.get_message()

    users_data = read_json()
    user_info = users_data.get(user_id)

    if not user_info:
        await memo.finish(" 您还未绑定,请先使用 /start <token> 命令绑定。")
        logger.warning(f"Unstarted user {user_id} attempted to send a memo")
        return

    token = user_info["token"]

    text_content = message.extract_plain_text()

    # 如果消息为空,不处理
    if not text_content.strip():
        return

    # 发送到 Memos
    async with httpx.AsyncClient() as client:
        try:
            payload = {
                "content": text_content.strip(),
                "visibility": "PUBLIC"
            }
            response = await client.post(
                "https://memos.ee/api/v1/memos",
                json=payload,
                headers={"Authorization": f"Bearer {token}"}
            )
            response.raise_for_status()
            logger.info(f"Memo sent successfully for user {user_id}")

        except httpx.HTTPStatusError as e:
            logger.error(f"HTTP error occurred for user {user_id}: {e}")
            logger.error(f"Response content: {e.response.text}")
            await memo.finish(f" 发送失败,错误代码:{e.response.status_code},请检查您的 Token 和网络连接。")
            return
        except Exception as e:
            logger.error(f"Unexpected error occurred for user {user_id}: {e}")
            await memo.finish(" 发送过程中发生意外错误,请稍后重试。")
            return

    await memo.finish(" 已成功发送到 Memos!")

# 获取驱动器并注册启动事件
driver = get_driver()
driver.on_startup(init)

logger.info("Memos bot plugin initialized")

API 端点按自己需求更改即可.

在 pyproject.toml 中加入

plugins = []
plugin_dirs = ["memos/plugins"]

运行机器人

nb run

使用机器人

在聊天界面 使用命令

/start token

token 为 Memos 后台获取的对应的token
绑定成功后如下图效果
2024-09-12T00:44:49.png

然后直接发送消息

此时发送消息即可转发到 memos. 且默认为公开的 memos.

如需默认为其他状态 需修改 qq_to_memos.py 中 "visibility" 的 值 .

结尾

如果你想尝试一下此功能可以添加 QQ 机器人

153985848
需添加为好友且 在 https://memos.ee 注册获取 token 便可以使用.

❌