Anon.Cat API

接口地址

把文件 POST 到 https://up.anon.cat/upload,默认会返回 json。

如果想要 json 以外的格式,加一个参数指明要哪种,比如 https://up.anon.cat/upload?output=csv

可用的响应格式有:json、csv、text、html 和 gyazo。

每次请求一个文件,最大 1 GB。

curl 示例

curl -i -F files[]=@yourfile.jpeg https://up.anon.cat/upload

直接放在请求体里上传

你也可以把文件直接放进请求体,而不是用 multipart 表单,文件名通过查询参数传。大文件更适合这种方式:长度一开始就知道,没有 multipart 那层包装,网站自己用的也是这个办法。

curl -i -T yourfile.iso "https://up.anon.cat/upload?filename=yourfile.iso"

两种方式都是把文件直接推给 CDN,所以都不受服务器磁盘空间的限制。

移除元数据

加上 scrub=1,文件在送往 CDN 的途中会被剥去元数据:JPEG 的 Exif 和 GPS,PNG 的文本块与 eXIf 块,WebP 的 Exif 和 XMP。像素不会被改动,不属于这三种格式的文件会原样保存。

curl -i -T photo.jpg "https://up.anon.cat/upload?filename=photo.jpg&scrub=1"

网站每次上传都会带上它。分片上传时,这个参数加在 /upload/finish 调用上,而不是每个分片上。

笔记 API

Anon.Notes 有自己的 API,它和上面的上传接口不是一回事:它写入的是某一条笔记,而不是公开的文件托管。密钥在笔记自己的设置页里创建,对任何其他笔记都无能为力。

它的用处,是把笔记当作收件端。部署脚本、CI 任务、定时任务或者机器人往里推行,你随后在手机上读。不用注册,也不用轮询:笔记本身就是信箱。

基础地址是 https://anon.cat/api/notes/。一切都讲 JSON,鉴权方式也完全一致。

密钥

打开笔记,进入设置,在「开发者 API」下创建一个密钥。它只显示一次——那时就复制下来,因为之后这边没有任何东西能把它读回给你。

每个密钥都有范围:append 只能追加条目、读不到任何东西,read 只能读、写不了任何东西,rw 两样都能做,还能管理通知。给机器最窄的那个够用的范围。

用 bearer 令牌发送。查询字符串里永远不接受,因为查询字符串会被写进访问日志。

curl -H "Authorization: Bearer $ANON_KEY" https://anon.cat/api/notes/ping

吊销密钥就是同一面板里的一次点击,立刻生效,既不动笔记也不动其他密钥。你的密码在这里从头到尾都不参与,密钥读不到它、改不了它,也删不掉笔记。

推送一条内容

/api/notes/append 发 POST,文本放在 text 字段里,或者直接作为整个请求体。两种写法效果相同:

curl -H "Authorization: Bearer $ANON_KEY" -d "text=deploy 1.9.9 finished" https://anon.cat/api/notes/append

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"text":"deploy 1.9.9 finished"}' https://anon.cat/api/notes/append

tail -n 20 build.log | curl -H "Authorization: Bearer $ANON_KEY" --data-binary @- https://anon.cat/api/notes/append

日志式笔记会多出一条。页面式笔记会变长:文本追加在文档末尾,绝不覆盖,这样拿着旧副本的脚本就不会抹掉你在这期间写下的东西。

响应是 201,里面带着笔记的状态。加上 notify=false 就只在这一次调用中跳过通知——这正是补推旧内容的循环所需要的。

读取笔记

用 read 或 rw 密钥,/api/notes/entries 会把条目解密后返回,最旧的在前。limitoffset 翻页,order=desc 从最新的开始,这正是轮询程序想要的。

curl -H "Authorization: Bearer $ANON_KEY" "https://anon.cat/api/notes/entries?limit=10&order=desc"

/api/notes/note 返回不含内容的笔记:有多少条目、上次写入是什么时候,以及在闲置清理带走它之前还剩多久。通过 API 的每次访问同样会把这个计时归零,所以每天被机器人写入的笔记永远不会过期。

通知

当有密钥写入时,笔记可以通过 Discord 或 Telegram 通知你。你自己写入时从不发送——重点是听到机器的动静,而不是自己的。

在设置里配置,或者用 rw 密钥通过 API 配置。创建的那一刻就会发出一次测试,所以复制错的 webhook 地址会立刻变成你看得见的状态码。

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"kind":"discord","url":"https://discord.com/api/webhooks/…","label":"deploys"}' https://anon.cat/api/notes/hooks

curl -H "Authorization: Bearer $ANON_KEY" -H "Content-Type: application/json" -d '{"kind":"telegram","bot":"123456789:AA…","chat":"-1001234567890"}' https://anon.cat/api/notes/hooks

默认情况下,通知不携带笔记里的任何文字:它只说有东西到了、有多少、由哪个密钥送来,并链接回这里——笔记依然在密码后面。传 preview=true,条目本身也会一起发出去,那就意味着把你的文字交给了 Discord 或 Telegram。这是一次真实的取舍,所以除非你开口,它一直是关着的。

只接受 Discord 的 webhook 地址和 Telegram 的机器人。任意 URL 是有意不提供的:去访问它的会是这台服务器。