Доступ к файлам Slack из слабого бота
Мне нужен слабый бот, который может получать и сохранять файлы, отправляемые из слабинных чатов.
Проблема в том, что slack не отправляет содержимое файла, а массив ссылок, указывающих на файл. Большинство из них, включая ссылку для скачивания, являются закрытыми и не могут быть доступны через бота. Он отправляет одну общедоступную ссылку, но эта ссылка указывает на предварительный просмотр файла, который не имеет самого файла (здесь пример).
Итак, вопрос: как я могу получить доступ к загруженным файлам через бот?
Ответы
Ответ 1
Вы можете получить доступ к частным URL-адресам вашего бота, указав токен доступа в заголовке HTTP при выполнении запроса CURL.
Ваш токен должен иметь область действия files.read
, чтобы получить доступ.
Формат:
Authorization: Bearer A_VALID_TOKEN
Замените A_VALID_TOKEN токеном слабого доступа.
Я только что протестировал его с помощью простого PHP-скрипта для извлечения файла по его "url_private", и он прекрасно работает.
Источник: Документация Slack API/объект файла/Аутентификация
Ответ 2
Пример использования библиотеки запросов Python для извлечения файла примера:
import requests
url = 'https://slack-files.com/T0JU09BGC-F0UD6SJ21-a762ad74d3'
token = 'xoxp-8853424449-8820034832-8891394196-faf6f0'
requests.get(url, headers={'Authorization': 'Bearer %s' % token})
Ответ 3
для тех, кто хочет выполнить это с помощью Bash & cURL, здесь полезная функция! Он загрузит файл в текущий каталог с именем файла, который однозначно идентифицирует файл, даже если файл имеет то же имя, что и другие в вашем списке файлов.
function slack_download {
URL="$1";
TOKEN="$2"
FILENAME='echo "$URL" | sed -r 's/.*\/(T.+)\/([^\/]+)$/\1-\2/'';
curl -o "$FILENAME" -H "Authorization: Bearer $TOKEN" "$URL";
}
# Usage:
# Downloads as ./TJOLLYDAY-FANGBEARD-NSFW_PIC.jpg
slack_download "https://files.slack.com/files-pri/TJOLLYDAY-FANGBEARD/NSFW_PIC.jpg" xoxp-12345678901-01234567890-123456789012-abcdef0123456789abcdef0123456789