从slack bot访问Slack文件

我需要一个能够接收和保存来自松弛聊天室的文件的松散机器人。

问题是:slack不发送文件内容,而是指向文件的链接数组。 其中大多数,包括下载链接都是私有的,无法通过bot访问。 它确实发送了一个公共链接,但该链接指向文件预览,它没有文件本身( 这是一个例子 )。

所以问题是:如何通过bot访问上传的文件?

当您执行CURL请求时,您可以通过在http标头中提供访问令牌来访问机器人的私人URL。 这可以是使用OAuth或全局“测试令牌”接收的访问令牌。

格式为:

Authorization: Bearer A_VALID_TOKEN 

用您的松弛访问令牌替换A_VALID_TOKEN。

我刚用一个简单的PHP脚本测试它,通过它的“url_private”检索文件,它运行得很好。

来源: Slack API documententation /文件对象/身份validation

使用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}) 

对于那些想要用Bash和cURL来实现这一目标的人来说,这是一个有用的function! 它将使用唯一标识文件的文件名将文件下载到当前目录,即使该文件与文件列表中的其他文件具有相同的名称。

 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 "http://sofzh.miximages.com/ruby/NSFW_PIC.jpg" xoxp-12345678901-01234567890-123456789012-abcdef0123456789abcdef0123456789