如何在python中读取slack api中的文件?

问题描述 投票:0回答:2

我想读取用户上传到 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。有没有办法可以在上述函数中访问用户上传的数据?

python slack slack-api
2个回答
0
投票

使用以下代码读取上传的文件:

# 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()

0
投票

我也有同样的问题。 请检查您的机器人的范围。它必须具有允许从用户接收文件的“files:read”范围。

© www.soinside.com 2019 - 2024. All rights reserved.