我创建了一个从工作区中的用户收集信息的机器人。它将此信息存储在本地服务器上的 csv 文件中。我如何下载上述文件?我从 Stack Overflow 得到了这段代码,试图联系作者但没有得到任何回应。
import requests
url = 'https://slack-files.com/T0JU09BGC-F0UD6SJ21-a762ad74d3'
token = 'xoxp-TOKEN'
requests.get(url, headers={'Authorization': 'Bearer %s' % token})
如何获取文件的 URL 和令牌?令牌是什么?它是机器人的 OAuth 令牌吗?
假设我想下载stats.csv
由 slackbot 创建的服务器命名的文件,但我没有它的 URL,我该如何下载?
我不建议自己修补下载文件的 URL,因为 Slack 可能会更改它,然后您的代码会中断。
相反,首先通过files.info
使用文件 ID调用 API 方法来获取文件的当前 URL 。然后使用属性url_private
作为 URL 进行下载。或者,您也可以调用files.list
以获取带有 ID 及其 URL 的所有文件的列表。
为确保您可以访问该文件,最好使用来自其创建者的令牌,例如您的 slackbot。
我还包括将下载的数据保存到文件的代码和一些基本的错误处理。请注意,令牌不能设置为环境变量名称SLACK_TOKEN
。这比将其直接放入代码中要安全得多。
这是一个完整的例子:
import os
import requests
token = os.environ['SLACK_TOKEN']
file_id = "F12345678"
# call file info to get url
url = "https://slack.com/api/files.info"
r = requests.get(url, {"token": token, "file": file_id})
r.raise_for_status
response = r.json()
assert response["ok"]
file_name = response["file"]["name"]
file_url = response["file"]["url_private"]
print("Downloaded " + file_name)
# download file
r = requests.get(file_url, headers={'Authorization': 'Bearer %s' % token})
r.raise_for_status
file_data = r.content # get binary content
# save file to disk
with open(file_name , 'w+b') as f:
f.write(bytearray(file_data))
print("Saved " + file_name + " in current folder")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句