""" feishu python方法 """ import json import requests import datetime def get_app_token(): """ 获取飞书api token :return: """ url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/" post_data = { "app_id": "cli_a51114cf8bf8d00c", # 这里账号密码是发布应用的后台账号及密码 "app_secret": "cNoTAqMpsAm7mPBcpCAXFfvOzCNL27fe", } response = requests.request("POST", url=url, data=post_data) tenant_access_token = response.json()["tenant_access_token"] return tenant_access_token class Feishu(object): """ feishu Python Object """ def __init__(self): self.document_url = "https://w42nne6hzg.feishu.cn/sheets/C1Qrsa4HWh6bzEtv7aocrFlAnad" self.robot_url = "https://open.feishu.cn/open-apis/bot/v2/hook/34e2fdbc-0649-44d3-b5ce-b28b38cca1db" self.headers = {"Content-Type": "application/json"} self.document_token = "C1Qrsa4HWh6bzEtv7aocrFlAnad" def insert_columns_rows(self, sheet_id, major_dimension, start_index, end_index): """ 写入飞书表格 :param sheet_id: 表的id :param major_dimension:行或者列, ROWS, COLUMNS :param start_index:开始位置 :param end_index:结束位置 """ insert_columns_url = "https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/" \ + self.document_token + "/insert_dimension_range" headers = { "Authorization": "Bearer " + get_app_token(), "Content-Type": "application/json; charset=utf-8", } body = { "dimension": { "sheetId": sheet_id, "majorDimension": major_dimension, # 默认 ROWS ,可选 ROWS、COLUMNS "startIndex": start_index, # 开始的位置 "endIndex": end_index # 结束的位置 }, "inheritStyle": "AFTER" # BEFORE 或 AFTER,不填为不继承 style } response = requests.post(url=insert_columns_url, headers=headers, json=body, verify=False) print(response.json()['msg']) def insert_value(self, sheet_id, ranges, values): """ update :param sheet_id: :param ranges: :param values: """ update_values_url = "https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/" \ + self.document_token + "/values_batch_update" headers = { "Authorization": "Bearer " + get_app_token(), "Content-Type": "application/json; charset=utf-8" } body = { "valueRanges": [ { "range": sheet_id + "!" + ranges, "values": values }, ], } response = requests.request("POST", url=update_values_url, headers=headers, json=body) print(response.json()) def bot(self, platform_name, flag=1): """ 飞书机器人,在群里报警用 :param platform_name: 小程序的名称 :param flag: 通知 or 报警, 默认为1, 通知 :return: """ if flag == 1: payload = { "msg_type": "interactive", "card": { "elements": [ { "tag": "div", "text": { "content": "**{}**\n数据自动导出完成;\n完成时间是:{}。".format( platform_name, datetime.datetime.now().__str__() ), "tag": "lark_md", }, }, ], "header": {"title": {"content": "We分析: 通知 ✅", "tag": "plain_text"}}, }, } else: payload = { "msg_type": "interactive", "card": { "elements": [ { "tag": "div", "text": { "content": "**{}**\n自动导出失败 !!!".format(platform_name), "tag": "lark_md", }, }, ], "header": { "title": {"content": "We分析: 报警 ❌", "tag": "plain_text"} }, }, } w = requests.request( "POST", url=self.robot_url, headers=self.headers, data=json.dumps(payload) ) print(w.json()) def remind(self): """ 飞书提醒机器人 :return: None """ payload = { "msg_type": "interactive", "card": { "elements": [ { "tag": "div", "text": { "content": "扫码通知:记得要扫码导出we分析, ", "tag": "lark_md", }, }, ], "header": {"title": {"content": "We分析: 提醒 ⏰", "tag": "plain_text"}}, }, } w = requests.request( "POST", url=self.robot_url, headers=self.headers, data=json.dumps(payload) ) print(w.json()) if __name__ == "__main__": F = Feishu() value = [[0]] F.insert_value(sheet_id="gwzBOM", values=value, ranges="D1:F1")