我想读取用户上传到 Slack Api 通道的文件。我正在使用“app_mention”事件,每当用户提及应用程序名称并上传 csv 文件时,我都会使用一个函数来捕获此事件,即使在后端也是如此。下面是我的Python函数:
@app.event("app_mention")
def reply_to_mention(event, client, logger):
"""
"""
print("reply2mention")
try:
for i in event['files']:
try:
if i['url_private_download']:
df = pd.read_csv(i['url_private'])
#df = pd.read_csv(i['url_private'],header=None ,sep='\n')
#df = df[0].str.split(',', expand=True)
print(df.shape, df.head(1))
except Exception as e:
print(str(e))
continue
text = f"Thanks for the mention, <@{event['user']}>! How can I help?" + event['text'] + '<@' + event[
'user'] + '>'
client.chat_postMessage(channel=event['channel'], text=text)
except Exception as e:
logger.error(f"Error responding to app_mention: {e}")
事件字典:i['url_private'] 具有 csv 的下载链接的 url,但由于内容不是 csv,我收到“错误标记数据”错误。看起来该函数正在下载 html 代码而不是 csv。有没有办法可以在上述函数中访问用户上传的数据?
使用以下代码读取上传的文件:
# Class for passing bearer authorization token
class BearerAuth(requests.auth.AuthBase):
def __init__(self, token):
self.token = token
def __call__(self, r):
r.headers["authorization"] = "Bearer " + self.token
return r
url=''
token=''
r = requests.get(url, auth=BearerAuth(token))
file_data = r.content # get binary content
file_name="test.csv"
# save file to disk
with open(file_name , 'w+b') as f:
f.write(bytearray(file_data))
print("Saved " + file_name + " in current folder")
df=pd.read_csv("test.csv")
df.head()
我也有同样的问题。 请检查您的机器人的范围。它必须具有允许从用户接收文件的“files:read”范围。