Har*_*oli 5 python python-requests slack-api
我一直在搜索,我还没有找到我正在寻找的答案.
我正在尝试/tmp使用python请求将文件从slack 上传到slack,但我一直在{"ok":false,"error":"no_file_data"}返回.
file={'file':('/tmp/myfile.pdf', open('/tmp/myfile.pdf', 'rb'), 'pdf')}
payload={
"filename":"myfile.pdf",
"token":token,
"channels":['#random'],
"media":file
}
r=requests.post("https://slack.com/api/files.upload", params=payload)
Run Code Online (Sandbox Code Playgroud)
主要是试图遵循这里发布的建议
Cal*_*wis 18
通过http发送文件比发送其他数据需要更多的额外工作.您必须设置内容类型并获取文件以及所有这些内容,因此您不能将其包含payload在请求中的参数中.
您必须将文件信息提供给方法的files参数,.post以便它可以将所有文件传输信息添加到请求中.
my_file = {
'file' : ('/tmp/myfile.pdf', open('/tmp/myfile.pdf', 'rb'), 'pdf')
}
payload={
"filename":"myfile.pdf",
"token":token,
"channels":['#random'],
}
r = requests.post("https://slack.com/api/files.upload", params=payload, files=my_file)
Run Code Online (Sandbox Code Playgroud)
写这篇文章,可能是为了节省你我浪费的所有时间。我确实尝试创建一个新文件并将其上传到 Slack,但没有实际创建文件(仅包含其内容)。由于来自 Slack API 的各种非点错误,我浪费了几个小时才发现,最终我从一开始就有了很好的代码,只是错过了频道中的一个机器人。
此代码还可用于打开现有文件、获取其内容、修改并将其上传到 Slack。
from io import StringIO # this library will allow us to
# get a csv content, without actually creating a file.
sio = StringIO()
df.to_csv(sio) # save dataframe to CSV
csv_content = sio.getvalue()
filename = 'some_data.csv'
token=os.environ.get("SLACK_BOT_TOKEN")
url = "https://slack.com/api/files.upload"
request_data = {
'channels': 'C123456', # somehow required if you want to share the file
# it will still be uploaded to the Slack servers and you will get the link back
'content': csv_content, # required
'filename': filename, # required
'filetype': 'csv', # helpful :)
'initial_comment': comment, # optional
'text': 'File uploaded', # optional
'title': filename, # optional
#'token': token, # Don't bother - it won't work. Send a header instead (example below).
}
headers = {
'Authorization': f"Bearer {token}",
}
response = requests.post(
url, data=request_data, headers=headers
)
Run Code Online (Sandbox Code Playgroud)
我刚刚在 Slack 的 file.upload 文档上经历了一次最糟糕的经历(可能是今年)。我认为这可能对你将来有用。
文档中不起作用的事情:
token- 它不能是post 请求的参数,它必须是 header。这是 Slack 实际员工在一份 github 错误报告中提到的。channel_not_found- 我确实提供了现有的正确频道 ID 并收到了此消息。由于安全原因(混淆),这在某种程度上是可以的,但为什么会出现此错误消息:not_in_channel-Authenticated user is not in the channel.将机器人添加到频道后,一切正常。content参数的示例(这就是我与您分享我的代码的原因。主要问题是他们没有对 API 进行版本控制、更改它并且不更新文档,因此文档中的许多语句都是错误/过时的。
| 归档时间: |
|
| 查看次数: |
10980 次 |
| 最近记录: |