【案例】Python飛書機器人編輯表格


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from .config import *
import requests
import json


class Bot:
    def __init__(self, app):
        self.app = app  # app為機器人
        self.table = None  # 共享文檔的table_id
        self.sheet = None  # 共享文檔的sheet_id
        self.token = self.get_token()
        self.header = {
            "Authorization": self.token,
            "Content-Type": "application/json; charset=utf-8"
        }

    def get_token(self):
        """獲取應用token"""
        url = url_api['url_token']
        headers = {"Content-Type": "text/plain"}
        r = requests.post(url, headers=headers, json=self.app)
        return "Bearer " + json.loads(r.text)['tenant_access_token']

    def use(self, table, sheet):
        self.table = table
        self.sheet = sheet
        return self

    def add_data(self, sheet_range="", values=[]):
        """增加數據,原始數據下移"""
        data = {
            "valueRange": {
                "range": self.sheet + sheet_range,
                "values": values
            }
        }
        r = requests.post(urls['插入數據'] % self.table, headers=self.header, json=data)
        return r.text

    def del_data(self, major=0, start_index=1, end_index=1):
        """刪除數據"""
        data = {
            "dimension": {
                "sheetId": self.sheet,
                "majorDimension": ['ROWS', 'COLUMNS'][major],
                "startIndex": start_index,
                "endIndex": end_index
            }
        }
        r = requests.delete(urls['刪除數據'] % self.table, headers=self.header, json=data)
        return r.text

    def union_cell(self, sheet_range, major=0):
        """合並單元格"""
        url = urls['合並單元格'] % self.table
        data = {
            "range": self.sheet + sheet_range,
            "mergeType": ['MERGE_ALL', 'MERGE_ROWS', 'MERGE_COLUMNS'][major]
        }
        r = requests.post(url, headers=self.header, json=data)
        return r.text

    def split_cell(self, sheet_range):
        """拆分單元格"""
        data = {
            "range": self.sheet + sheet_range
        }
        r = requests.post(urls['拆分單元格'] % self.table, headers=self.header, json=data)
        return r.text

    def set_style(self, sheet_range, kind):
        """設置單元格格式"""
        data = {
            "appendStyle": {
                "range": self.sheet + sheet_range,
                "style": self.style_list(kind)
            }
        }
        r = requests.put(urls['設置單元格格式'] % self.table, headers=self.header, json=data)
        return r.text

    def phone_to_open_id(self, mobile):
        """增加數據,原始數據下移"""
        r = requests.get(urls['url_phone_to_id'] + str(mobile), headers=self.header)
        return json.loads(r.text)['data']['mobile_users'][str(mobile)][0]['open_id']

    def mail_to_open_id(self, email):
        """增加數據,原始數據下移"""
        r = requests.get(urls['url_email_to_id'] + email, headers=self.header)
        return json.loads(r.text)['data']['email_users'][email][0]['open_id']

    def get_chat_id(self):
        """獲取機器人所在群的id"""
        r = requests.get(urls['url_get_chat_id'], headers=self.header)
        return r.text

    def send_card(self, chat_id, content):
        """如果是email,body對應的chat_id改成email即可"""
        body = {
            "chat_id": chat_id,
            "msg_type": "interactive",
            "update_multi": False,
            "card": {
                "config": {
                    "wide_screen_mode": True
                },
                "header": {
                    "title": {
                        "tag": "plain_text",
                        "content": "數據核心表監控提醒"
                    },
                    "template": "red"
                },
                "elements": [
                    {
                        "tag": "div",
                        "text": {
                            "tag": "lark_md",
                            "content": content
                        }
                    },
                ]
            }
        }
        r = requests.post(url_api['url_card'], json=body, headers=self.header)
        return r.text

    def send_markdown(self, chat_id, content):
        """content是一個列表[[內容1,需要@的人],[內容2,需要@的人]]
        content = [[{"tag": "text","text": "提醒的內容"}, {"tag": "at", "user_id": bot.phone_to_open_id(110)}]]
        """
        body = {
            "chat_id": chat_id,
            "msg_type": "post",
            "content": {
                "post": {
                    "zh_cn": {"title": "數據核心表監控提醒",
                              "content": content},
                }
            }
        }
        r = requests.post(urls['url_card'], json=body, headers=self.header)
        return r.text

    def style_list(self, kind):
        style_dict = {
            "百分數": {"font": {
                "bold": True,
                "italic": True,
                "fontSize": "11pt/1.5",
                "clean": False
            },
                "textDecoration": 0,
                "formatter": "0.00%",
                "hAlign": 2,
                "vAlign": 1,
                "foreColor": "#ff0000",
                # "backColor": "#21d11f",
                # "borderType": "FULL_BORDER",
                # "borderColor": "#ff0000",
                "clean": False
            }
        }
        return style_dict[kind]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM