开源Typecho抖音播放器插件
前段时间,开源了一个Bilibili播放器插件,原理也是非常简单。这次看到抖音也可以视频分享,那就也做一个抖音的播放器插件吧。
原理非常简单,使用正则表达式匹配抖音的链接,然后替换成 iframe 播放器就可以了。
使用的时候更简单了,根本不用短代码,直接把视频链接扔进去就可以了,这样一来即便是禁用了插件,也可以正常的跳转到视频地址。
前段时间,开源了一个Bilibili播放器插件,原理也是非常简单。这次看到抖音也可以视频分享,那就也做一个抖音的播放器插件吧。
原理非常简单,使用正则表达式匹配抖音的链接,然后替换成 iframe 播放器就可以了。
使用的时候更简单了,根本不用短代码,直接把视频链接扔进去就可以了,这样一来即便是禁用了插件,也可以正常的跳转到视频地址。
这款制作精良的 typecho 主题页面精简,访问页面速度很快。精美的字体设计易于阅读,可为读者提供最佳的阅读体验。响应式布局,针对手机端进行了优化。
比较简单的一款 typecho 主题,首页,栏目,文章,page 页面,404 页面,喜欢的朋友可以下载试试,
在线预览
主题sidebar.php里面有两处分类mid是写死的,需要自行改成自己的。
我之前曾介绍如何使用 Go 语言自建 DoH 服务并以 ZNS 品牌对外提供服务。 一年多以来确实积累了一些用户。但在使用的时候发现,阿里云香港的轻量服务器在网络 高峰期线路质量太差,有用户提出希望能提供更稳定的线路。于是多数据中心部署 ZNS 便 提上了日程。为了适应异地多活部署,我用 Nginx 重新实现了 DoH 代理服务,并跟现有的 计费体系打通。本文向大家分享相关的经验。本文也亦可作为 Nginx 和 Shell 脚本进阶 学习的参考资料。
本文档详细介绍了JianguoyunWebDAV类的开发背景、功能特性、使用方法、核心实现逻辑及注意事项,旨在帮助开发人员快速集成和使用该类完成坚果云WebDAV的相关操作。
坚果云提供WebDAV接口用于文件和目录的管理,但原生WebDAV操作存在中文编码适配、大文件处理、请求频率限制等问题。该类封装了坚果云WebDAV的核心操作,解决了上述痛点,提供简洁、高效的开发接口。
curl扩展(必须,用于HTTP请求)、mbstring扩展(用于字符编码转换)、fileinfo扩展(用于获取文件MIME类型)。Log类(实现error方法用于日志记录)。| 属性名 | 类型 | 说明 |
|---|---|---|
| $server | string | 坚果云WebDAV服务器地址(如https://dav.jianguoyun.com/dav/) |
| $username | string | 坚果云用户名(注册邮箱) |
| $password | string | 坚果云WebDAV专用密码(需在坚果云后台生成) |
| $chunkSize | int | 流式处理的分块大小(默认10MB,单位:字节) |
| $log | object | 日志实例(需自定义Log类,含error方法) |
| $mkcolDelay | float | MKCOL请求间隔(默认0.5秒,避免坚果云频率限制) |
public function __construct($server, $username, $password, $chunkSize = 10485760, $mkcolDelay = 0.5)参数说明:
$server:坚果云WebDAV服务器地址(必填)。$username:坚果云邮箱(必填)。$password:坚果云WebDAV专用密码(必填)。$chunkSize:流式分块大小,默认10MB(可选)。$mkcolDelay:MKCOL请求间隔,默认0.5秒(可选)。private function filterFileName($name)功能:过滤坚果云禁止的目录/文件名字符,替换为下划线_。
参数:$name(单个目录名/文件名,如test.txt、测试目录)。
返回值:过滤后的名称字符串。
禁止字符列表:/、\、:、*、?、"、<、>、|、\0。
private function encodePath($path)功能:分割路径为多个部分,分别过滤非法字符、转换为UTF-8、URL编码后拼接。
参数:$path(远程相对路径,如xmblog/测试/文件.txt)。
返回值:URL编码后的路径字符串。
private function decodePath($path)功能:先URL解码,再转换为UTF-8编码,还原中文路径。
参数:$path(URL编码后的路径)。
返回值:解码后的UTF-8路径字符串。
private function toUtf8($str)功能:检测字符串编码(支持UTF-8、GBK、GB2312、ISO-8859-1),转换为UTF-8。
参数:$str(原始字符串)。
返回值:UTF-8编码的字符串。
private function request($method, $path, $inFile = null, $fileSize = 0, $headers = [])功能:封装curl请求,支持各类WebDAV HTTP方法,适配流式上传。
参数:
$method:HTTP方法(GET/PUT/DELETE/PROPFIND/MKCOL等)。$path:文件/目录相对路径(可含中文)。$inFile:上传的文件句柄(PUT流式上传时使用)。$fileSize:文件大小(PUT流式上传时使用)。$headers:自定义请求头(数组)。status(状态码)、headers(响应头)、body(响应体)。CURLOPT_UPLOAD、CURLOPT_INFILE等实现流式上传。public function createRemoteDir($remoteDir)功能:递归创建远程多级目录,添加MKCOL请求间隔避免频率限制,支持中文路径。
参数:$remoteDir(远程目录路径,如xmblog/测试/子目录/)。
返回值:布尔值,true表示创建成功,false表示失败。
实现逻辑:
usleep),处理201(创建成功)和405(已存在)状态码。public function listFiles($path = '')功能:发送PROPFIND请求,获取目录下的文件/目录列表及属性(名称、大小、修改时间、类型)。
参数:$path(远程目录路径,默认根目录)。
返回值:数组,每个元素包含name(名称)、path(路径)、size(大小)、mtime(修改时间戳)、is_dir(是否为目录)。
实现逻辑:
public function uploadFile($localFile, $remotePath)功能:流式上传本地文件到坚果云,自动创建远程目录,支持中文路径和大文件。
参数:
$localFile:本地文件路径(可含中文)。$remotePath:远程文件路径(包含文件名,可含中文)。true表示上传成功,false表示失败。createRemoteDir创建目录。public function downloadFile($remotePath, $localFile)功能:流式下载坚果云文件到本地,支持中文路径,自动创建本地目录。
参数:
$remotePath:远程文件路径(包含文件名,可含中文)。$localFile:本地文件路径(可含中文)。true表示下载成功,false表示失败。CURLOPT_FILE将响应体流式写入本地文件。public function deleteFile($remotePath)功能:删除坚果云的文件或目录,支持中文路径。
参数:$remotePath(远程文件/目录路径,可含中文)。
返回值:布尔值,true表示删除成功,false表示失败。
实现逻辑:
// 自定义Log类(需实现error方法)
class Log {
public function error($message) {
// 示例:写入日志文件
file_put_contents('jianguoyun_webdav.log', date('Y-m-d H:i:s') . ' - ' . $message . PHP_EOL, FILE_APPEND);
}
}
// 坚果云WebDAV配置
$server = 'https://dav.jianguoyun.com/dav/';
$username = 'your_email@example.com'; // 坚果云邮箱
$password = 'your_webdav_password'; // 坚果云WebDAV专用密码
// 初始化类
$jianguoyun = new JianguoyunWebDAV($server, $username, $password);// 创建多级目录
$remoteDir = 'xmblog/测试目录/子目录/';
$createResult = $jianguoyun->createRemoteDir($remoteDir);
if ($createResult) {
echo '目录创建成功';
} else {
echo '目录创建失败';
}// 本地文件路径
$localFile = './本地文件/测试文件.txt';
// 远程文件路径
$remoteFile = 'xmblog/测试目录/测试文件.txt';
// 上传文件
$uploadResult = $jianguoyun->uploadFile($localFile, $remoteFile);
if ($uploadResult) {
echo '文件上传成功';
} else {
echo '文件上传失败';
}// 远程文件路径
$remoteFile = 'xmblog/测试目录/测试文件.txt';
// 本地保存路径
$localFile = './下载文件/测试文件_下载.txt';
// 下载文件
$downloadResult = $jianguoyun->downloadFile($remoteFile, $localFile);
if ($downloadResult) {
echo '文件下载成功';
} else {
echo '文件下载失败';
}// 获取目录下的文件列表
$fileList = $jianguoyun->listFiles('xmblog/测试目录/');
print_r($fileList);// 删除文件
$remoteFile = 'xmblog/测试目录/测试文件.txt';
$deleteResult = $jianguoyun->deleteFile($remoteFile);
if ($deleteResult) {
echo '文件删除成功';
} else {
echo '文件删除失败';
}
// 删除目录
$remoteDir = 'xmblog/测试目录/';
$deleteDirResult = $jianguoyun->deleteFile($remoteDir);
if ($deleteDirResult) {
echo '目录删除成功';
} else {
echo '目录删除失败';
}CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST的关闭配置,开启SSL验证,避免安全风险。toUtf8方法自动处理,无需额外转换。mkcolDelay参数。Log类的error方法记录日志,需自行实现该类(如写入文件、数据库等),否则会抛出实例化错误。常见状态码说明:
这篇文章介绍了作者因之前服务器常崩溃死机而进行升级,在项目迁移时装宝塔插件时提示报错。经查看报错信息,发现是找不到 /etc/redhat - release 文件。因作者使用Ubuntu24系统,通过创建一个假的该文件,成功解决插件安装问题 。

早上五点,我听见娃在我耳边喊爸爸、爸爸,我问他怎么了?他小声说:“爸爸,我尿床了,裤子、被子下面全湿了”。我立刻起床,给他拿了湿毛巾和内衣内裤来更换。
如果我没记错的话,这是他出生以来为数不多的一次尿床,他从小就很少尿床。隔壁邻居说他家小孩三天两头尿床,洗都洗不过来。他应该是怕被我批评,所以委屈地小声跟我说尿床的事,我知道要是一大早批评他,他这一天都不会有好心情。所以我尽量安慰他:“没事的,爸爸小时候也尿床呢,你是不是梦到找厕所啦?” 他说是的,梦到自己已经到了厕所,所以就尿了,然后惊醒过来发现是在床上。
等我给他换好内衣内裤,又给他换了个床让他继续睡,我把被褥全都丢进洗衣机里清洗。结果他还没睡一个小时,又跟我说肚子饿了,我只好下楼给他煮鸡蛋、冲牛奶。下楼前我给他穿好衣服,让他自己去洗漱。他下楼的时候,距离校车来还有四十分钟,我让他把这几天学的生字默写一遍,好几个字他都忘了,我让他翻书再记一记;昨天老师说今天上课要抽背的课文,我也让他背诵了一遍给我听。不得不说这小子比我读书那会儿聪明多了,我像他这么大的时候,还在到处玩泥巴呢。
![]()
家里的那只绿色小鹦鹉,这大半年来一直独住,每个来家里的朋友、顾客都说,只养一只会不会太孤单。这不,前几天我在网上又买了一只,按照网上的说法,先把它们分开喂养,等彼此熟悉之后再合笼 —— 一来是避免新来的鹦鹉携带疾病,二来鹦鹉有领地意识,新来的会被老鹦鹉啄。我等了三四天才给它们合笼,现在它们还是会偶尔互啄,但看起来应该没什么大问题。
那只养了很久的绿色鹦鹉似乎不太乖,总把食盒里的谷物挑出来丢掉,好像在抗议不喜欢吃这个,但它从小吃的就是这款谷物。新来的鹦鹉倒是一点都不挑食,给什么吃什么。我也不知道它们的公母,养它们就是主打一个陪伴。
![]()
前些天,我收到了 “我是军爸” 寄来的明信片。其实在邮寄途中,我一度担心会丢失,和我同步申请这张明信片的 “李的日志”,我们是同一天收到寄出通知的,可他比我早好几天就收到了。又过了两天,我妈突然打来视频,说收到了一张寄给我的明信片,还说等吃完饭就给我送过来。我通过摄像头,看着家里好几个人凑在一起,逐一传递着阅读明信片上的内容,忍不住笑了出来。后来才知道,明明写的是我的地址,却投递到了我爸妈那里,原来是邮递员和我爸妈熟络,而且我爸妈住的地方离邮政网点更近,他便顺手把明信片放在了我爸妈那边,也算是个小小的意外。
“军爸你好,收到你的明信片很惊喜,也特别感动,没想到素未谋面的你会这么用心地写下这些话。生活里的点滴本就是值得记录的小事,能被你看见和喜欢,我也觉得特别温暖。谢谢你的祝福,这份心意我好好收下了。同样祝你事事顺遂,所愿皆所得,日子过得温暖又有趣! —— 全局变量”
![]()
前些天下午,还突然收到了许久没联系的一位重庆女孩发来的信息。她告诉我,给我寄了些重庆本地特产,都是她亲自尝过觉得味道超棒的,所以想着分享给我。我赶忙问她何必这么破费,她却说,过去那段难熬的日子,多亏了我的开导和帮助,现在她已经在重庆顺利上班,能做自己喜欢的事、吃爱吃的东西、买喜欢的衣服,整个人可以说是脱胎换骨了,寄点吃的根本不算什么。我回复她,过去确实经历了不少苦,现在好好过好当下的生活就好,发了工资多犒劳自己,也记得常给父母打打电话。看着她如今的状态,真心为她高兴,她算是真正完成了一场漂亮的蜕变。
如要阅读全文,点击标题跳转。 | blaze | browserless | eino | RClick | Cent | shell360 | dufs-material-assets | Keyden

yt-dlp 是一个功能强大的命令行工具,用于从各种网站下载视频、音频和其他媒体内容。它支持的站点非常广泛,涵盖了全球范围内的主流媒体平台、社交媒体平台、新闻网站、教育平台等。
![]()
| 文件 | 描述 |
|---|---|
| yt-dlp | 平台无关的zipimport二进制文件。需要 Python(推荐用于Linux/BSD)。 |
| yt-dlp.exe | Windows(Win8+)独立 x64 二进制文件(推荐用于Windows) |
| yt-dlp_macos | 通用 macOS (10.15+) 独立可执行文件(推荐用于macOS) |
yt-dlp [OPTIONS] [--] URL [URL...]-f:指定下载的视频格式。-o:指定输出文件名模板。-P:指定下载路径。-x:提取音频。--embed-thumbnail:将缩略图嵌入视频文件。--write-info-json:将视频元数据写入 .info.json 文件。.netrc 文件进行身份验证。--config-locations 指定。yt-dlp.conf。~/.config/yt-dlp/yt-dlp.conf 或 ~/.yt-dlp.conf。/etc/yt-dlp/yt-dlp.conf。-x、--embed-thumbnail 等。%(字段)s 格式,支持多种字段,如 title、id、ext 等。%(upload_date>%Y-%m-%d)s。%(field|默认值)s。--parse-metadata 和 --replace-in-metadata。-f 指定格式,如 bv*+ba/b。-S 选项。mp4、webm 等。-x 选项提取音频。--embed-metadata 嵌入元数据到视频文件。--remux-video。--compat-options 选项,用于恢复与 youtube-dl 相同的行为。很抱歉,我无法直接访问网页链接。不过,根据您提供的文件内容,我可以为您整理一份关于 yt-dlp 支持的站点的详尽笔记。
以下是根据功能和类型对支持的站点进行的分类整理:
woccc我想通了为什么之前明明什么也没做,但是空间会被占用到98%了,docker容器的日志一直在增长!一年半达到了4G!呜呜要是当初知道原因就不用搬家了qaq
本来计划下周圣诞节去哈尔滨冰雪大世界过,但是想了想哈尔滨没啥吃的没啥玩的,就是市内转一圈,雪景什么的感觉都差不多,又看不到大雪封门那种,滑雪的话大连也有,而且路途遥远,就pass了
最近妞妞生病了,我妈非要喂她吃饺子,结果这下好了,好几天不吃不喝,还总吐。找了半天才找到一家看异宠的医院,打了两天针有点好转,但是还得观察,要是吃东西了就好了
马上就要过新年了,今年还要去天津街过跨年晚会,去年去看唱歌真的不错!唱的还好qaq,而且博客也要写一篇年终总结了,可恶啊,又是没有干劲的一年,明年一定要有干劲。博客写日记感觉有点不靠谱,要是像这样每天这个简单的日历总结也好,得好好想想
![]()
由 copilot.microsoft.com 生成
本文将介绍使用 Caddy 和 acme.sh 配置 Let's Encrypt 为 IP 地址签发 SSL 证书
国内大概率个人是用不了的,即使现在没限制。如果你的 IP 已经备案了,那另说。
正常没啥需要,如果 1.2.4.8 在我手上那就好了。
最新版本 2.10 版本是支持的,貌似只支持 ipv4, ipv6 没签发成功
1.2.4.8 {
tls {
issuer acme {
profile shortlived
}
}
respond {remote_host}
}
可以使用我提供的镜像
ghcr.io/ysicing/caddy2:latest
ysicing/caddy2
# 国内
ccr.ccs.tencentyun.com/k7scn/caddy2
如果遇到证书已经生成,但是访问还有有问题,需要在全局配置里添加一下
{
debug
# admin off
default_sni 1.2.4.8
}
使用 acme.sh 需要满足几个条件, 因为 IP 证书目前只支持通过 http-01 和 tls-alpn-01 方式进行验证
acme.sh --issue -d <ip地址1> -d <ip地址2> -w <默认网站根目录> --server letsencrypt --certificate-profile shortlived --days 5
Let's Encrypt 的 IP 证书有效期只有 160 小时(差不多 6.5 天),同时 acme.sh 需要更短的时间来进行检查更新证书,所以可以设置 --days 5 参数,让它 5 天检查并更新一次,你也可以设置 3 或 4。
![]()
ip 证书
realtek_rtl9210_fw1.34.39)下载。海康威视专用版本软件包内量产工具所带固件为2021年版本,如需使用新版固件请自行替换。CKjfrg36一款自适应作品 Typecho 主题,简约是其最大的特点。设计精美,非常适合用来搭建图片分享、摄影作品展示等图片相关的博客网站,更重要的这是款免费主题。支持目录。来源于:www.spinyue.com/659/(失效)
在线预览
default-ultra 主题的定制插件,也支持第三方主题使用适配。
需要:
1.提前导入 jQuery。
2.自行找位置提供放映按钮,比如在网页右下角添加悬浮按钮、文章内容区添加悬浮按钮等。
3.将放映按钮的 id 属性设置为 enterPlayback(固定值)。
4.文章内容的容器(即需要放映的原始内容容器),class 属性中需要添加 post-content。
5.样式可自行优化,如有样式冲突需要覆盖样式请使用 !important。
开源地址:https://github.com/visduo/typecho-playback-plugin
终于 Let’s Encrypt 正式支持为 IP 地址签发免费 SSL 证书了🎉今天以 acme.sh 为 例跟大家分享如何自动申请 IP 地址证书。
CKjf昨天中午下班班路上,冻得要死,在路边草堆里看见一只小奶猫,缩成一团发抖。
真的太小了,感觉我一巴掌就能盖住。这么冷的天,不捡回去肯定活不过今晚。正好有个朋友一直说想再养只猫,我就赶紧给她打电话。
![]()
朋友爽快讲在哪裡马上就驱车过来了。
我们带着猫就去医院了,心想就是简单检查一下,然后就能送朋友家享福去了。
结果检查报告出来,我人都傻了。
医生指着单子说:“猫瘟,有。杯状病毒,有。猫鼻支,也有。”
我朋友在旁边直接懵了:“这……buff叠满了啊?”
医生很直接:“这么小的猫,三种病一起得,活下来的几率不高。而且治疗不便宜,你们想清楚。”
我和朋友对视一眼。
“治吧。”
“治!”
当医生说出“一天500,最少7天”时,我和朋友在诊室里沉默地对视了一眼。
3500元——对我们来说不是小数目。而且医生说,即使花了这笔钱,也不能保证一定能活。
我们俩隔着手机屏幕,一头扎进了各种宠物论坛、经验贴。猫瘟居家治疗的关键词搜了一遍又一遍:干扰素、升白针、止吐药、消炎药、营养支持……
老婆用大号猫笼做了隔离病房。老婆翻出了以前用的暖水袋,灌上温水,用旧毛巾仔细包好,放在笼子一角。怕温度不够,又在旁边贴了两个暖宝宝。
“它太小了,保温最重要。”她说。
朋友每天下班就带着药过来,她俩像交接班的护士一样仔细核对:今天要打什么针,喂什么药,体温多少,大便如何。
希望她能够挺过来呀!!!
![]()
由 copilot.microsoft.com 生成
本文将介绍使用 Caddy 和 acme.sh 配置 Let's Encrypt 为 IP 地址签发 SSL 证书
国内大概率个人是用不了的,即使现在没限制。如果你的 IP 已经备案了,那另说。
正常没啥需要,如果 1.2.4.8 在我手上那就好了。
最新版本 2.10 版本是支持的,貌似只支持 ipv4, ipv6 没签发成功
1.2.4.8 {
tls {
issuer acme {
profile shortlived
}
}
respond {remote_host}
}
可以使用我提供的镜像
ghcr.io/ysicing/caddy2:latest
ysicing/caddy2
# 国内
ccr.ccs.tencentyun.com/k7scn/caddy2
使用 acme.sh 需要满足几个条件, 因为 IP 证书目前只支持通过 http-01 和 tls-alpn-01 方式进行验证
acme.sh --issue -d <ip地址1> -d <ip地址2> -w <默认网站根目录> --server letsencrypt --certificate-profile shortlived --days 5
Let's Encrypt 的 IP 证书有效期只有 160 小时(差不多 6.5 天),同时 acme.sh 需要更短的时间来进行检查更新证书,所以可以设置 --days 5 参数,让它 5 天检查并更新一次,你也可以设置 3 或 4。
![]()
ip 证书
老部落团队练手开发的第三款主题,极简蓝白色双栏Typecho博客主题。在第二款基础上微调布局和样式,适合我们常见的博客需求。
在线预览