【问题标题】:How to download files that were created by a slackbot?如何下载由 slackbot 创建的文件?
【发布时间】:2019-07-13 03:44:34
【问题描述】:

我创建了一个从工作区中的用户那里收集信息的机器人。它将此信息存储在本地服务器上的 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 令牌吗?

假设我想从 slackbot 创建的服务器上下载名为 stats.csv 的文件,但我没有它的 URL,我该如何下载它?

【问题讨论】:

  • r = requests.get(...) f = open(..., 'wb') f.write(r.content) f.close()
  • requests 还具有链式下载功能。或使用urllib.request.urlretrive(url, filename)
  • 我真的不明白,你能提供一些代码示例吗?
  • 您在第一条评论中有代码示例。您必须将requests.get() 分配给变量,打开文件并将r.content 从您的请求写入文件。这样,您就可以将 ulr 中的所有页面都保存在文件中。您可以尝试使用BeautifulSoup 截取有趣的部分。
  • 我在此页面上没有看到直接指向文件的链接

标签: python slack slack-api


【解决方案1】:

我不建议自己修补用于下载文件的 URL,因为 Slack 可能会更改它,然后您的代码就会中断。

相反,首先通过使用文件 ID 调用 API 方法 files.info 来获取文件的当前 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")

【讨论】:

  • 有没有办法通过文件名而不是 ID 进行搜索?我不知道机器人将文件保存在什么 ID...
  • 是的。首先调用 files.list 以获取所有文件的列表及其 ID 和名称。在那里您可以搜索正确的文件名并选择下载 URL
  • 顺便说一句。您也可以在浏览器中直接调用大多数 API 方法。例如要获取列表,只需将您的令牌添加到此 url 并在浏览器中打开:https://api.slack.com/api/files.list?token=TOKEN
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多