惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
博客园 - Franky
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
小众软件
小众软件
罗磊的独立博客
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
C
Check Point Blog
WordPress大学
WordPress大学
博客园 - 【当耐特】
博客园 - 司徒正美
D
Docker

Sehnsucht

记一次博客换图床的过程 观《花束般的恋爱》 读《活过》 东京 旅行篇 亲人逝去 我为什么想养鱼 「monthly 」博客重构 游戏全成就 好看的小说 人生的每一步都不会是浪费-2024年终 「weekly」星期五综合征 「weekly」听播客 杂谈 读《美丽新世界》 「weekly」社交媒体 恶性事件 新世界 「weekly」认知觉醒 美丽新世界 follow 「weekly」独立博客9问题 双十一买书 读《惊呆了!原来这就是社会学》 一次聊天与自我建设 2024-09月记 补番《relife》 树状数组简单理解 lvm简单使用 博客自动发布方案 某公众号废案 fail2ban基本使用 Podman 环境使用 Nginx Proxy Manager 最佳实践 2024-07同学聚会 vps使用podman部署freshrss Gitlab CICD 实践,思考与记录 装备升级:新的PC gitlab局域网搭建流程 FastMail迁移至GMail+Cloudflare Email Routing
防止AI爬取你的博客
2025-02-26 · via Sehnsucht

无意中发现一个项目 ai.robots.txt ,它列出了大部分的与 AI 公司和 LLM 培训相关的网络爬虫的开放列表,于是我想着可以集成到博客中,每次构建拉取项目最新的 robots.txt 就行

大概没人会愿意自己的博客被AI训练吧,有人会愿意吗?

稍微思考了一下,有不少的方式可以实现,例如:

  • Github Action 每次提交时自动拉取最新的 robots.txt,或者定时拉取
  • 构建过程中拉取,如果是使用了 Github Page,那么在构建的过程中拉取最新的 robots.txt(同理,我用的是 zeabur 平台部署,那么在 zbpack.json 中修改构建命令就行)
  • package.json 的构建命令中加上拉取文件的指令

Github Action 的话,可能出现大量冗余的commit记录,并且浪费不必要的资源。如果使用 zeabur 的脚本,那这样锁死了平台,迁移不方便。如果在 package.json 中修改,那就方便很多了,也符合单一职责原则,下面是基本示例

// ... existing code ...
"scripts": {
    "dev": "astro dev",
    "prebuild": "DOWNLOAD_URL=$(curl -s https://api.github.com/repos/ai-robots-txt/ai.robots.txt/releases/latest | jq -r '.assets[0].browser_download_url') && wget -O public/robots.txt \"$DOWNLOAD_URL\"",
    "build": "astro build",
    "preview": "astro preview",
  },
// ... existing code ...

prebuild 会自动在 build 之前自动构建。当然,我们可以给加上windows的适配,或者当无法拉取的时候依旧可以继续执行,或者让其更加符合单一职责原则…

// ... existing code ...
"scripts": {
    "dev": "astro dev",
    "pre:fetch:robots": "DOWNLOAD_URL=$(curl -s https://api.github.com/repos/ai-robots-txt/ai.robots.txt/releases/latest | grep 'browser_download_url' | head -n 1 | cut -d '\"' -f 4) && wget -O public/robots.txt \"$DOWNLOAD_URL\"",
    "pre:install:d2": "curl -fsSL https://d2lang.com/install.sh | sh -s --",
    "prebuild": "(npm run pre:fetch:robots; npm run pre:install:d2) || exit 0",
    "build": "astro build",
    "preview": "astro preview",
  },
// ... existing code ...

这里以我实际的博客项目为例,构建之前因为需要拉取 robots.txt 并且下载 d2,所以 prebuild 中执行这两条命令

删除了 jq 排除了不存在该命令的情况,windows下无法使用 true 所以修改成了 exit 0,其他的虽然还有点不够优雅,不过问题不大