| 
					
				 | 
			
			
				@@ -6,24 +6,81 @@ 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.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(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def insert_columns_rows(self, sheet_id, major_dimension, start_index, end_index): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         写入飞书表格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        :return: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :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): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return self.document_url 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -58,27 +115,48 @@ class Feishu(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             "tag": "div", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             "text": { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                "content": "**{}**\n自动导出失败 !!!".format( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    platform_name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                "content": "**{}**\n自动导出失败 !!!".format(platform_name), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 "tag": "lark_md", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    "header": {"title": {"content": "We分析: 报警  ❌", "tag": "plain_text"}}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "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 response.status_code == 200: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #     return True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #     print("飞书通知失败") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #     return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    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() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#     F.bot("票圈视频", 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if __name__ == "__main__": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    F = Feishu() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    value = [[0]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    F.insert_value(sheet_id="gwzBOM", values=value, ranges="D1:F1") 
			 |