Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从Slack bot访问Slack文件_Ruby_Slack Api_Slack - Fatal编程技术网

Ruby 从Slack bot访问Slack文件

Ruby 从Slack bot访问Slack文件,ruby,slack-api,slack,Ruby,Slack Api,Slack,我需要一个slack机器人,它能够接收和保存slack聊天室发送的文件 问题是:slack不发送文件内容,而是发送指向文件的链接数组。其中大多数,包括下载链接都是私有的,不能通过bot访问。它确实发送了一个公共链接,但该链接指向文件预览,而该预览没有文件本身() 因此,问题是:如何通过bot访问上传的文件?在执行请求时,通过在HTTP头中提供访问令牌,可以从bot访问私有URL 您的令牌需要具有作用域文件。读取才能获得访问权限 格式为: Authorization: Bearer A_VALID

我需要一个slack机器人,它能够接收和保存slack聊天室发送的文件

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


因此,问题是:如何通过bot访问上传的文件?

在执行请求时,通过在HTTP头中提供访问令牌,可以从bot访问私有URL

您的令牌需要具有作用域
文件。读取
才能获得访问权限

格式为:

Authorization: Bearer A_VALID_TOKEN
用空闲访问令牌替换有效令牌

我刚刚用一个简单的PHP脚本测试了它,通过它的“url_private”检索一个文件,效果很好


来源:

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

使用Python3测试-只需将SLACK_令牌替换为您的令牌即可。 下载并创建输出文件

#!/usr/bin/env python3
# Usage: python3 download_files_from_slack.py <URL>

import sys
import re
import requests

url = " ".join(sys.argv[1:])

token = 'SLACK_TOKEN'
resp = requests.get(url, headers={'Authorization': 'Bearer %s' % token})

headers = resp.headers['content-disposition']
fname = re.findall("filename=(.*?);", headers)[0].strip("'").strip('"')

assert not os.path.exists(fname), print("File already exists. Please remove/rename and re-run")
out_file = open(fname, mode="wb+")
out_file.write(resp.content)
out_file.close()
#/usr/bin/env蟒蛇3
#用法:python3从\u slack.py下载\u文件
导入系统
进口稀土
导入请求
url=”“.join(sys.argv[1:])
令牌='SLACK_令牌'
resp=requests.get(url,头={'Authorization':'承载者%s'%token})
headers=相应的headers['content-disposition']
fname=re.findall(“文件名=(.*);”,标题)[0]。strip(“”)。strip(“”)
断言非os.path.exists(fname),打印(“文件已存在。请删除/重命名并重新运行”)
out\u file=open(fname,mode=“wb+”)
输出文件写入(分别为内容)
out_file.close()

如果你给机器人一个帐户,你能让机器人登录并以这种方式抓取文件吗?@tadman我可以,但我不想处理一组额外的凭据和该方法所需的所有附加逻辑。我希望有一种更好的方法我没有找到。看看这里的文件范围:。似乎如果你想写文件,您需要用户权限。@WilhelmKlopp机器人使用的是访问令牌,而不是oauth,我需要下载文件,而不是上载。另外,我有权访问文件,只是不能方便地下载它们,这对我来说很奇怪,因为这应该是一个常见的用例。谢谢!与现有API令牌完美配合。这正是我所需要的。@Stevenlin当然,它可以工作如文档所述。如果您在应用此解决方案时遇到问题,一定还有另一个原因。这里还有一个Python示例代码:从哪里获取URL和令牌?