#!/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]