Доступ к файлам 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