让你的网站对接高级的Umami统计!

正式开始 本教程针对于Umami Cloud的上手使用,如果你需要自托管Umami请自行寻找相关文档 进入 https://umami.is/ (如果进不去请检查是否有广告拦截器拦截了Umami!!!) 点击右上角的 Sign UP 注册账号 按需填写相关信息进行注册 然后检查你的邮箱,是否收到了Umami的邮箱验证消息 点击 Login 进行登录,填入验证码 区域选择任意(选美国你的统计数据就记录在美国的服务器,选欧盟你的统计数据就记录在欧盟的服务器) 用户配置随便填写即可 继续填写你要统计的网站 将跟踪代码插入到你的网站的 <head>Umami跟踪代码</head> 中 然后我们就进入Umami控制台了 点击 View 就能看到你的网站统计啦 注:右上角可以改为中文 建议打开设置启用分享URL,这样你的用户就可以实时看到你的站点流量啦 注意事项 Umami Cloud对于免费用户限制3个站点 免费版月事件数为10w,本人博客感觉不够用,已经自建了,教程可以看我b站,没有就是没发 来拷打我

2025年7月5日 · 1 分钟 · 32 字

分享一个IPFS图片API

正式开始 该API为xLog 的图床API POST https://ipfs-relay.crossbell.io/upload 头无鉴权 body使用 from-data ,key为 file vlaue选择一个图片文件,不宜太大,会报错 示例Curl curl --location 'https://ipfs-relay.crossbell.io/upload' \ --form 'file=@"/C:/Users/AcoFork/Pictures/b_53bb4f7fa91d684e72b666504e3fcc1897.webp"' 会返回 { "status": "ok", "cid": "QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc", "url": "ipfs://QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc", "web2url": "https://ipfs.crossbell.io/ipfs/QmVHG3KdGs3M8otdqjZEei6AzWt1usWRP6UmfLMbEub5nc", "fileSize": "77199", "gnfd_id": null, "gnfd_txn": null } 其中, web2url 就是可以直接访问的URL,无CORS限制

2025年7月3日 · 1 分钟 · 38 字

测评一下SecBit MCDN HK区域的质量

官网 https://secbit.ai 测试节点信息 安徽合肥移动家宽(本人电脑) PostMan GET测试 测试Cloudflare R2默认的404页面HTML需要多长时间可以接收到 直连Cloudflare R2 Secbit回源Cloudflare R2 ITDog Tcping测试 直连Cloudflare R2 Secbit回源Cloudflare R2 ITDog 网站测速 直连Cloudflare R2 Secbit回源Cloudflare R2 大文件下载 直连Cloudflare R2 Secbit回源Cloudflare R2 总结 Secbit相较于Cloudflare对于大陆直连更为友好,延迟更低、带宽更大。唯一的缺点就是直接买很贵,也建议大家可以多多写博客,网站月ip达到3k可以看置顶文章加群联系我帮你申请,争取早日拿到属于你们的Secbit😋

2025年7月1日 · 1 分钟 · 31 字

meme-generator部署指南以及对接Koishi

正式开始 视频教程: https://www.bilibili.com/video/BV1i53PzUEzE/ 后端部署 Github: https://github.com/MemeCrafters/meme-generator 安装依赖 pip install -U "meme_generator<0.2.0" 克隆仓库 git clone https://github.com/MemeCrafters/meme-generator 克隆额外表情仓库 git clone https://github.com/MemeCrafters/meme-generator-contrib git clone https://github.com/anyliew/meme_emoji 前往 ~/.config/meme_generator/config.toml 填入配置文件。并且填入刚刚克隆的额外表情仓库: meme_dirs [meme] load_builtin_memes = true # 是否加载内置表情包 meme_dirs = ["/root/meme-api/meme-generator-contrib/memes", "/root/meme-api/meme_emoji/emoji"] # 加载其他位置的表情包,填写文件夹路径 meme_disabled_list = [] # 禁用的表情包列表,填写表情的 `key` [resource] # 下载内置表情包图片时的资源链接,下载时选择最快的站点 resource_urls = [ "https://raw.githubusercontent.com/MemeCrafters/meme-generator/", "https://mirror.ghproxy.com/https://raw.githubusercontent.com/MemeCrafters/meme-generator/", "https://cdn.jsdelivr.net/gh/MemeCrafters/meme-generator@", "https://fastly.jsdelivr.net/gh/MemeCrafters/meme-generator@", "https://raw.gitmirror.com/MemeCrafters/meme-generator/", ] [gif] gif_max_size = 10.0 # 限制生成的 gif 文件大小,单位为 Mb gif_max_frames = 100 # 限制生成的 gif 文件帧数 [translate] baidu_trans_appid = "" # 百度翻译api相关,表情包 `dianzhongdian` 需要使用 baidu_trans_apikey = "" # 可在 百度翻译开放平台 (http://api.fanyi.baidu.com) 申请 [server] host = "127.0.0.1" # web server 监听地址 port = 2233 # web server 端口 [log] log_level = "INFO" # 日志等级 运行 ...

2025年6月29日 · 1 分钟 · 184 字

EdgeOne + Cloudflare,我们天下无敌!

引言 主播也是搞到了EdgeOne免费版激活码了,终于可以大展宏图了😋 我怎么换到EdgeOne免费版? 前往 腾讯云EdgeOne免费计划兑换码 - 立即体验 推荐直接发推,按照要求发 发完后私信EO官方即可 默认EdgeOne给的Anycast CNAME过于垃圾? 默认在EO添加域名EO会发给你一个类似 afo.im.eo.dnse4.com 这样的CNAME 也就是 你的域名.eo.dnse4.com emm 这玩意吧 你们自己看速度吧 我推荐大家使用 43.174.150.150 。是一个中国香港的三网优化IP。速度如下。本人EdgeOne优选: eo.072103.xyz 换了CNAME后无法自动申请免费SSL? 如果你将你的域名托管给EO并且没有用EO给你的CNAME,则这个选项不可用 我推荐采用1panel、宝塔、acme.sh手动申请泛域名证书然后上传到腾讯云SSL控制台,就像这样 EdgeOne怎么做重定向? 在这里 EO边缘函数也支持重定向,支持更细化的重定向规则 但是这玩意记录请求数,不如用Cloudflare的重定向规则 首先我们在CF写这样一个规则 然后让EO回源到CF边缘节点。最简单就是随便填个IP然后套CDN 接着配置EO回源,这里一定要使用加速域名作为回源Host头 原理:用户 - EO - CF - CF识别到Host匹配重定向规则 - 301 EdgeOne反代一切? 大部分情况将 回源HOST头 改为源站就能解决反代后网站无法访问的问题

2025年6月26日 · 1 分钟 · 46 字

关于我折腾了一晚上 EdgeOne

这是个啥? 在我的早期文章 中提过EdgeOne,当时它还仅有Page业务,而且IP是很垃圾的新加坡,并且还会吞提交。故我当时给出了不如Cloudflare Page的评价 不过这玩意最近出了CDN业务,并且还是免费。所以我又重拾起来了 我要怎么用上? 浏览器访问: https://edgeone.ai 注册账号 或者看视频: https://www.bilibili.com/video/BV1KmNUzVEEL 关于EdgeOne CDN - 网站安全加速 以下言论仅适用于未备案用户 需要搞免费版兑换码。或者直接买个人版后可用,需要外币卡。 通过创建 加速区域全球可用区(不含中国大陆) 。会分配给你一个类似 eo3-blog.afo.im.eo.dnse4.com 这样的CNAME地址要求你做CNAME解析。IP很烂。可以直接做优选。 获取方式很简单,直接ITDOG PING edgeone.ai 找个最快的IP直接写A解析(貌似国内的也可以🤔),如图。本人EdgeOne优选: eo.072103.xyz 因为这玩意是一个CDN,需要一个源站。如果你是静态站点可以用Cloudflare Page部署一个站,然后设置回源如下(注意回源Hosts头要填写源站域名,否则CF可能会报423 Locked 他妈的比腾讯云的418我是个茶壶规范多了😅) 最后开启SSL,结束,享受它吧 关于EdgeOne Pages(新) 不用花钱,注册账号后即可用 不管你的加速区域在哪,都建议绑定自己的域名,否则可能出现访问401。含中国大陆的区域需要域名备案 以下言论仅适用于未备案用户 通过创建 加速区域全球可用区(不含中国大陆) 。IP现在从新加坡Anycast改为了俩IP(如果按国内可用来算)43.175.44.57(中国香港。非移动延迟250ms+,移动延迟100ms-), 43.132.85.153(日本东京。三网200ms左右)。比起之前的新加坡平均300ms的神奇IP好了很多 EdgeOne Pages无法优选。如果将EdgeOne Pages托管的域名指向非 edgeone.app 解析出的IP。会报418(比如EdgeOne CDN节点IP) 默认时延情况,如图 以下言论仅适用于备案用户 默认延迟50ms以下(中国大陆) 优选不能将IP指向EdgeOne CDN节点的IP,否则报418。

2025年6月21日 · 1 分钟 · 52 字

静态博客也想展示文章浏览量?当然可以!

引言 如果你用过WordPress,Halo等动态博客框架,你大概会在用户视角访问博文的时候看到浏览量这个信息。 这个原理很简单,因为动态博客依赖于一个VPS,只需要让用户每次访问的时候给浏览量+1即可。 那么如果我们是静态博客呢? 我们可以依赖一些第三方服务,比如Umami Cloud 。在你的静态博客的head注入一个js,这样你就可以看到你的站点分析了,类似下图 现在我们确实可以看到每个文章(即/posts/xxx)的访问量了,但是我们要如何展示给用户呢? 逆向Umami的只读页面!(新版v3) 感谢nightNya提供的方案,你是天才! 首先我们启用分享URL 注意这里的 7PoDRgCzHFTs2vWB ,每个站点都不一样 接着我们请求 https://cloud.umami.is/analytics/us/api/share/7PoDRgCzHFTs2vWB,得到 注意,这里的 us 为你创建的账号区域,美国为us,欧盟为eu { "websiteId": "a66a5fd4-98b0-4108-8606-cb7094f380ac", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3ZWJzaXRlSWQiOiJhNjZhNWZkNC05OGIwLTQxMDgtODYwNi1jYjcwOTRmMzgwYWMiLCJpYXQiOjE3NTA4MDIwMzB9.X5GQT5kslh6r25sFlap4Asz1NDA7mN3kcZW8wqbrnBc" } 再接着我们请求,携带请求头 x-umami-share-token 值为上一步获得的Token https://cloud.umami.is/analytics/us/api/websites/a66a5fd4-98b0-4108-8606-cb7094f380ac/stats?startAt=0&endAt=1750805999999&unit=hour&timezone=Asia/Hong_Kong&path=eq./posts/cf-fastip/&compare=false 这里解释几个关键Params,其他的照搬 startAt:统计开始时间。Unix时间戳,我们填写为0让Umami从1970年开始统计 endAt:统计结束时间。Unix时间戳,我们可以使用 Date.now() ,即当前时间,和startAt参数联动即可实现统计总浏览量 path:要查询的路径,填写为你的文章页去除了Host的路径,如 /posts/hello 。注意!Umami会将 /posts/hello 和 /posts/hello/ 视为两个不同的路径,请注意你的博客框架是否使用 /。在v3版本中,需要使用 eq. 前缀来进行精确匹配,例如 path=eq./posts/hello/ 你会得到 { "pageviews": 1655, "visitors": 343, "visits": 411, "bounces": 183, "totaltime": 30592, "comparison": { "pageviews": 0, "visitors": 0, "visits": 0, "bounces": 0, "totaltime": 0 } } pageviews 即浏览量。 visitors 即访问人数。 Tips:浏览量记录为任意用户只要访问了则计数一次。而访问数记录不会记录单IP多次重复访问和同一时间段的多次请求不同页面 Enjoy it! ...

2025年6月17日 · 1 分钟 · 79 字

AI写不出优质的代码?其实是你引导错了!

视频链接: https://www.bilibili.com/video/BV1jw38z9EEn/ 正确的引导方法 先搞清楚你自己具体的需求。比如代码用什么语言编写?用什么技术栈?要具体实现什么功能?应用的场景是什么?是前端、后端还是全栈等等 逻辑清晰,简洁干练地表述你的需求。 比如: 编写一个Python脚本,在代码中硬编码S3_Endpoint、S3_Area、S3_key、S3_Secret、S3_Url(暂时全部留空)。运行后监听Ctrl+Alt+A,一旦被按下,立即检查剪贴板内是否有图片(支持文件格式和纯图格式),将其转换为Webp格式并上传到S3 API的S3_Url路径下,最后模拟键入![](图片链接) 如果不确定AI是否理解了你的需求,可以CallBack一下,避免AI假装理解了你的需求然后一通乱写,比如上面的表述可以改为: 编写一个Python脚本,在代码中硬编码S3_Endpoint、S3_Area、S3_key、S3_Secret、S3_Url(暂时全部留空)。运行后监听Ctrl+Alt+A,一旦被按下,立即检查剪贴板内是否有图片(支持文件格式和纯图格式),将其转换为Webp格式并上传到S3 API的S3_Url路径下,最后模拟键入![](图片链接)。你明白了吗,请告诉我你将要如何完成这个任务,在我批准前请不要编写代码 有时候表达模糊实际上是好事。 因为你一旦开始描述创建一个什么什么变量,赋值为多少多少的时候,实际上你不是在用AI写代码,而是让AI将你的自然语言代码转换为编程语言代码,这就不是一个创造式的需求,而是一个翻译类的需求,最终代码生成质量的好坏完全取决于你的技术知识储备和逻辑思维是否强大。 所以,在面对大部分的需求,我们可以先大致描述一个框架,确认AI的方向正确后慢慢编写项目 AI也会犯错,并且极其容易瞎猜。不要尽信AI给出的内容,在涉及到你不懂的知识时,我们可以翻阅维基百科 等权威知识网来验证 不要让AI一直自我检查。现代的AI IDE中,大部分已经实现了Agent模式,也就是: 用户提出需求 -> AI分析并实现需求 -> AI自动Debug -> 最终交付用户项目。 但是在我半年的AI IDE使用经验中,如果代码出现Bug,请不要说类似: 这个代码跑不了,帮我看看 这样的话,我仍然建议你将完整的报错信息复制粘贴给AI并且要求他分析并解决,例如: [报错信息]它报错了,请根据报错信息深度分析一下问题导致的原因,并给我一个解决方案,而不是让AI自身Debug。 因为有时候程序的报错可能只是一个简单的环境变量没配置,或者是你没有使用一个主流的方案,单纯让AI自我检讨只会让AI选择它最认为出错的地方。 换位思考一下,你有个甲方一直告诉你这个方案不行但是就不告诉你哪里不行你头不头疼。但是AI毕竟不是人类,它只会在它认为正确的道路上越走越远,运气好迭代几次Bug解决了,运气不好到达了IDE设置的迭代次数限制然后给你又新写了一坨新史山,然后你花钱买的请求数也就这样浪费了 最后,请善用AI,你也可以询问AI: 你的最佳调用方式是什么。当然,她也有可能欺骗你。 AI推荐 ChatGPT :快速,不限额。适合解决你的疑问 Claude :相比于GPT更强大,更擅长编写代码,尤其是前端,目前大部分AI IDE都接入了Claude 3.5 Sonnet及以上的模型,非常适合编写可拆解,易维护的小脚本 VS Code(Github Copilot) :AI IDE。由微软开发,免费用户可以使用Claude 3.5 Sonnet模型,但是份额较少。Pro计划10USD/m,仅支持Paypal和海外卡支付 Cursor :AI IDE。由Anysphere开发,免费用户仅能使用Auto模型(一般不会分配到Claude模型)。Pro计划10USD/m,仅支持Paypal和海外卡支付 Trae(国际版) :AI IDE。由字节跳动开发,需要国外IP。新用户Pro计划开通首月仅需3USD/m(之后为10USD/m),支持支付宝和海外卡支付。本人目前在用 写任何项目都完全不推荐使用网页版的任何大模型编写!请使用AI IDE!

2025年6月16日 · 1 分钟 · 57 字

NAT1开放内网网站

配套视频 原理 正式开始 创建必要的Cloudflare API令牌 创建拥有如下图权限的令牌,使得Lucky可以使用此令牌设置DDNS、签发SSL、更新Cloudflare动态重定向 创建基底Cloudflare动态重定向规则 如图填写,替换为你的域名 表达式: wildcard_replace(http.request.full_uri, "*://*.072103.xyz/*", "https://${2}.stun.072103.xyz:6666/${3}") 观察网址,记录下如下图的数据 打开开发者工具后,再保存,确保抓到这样的包,保存备用 将 dash.cloudflare.com/api 改为 api.cloudflare.com/client 。将刚才获得的红框内的内容填写到 rules 后面 如果你不是第一次更新,可能会带有一个 "position":{"index":1}, 删除它,否则后面的WebHook将会出错。 将我们硬编码的 6666 端口改为Lucky STUN的变量 #{port} 最终我们记录了以下信息 https://api.cloudflare.com/client/v4/zones/f305febd3a25b5bb3a46b802328a75a8/rulesets/35218f125f7f4421b4c76314464689a2/rules/17228a4add70429c9cdd38eb7fec1d02 {"description":"stun","expression":"(http.host wildcard \"*.072103.xyz\" and not http.host in {\"pic.072103.xyz\" \"hpic.072103.xyz\"})","action":"redirect","action_parameters":{"from_value":{"status_code":301,"preserve_query_string":true,"target_url":{"expression":"wildcard_replace(http.request.full_uri, \"*://*.072103.xyz/*\", \"https://${2}.stun.072103.xyz:#{port}/${3}\")"}}},"enabled":true} 让Cloudflare接管 *.072103.xyz 的流量 配置Lucky DDNS 配置Lucky SSL/TLS证书 配置Lucky Web服务 配置Lucky STUN 注:我这里使用了路由器的端口转发,将Lucky的16666(Web服务)端口转发到了路由器的17777端口。如果你不会端口转发,请不要启用 不使用Lucky内置端口转发 并且目标端口填写16666 配置WebHook 如图配置 接口地址:你之前记录的 https://api.cloudflare.com/... 请求方法: PATCH 或者 POST ...

2025年5月30日 · 1 分钟 · 73 字

关于Whois查询那点事

前言 Whois查询是什么? 如果了解域名,就知道域名一旦被注册就会在Whois服务器留下一些相关信息(比如:注册方,注册地,注册时间等等),可以被公开查询。 如何快速查询一个域名的Whois? 你是否用过某些Whois查询网站?如图为IP.SB的WHOIS查询服务,可以通过 WHOIS - IP.SB 快速查询一个域名的Whois 正片 那么如果我们想自建一个Whois查询服务放到我们的Bot或者网页上,我们要怎么做呢? 你也许已经知道在Linux系统上专门有一个包就叫做 whois 我们可以方便用它来查询Whois。我们现在就可以试试 可以看到,成功查询到了 baidu.com 的Whois信息。但是实际上这个命令的输出有这么长 但是实际上,只有红色框内的信息对我们有效,其他的信息则是一些公告,警示,许可之类的无用信息 这对于偶尔查询一次然后用人眼筛选有效信息的现代人类不难,但是对现代计算机来说非常难 因为在传统的Whois查询中,Whois服务器返回的信息没有任何规范,它想给你什么就能给你什么,如下图 这是我的域名的Whois查询结果,可以看到,完全没有规范可言 更有甚者不仅改格式,甚至还改术语,比如Status写一个Connect 这就使得我们做三方API的时候想要针对性的汉化或者过滤就非常困难。如果你想要做到绝对的规范,需要针对每一个顶级域的Whois服务器做调查,然后针对性的配置过滤器,这样才能输出一个完整的,规范的Whois查询结果 前文我提到了传统的Whois查询,那么有没有一个API能直接提供一个规范了格式的查询结果,并且每个域名都遵循这个规范呢? 有的,兄弟有的,这就是RDAP(Registration Data Access Protocol),注册数据访问协议。使用了RDAP的域名查询Whois将会返回一个标准的JSON格式的输出,并且查询是通过标准的RESTAPI,也就是Web协议,如下图 乍一看好多无用信息啊,但是你先别急,既然它返回的是JSON,而且所有域名都是一个规范,那么我们完全可以方便快捷的过滤 就像这样,只需要写一遍过滤规则,以后所有支持RDAP查询Whois的顶级域都可以通过这个规则快捷展示信息! 但是话又说回来,RDAP毕竟是一个新式协议,很多顶级域仍然不支持,比如 .im .im Domain Delegation Data 可以看到 .im 仅支持传统Whois查询 那么我们的三方API就要既支持传统Whois,又支持新式RDAP 正式开始构建三方Whois查询API 由于传统Whois查询是通过TCP请求43端口获取信息,需要专用客户端来查询,所以针对于只支持传统Whois查询的顶级域就需要我们的服务器先查询到信息,再返回用户纯文本。如下图 而对于已经支持RDAP查询的顶级域,直接返回Web URL,让用户自行阅览,如下图 另外,针对于仅支持RDAP查询的顶级域,我们需要先通过IANA查询该顶级域的RDAP服务器(实际上传统Whois也需要,但是Linux的Whois包硬编码的Whois查询服务器目前够用 :) 比如我要查询 freebird.day ,就需要先前往.day Domain Delegation Data 查找 接下来通过给定的RDAP服务器查询即可 因为RDAP协议较新,且易读,所以针对于传统Whois和RDAP查询都支持的顶级域优先RDAP查询

2025年5月27日 · 1 分钟 · 55 字