API Anon.Cat

Адрес

Отправьте файл методом 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: Exif и геоданные из JPEG, текстовые блоки и eXIf из PNG, Exif и XMP из WebP. Пиксели не затрагиваются, а всё, что не относится к этим трём форматам, сохраняется ровно в том виде, в каком было отправлено.

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

Отзыв ключа - один щелчок в той же панели, действует немедленно и не трогает ни заметку, ни другие ключи. Ваш пароль здесь нигде не участвует, и ключ не может ни прочитать его, ни изменить, ни удалить заметку.

Отправить запись

POST на /api/notes/append, текст - в поле 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 возвращает записи расшифрованными, от старых к новым. limit и offset листают, а order=desc начинает с самой свежей - это то, что нужно программе, которая регулярно опрашивает заметку.

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

/api/notes/note отдаёт заметку без содержимого: сколько в ней записей, когда в неё писали последний раз и сколько ей осталось до того, как её заберёт чистка неиспользуемых. Любое обращение через API тоже сбрасывает этот счётчик, так что заметка, в которую бот пишет каждый день, не истекает никогда.

Уведомления

Заметка может сообщать вам, когда в неё пишет ключ, - в Discord или в Telegram. Когда вы пишете сами, не уходит ничего: смысл в том, чтобы слышать машину, а не себя.

Настройте их в настройках или через API ключом rw. Проверка уходит в момент создания, так что неправильно скопированный адрес вебхука - это код ответа, который вы видите сразу.

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 и боты Telegram. Произвольный URL сознательно не предлагается: ходить по нему пришлось бы этому серверу.