1、问题
在做飞书在线表的自动化时,遇到了这么一个问题,如何下载某单元格里的附件呢(里面可能是pdf、xlsx等)

2、尝试
(1)使用现成的飞书指令【读取表格数据】,读取格式为“纯文本”,结果得到下面列表
[{'id': 14, 'type': 'attachment'}]
(2)更改读取格式为“公式计算值”,得到另一个列表
[{'fileToken': 'FCcQblKvxougmPxBmkHcI9jTnAa', 'mimeType': 'application/pdf', 'size': 389984, 'text': '8-16 GYR2 523600583.pdf', 'type': 'attachment'}]
3、思考:既然获得了“fileToken”,那飞书是不是提供了相应的API接口来下载附件呢?
的确有,网址为:下载文件 - 服务端 API - 开发文档 - 飞书开放平台 (feishu.cn)

咦!那是不是获取user_access_token,再copy刚刚得到的file_token,最后复制下示例代码稍等改改,就能下载文件啦?
4、实操1
(1)获取file_token并传参

得到

提取出相应的信息,理论上仅需fileToken,也就是“FCcQblKvxougmPxBmkHcI9jTnAa”,但我这里为了后续的文件保存,把text的内容也先提取了出来。
另外,若该单元格含有多个附件,在读取公式计算值后得到一个列表,可以对列表进行循环以下载多个附件(即:附件为0~多个都可以被循环)

(2)新建python模块,模块名:pdf_download,如下图:

上面的result函数调用是为了用于测试,可注释掉
(3)效果如下图

(4)新问题
半小时后再去运行该应用时,发现没报错,但是下载不了了。回到飞书开放平台发现,原来是user_access_token过期了,能不能自动获取呢,每次手动获取毕竟比较麻烦。发现是可以的,自建应用获取 app_access_token - 服务端 API - 开发文档 - 飞书开放平台 (feishu.cn)
5、实操2
(1)新建python模块,模块名:token_get。用途:获取app_access_token

运行后会得到1个字典,app_access_token的value就是我们需要的

(2)替换刚才的user_access_token,每次运行自动获取一个access_token


完活!下载成功!
优化点:
(1)获取完一个app_access_token后,可以结合if或者try-catch,等pdf_download模块的返回值为False时说明当前app_access_token已过期,此时再调用token_get函数,重新获取一个