本地文件
学习使用 Slack API 调用来操作工作区中的文件。
概述
我们可以使用 Slack API 调用来定期上传和分享系统中的本地文件。
本课程将介绍以下端点:
files.upload:此端点用于上传或创建文件。files.list:此端点用于列出团队、频道或用户相关的文件,并支持应用过滤条件。files.info:此端点用于获取文件的详细信息。files.delete:此端点用于删除文件。
上传文件
要上传文件,我们将访问 https://slack.com/api/files.upload 端点。首先,我们学习如何使用 files.upload 端点上传文件。我们将使用 POST 请求调用该端点。
files.upload 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的权限范围。通常通过 HTTP Authorization 头部或 POST 参数传递。 |
| channels | string | 可选 | 以逗号分隔的频道名称或 ID 列表,表示文件将被分享到这些频道。 |
| content | string | 可选 | 通过 POST 变量发送的文件内容。如果省略此参数,则必须提供 file。 |
| file | string | 可选 | 通过 multipart/form-data 发送的文件(在使用 POST 请求提交表单时上传完整文件)。如果省略此参数,则必须提交 content。 |
| filename | string | 可选 | 文件名称。 |
| filetype | string | 可选 | 文件类型标识符,例如 auto 或 python。 |
| initial_comment | string | 可选 | 在指定频道中引入该文件的消息文本。 |
| thread_ts | string | 可选 | 用于将文件作为回复上传到另一条消息的 ts 值。不能使用回复的 ts 值,而应使用其父级消息。 |
| title | string | 可选 | 文件的标题。 |
上传文件后,请检查应用程序已添加的 Slack 频道中是否出现该文件。
让我们调用 files.upload 端点。点击“运行”按钮,将 mytext.txt 文件上传至 Slack。
1import requests 2import json 3 4url = "https://slack.com/api/files.upload" 5with open('mytext.txt') as fh: 6 file_txt = fh.read() 7 8data = { 9 'channels': '{{CHANNEL_ID}}', 10 "content": file_txt, 11 "filename": "mytxt.txt", 12 "filetype": "txt" 13} 14headers = { 15 'Authorization': 'Bearer {{TOKEN}}' 16} 17 18response = requests.post(url, headers=headers, params=data) 19print(json.dumps(response.json(), indent=4))
- 第 5 行:使用
open关键字打开名为mytext.txt的文件。 - 第 6 行:使用
read()方法将文件内容读取到file_txt变量中。 - 第 8–13 行:指定必要的参数,包括
channels、content、filename和filetype。
获取所有文件列表
要获取所有文件列表,我们访问 https://slack.com/api/files.list 端点。该端点将返回频道中所有已上传文件的列表。
files.list 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的权限范围。通常通过 HTTP Authorization 头部或 POST 参数传递。 |
| channel | string | 可选 | 用于过滤特定频道(通过其 ID 指定)中的文件。 |
| count | integer | 可选 | 每页返回的项目数量。 |
让我们调用 files.list 端点。点击“运行”按钮,获取频道中所有文件的列表。
1import requests 2import json 3 4url = "https://slack.com/api/files.list" 5data = {'channel': '{{CHANNEL_ID}}'} 6headers = { 7 'Authorization': 'Bearer {{TOKEN}}', 8 'Content-Type': 'application/x-www-form-urlencoded', 9} 10 11response = requests.get(url, headers=headers, params=data) 12print(json.dumps(response.json(), indent=4))
- 第 4 行:指定
files.list端点。 - 第 5 行:指定要过滤的频道,仅返回上传到该频道的文件。
获取文件信息
要获取文件信息,我们访问 https://slack.com/api/files.info 端点。在获得文件 ID 后,即可通过 files.info 端点获取文件详情。
files.info 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的权限范围。通常通过 HTTP Authorization 头部或 POST 参数传递。 |
| file | string | 必需 | 通过提供文件 ID 来指定一个文件。 |
| count | string | 可选 | 每页返回的项目数量。 |
| cursor | string | 可选 | 用于“指向”下一页数据的字符串。通过将 cursor 参数设置为前一次请求响应中返回的 response_metadata 中的 next_cursor 值,实现分页。 |
| limit | integer | 可选 | 指示最多返回的项目数量。即使未到达列表末尾,也可能返回少于请求数量的项目。 |
| page | integer | 可选 | 要返回的结果页码。 |
让我们调用 files.info 端点。点击“运行”按钮,获取已上传文件的信息。
1import requests 2import json 3 4url = "https://slack.com/api/files.info" 5data = {'file': '{{file_id}}'} 6headers = { 7 'Authorization': 'Bearer {{TOKEN}}', 8 'Content-Type': 'application/x-www-form-urlencoded', 9} 10 11response = requests.get(url, headers=headers, params=data) 12print(json.dumps(response.json(), indent=4))
- 第 5 行:指定
file参数,并在第 11 行调用files.info端点。
删除文件
要删除文件,我们访问 https://slack.com/api/files.delete 端点。使用相同的文件 ID 即可从工作区中删除该文件。
files.delete 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的权限范围。通常通过 HTTP Authorization 头部或 POST 参数传递。 |
| file | string | 必需 | 通过提供文件 ID 来指定要删除的文件。 |
让我们调用 files.delete 端点。点击“运行”按钮,删除本课程开始时上传的文件。
1import requests 2import json 3 4url = "https://slack.com/api/files.delete" 5data = { 6 'channel': '{{CHANNEL_ID}}', 7 'file': '{{file_id}}' 8} 9headers = { 10 'Authorization': 'Bearer {{TOKEN}}', 11 'Content-Type': 'application/x-www-form-urlencoded', 12} 13 14response = requests.get(url, headers=headers, params=data) 15print(json.dumps(response.json(), indent=4))
- 第 5–8 行:指定
channel和file参数。 - 第 14 行:调用
files.delete端点。