使用 Python 实现一个飞书/微信记账机器人,酷B了!

Python+飞书文档+机器人

今天的主题是:使用Python联动飞书文档+机器人,实现一个专属的记账助手,这篇文章如果对你帮助极大,欢迎你分享给你的朋友、她、他,一起成长。

也欢迎大家留言,说说自己想看什么主题的Python文章,留言越具体,我写的越快,比如留言:我想看Python 自动操作Excel 相关文章。

如果你有具体的需求想通过使用Python实现自动化,那将更好,欢迎私聊我微信,一起交流探讨。

  • 核心逻辑

  • 实践出真知

    • 创建一个飞书应用
    • 对接飞书Excel
    • 记账功能对接到飞书机器人

核心逻辑

1、通过关键词触发机器人记账,比如/fs 支出 微信 18 午饭,其中/fs 为触发关键词,后面的四项分别是:类型、支付渠道、金额、备注。

2、机器人识别到关键词,调用飞书记账功能函数,在该函数中对收到内容进行解析,并调用飞书文档接口,将内容写入飞书文档。

3、机器人判断飞书文档写入结果,写入成功则返回记录成功+文档地址;写入失败则返回记录失败+错误信息。

微信效果:

飞书效果:

实践出真知

首先你需要登录飞书APP创建一个企业,这个过程很简单,手机下载飞书APP即可,我这里就不贴图了。

创建一个飞书应用

前提:你已经有了一个飞书帐号,并创建了一个个人企业。

飞书开放平台地址:open.feishu.cn/app/

访问 飞书开放平台,点击创建企业自建应用,输入应用相关信息即可。

创建成功后,在凭证与基础信息中可以看到应用的 App IDApp Secret,后面有用。

点击左侧的添加应用能力,点击添加机器人功能。

没添加这个后面调用会出现如下错误:

点击左侧的权限管理,搜索电子表格,将相关的两个权限勾选开通。

再搜索消息,开通发送接收消息权限,如下图:

再搜索获取用户 user ID,开通获取用户 user_id 权限,如下图:

点击确定并前往创建应用版本

在版本创建页面点击创建版本,然后根据提示输入版本号、更新说明、申请理由即可。

应用管理后台:xxxxx.feishu.cn/admin/appCe…
xxxxx 改成自己的飞书主页域名前缀

访问上面应用管理后台地址,审核通过即可。

对接飞书Excel

首先在飞书文档里创建一个 Excel,获取到Excel 链接,格式如下:

https://xxxxxx.feishu.cn/sheets/PQV*****************Uh?sheet=k****Y

其中PQV*****************Uh是spreadsheetToken,k****Y表格名称,用于锁定具体工作表。

本案例我们使用飞书追加数据接口:open.feishu.cn/document/se…

其中请求参数中 Authorization 获取方法如下:

import requests
import jsondef get_access_token():url= "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/" # 应用凭证里的 app id 和 app secret  post_data = {"app_id": "cli_xxxxxxxx", "app_secret": "8xxxxxxxxxxxxxxxxxxk"}r = requests.post(url, data=post_data)access_token = r.json()["tenant_access_token"] return access_tokenheader = {"Content-Type": "application/json; charset=utf-8", "Authorization": f"Bearer {get_access_token()}"}
请求测试
# 记得换成自己的信息
spreadsheetToken = "Pxxxxxxxxxxxxh"
sheetId = "lxxxxV"
data_raw = {"valueRange": {"range": f"{sheetId}!A1:E3","values": [["2023/12/25","收入","微信","100","帐号 老表max"],["2023/12/25","支出","支付宝","10","买东西 老表max"],["2023/12/26","支出","支付宝","19.9","买东西 老表max"],]}
}
url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{spreadsheetToken}/values_append"    r2 = requests.post(url, data=json.dumps(data_raw), headers=header)  #请求写入
print( r2.json()["msg"])  #输出来判断写入是否成功

结果:

记账功能对接到飞书机器人

开通消息事件,接收消息

如果你想对接到飞书,得有一个云服务器用来接收用户发给飞书机器人的消息,并返回处理后的结果给飞书用户。

或者本地部署,然后内网穿透方法也行(不是长久之计)。

开通消息事件之前,需要先在服务器部署一个简单 web 服务用于接收消息,如下图,没啥特别要求,用 flask 快速写一个简单的代码,如下,

from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/func', methods=['POST'])
def all_func():try:data = request.json  # 解析收到的 JSON 数据print(data)if data:# 原样返回数据return jsonify(data)else:return "Missing data", 400except Exception as e:return str(e), 500if __name__ == '__main__':app.run(debug=True, port=8003, host="0.0.0.0")

将上面代码写入服务器的 feishu.py 文件,然后运行python feishu.py 即可,

默认配置链接为:http://你的服务器公网IP:8003/func

然后在飞书管理后台,事件与回调页面配置验证接口是否OK,没问题点保存即可。

然后点击添加事件,搜索接收消息,添加对应事件。

点击开启获取用户发给机器人的单聊消息获取用户在群组中@机器人的消息权限。

然后发布一个新版本。

这时我们从飞书发送消息给机器人,我们就可以在服务器获取到对应消息了。

飞书:

服务器:

飞书主动回复用户实现

在前面实践部分,我们已经开通过了接收消息权限,这里直接上请求代码。

'''
发送消息
doc-link https://open.feishu.cn/document/server-docs/im-v1/message/create
接口限制:1000 次/分钟、50 次/秒receive_id_type值:
- 私聊 user_id 
- 群聊 chat_idmsg_type: 
doc-link https://open.feishu.cn/document/server-docs/im-v1/message-content-description/create_json'''
def fs_send_msg(headers, post_data, receive_id_type):url= f"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type={receive_id_type}"  r = requests.post(url, headers=headers, data=json.dumps(post_data))result = r.json()return result

测试请求:

# 这里 user_id 可以怎么获取?
# 在前面`消息事件`返回结果里面有,可以从里面获取
receive_id_type = "user_id"
receive_id = "xxxxx"
msg_type = "text"
content = "{\"text\": \"你好\"}"post_data = {"receive_id": receive_id,"msg_type": msg_type,"content": content,# "uuid": "选填,每次调用前请更换,如a0d69e20-1dd1-458b-k525-dfeca4015204"}
result = fs_send_msg(headers, post_data, receive_id_type)

结果: 飞书:

整合代码实现自动记账

逻辑思路:

实现效果:

整合代码较多,源码已分享到 Github,项目地址:github.com/XksA-me/Sim…

对接到微信

通过前面操作,我们已经完成了Python代码和飞书的对接,将该功能加入到机器人就比较简单了。

流程我已经在文章最开头分享了,大家可以根据需要去实践,至于如何开发机器人,大家可以github搜索下相关项目。后面也会将相关实现更新到开源项目中,欢迎关注支持。

哈喽,大家好,看到这里你真是太帅太美了,快快动手吧!

我是老表,学 Python 编程,找老表就对了。

老表写教程,就是要写的小白也能懂!有问题,快来评论区 up up up~ (打亢奋素式学习法)

本文转自 https://juejin.cn/post/7340093152861159424,如有侵权,请联系删除。

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录第天 78.子集 90.子集II

LeetCode 78 子集 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&…

LeetCode 2581.统计可能的树根数目:换根DP(树形DP)

【LetMeFly】2581.统计可能的树根数目:换根DP(树形DP) 力扣题目链接:https://leetcode.cn/problems/count-number-of-possible-root-nodes/ Alice 有一棵 n 个节点的树,节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges…

debian/ubuntu 编译安装nginx php

debian/ubuntu 编译安装nginx php tar -zxvf nginx-1.9.9.tar.gz apt-get install libpcre3 libpcre3-dev ./configure --prefix/work/nginx-1.9.9 --with-pcre make make install service iptables stop #关闭防火墙, 可能不需要 修改nginx运行用户为tboqi 抱着log目录可…

【通信基础知识】完整通信系统的流程图及各模块功能详解

2024.2.29 抱歉最近在写毕设大论文,因此没有太多时间更新。然而,在写论文的过程中,发现自己对通信系统的了解还不够全明白,因此差了一些硕博论文总结了一个完整的通信系统流程图。若有不对的地方请多多指正//部分内容有参考ChatGP…

【Elasticsearch管理】网络配置

文章目录 HTTP高级网络设置高级TCP设置 TransportTCP传输概要文件Transport跟踪 线程池fixed线程池fixed_auto_queue_sizescaling处理器设置 HTTP Elasticsearch只在默认情况下绑定到本地主机。对于运行本地开发服务器(如果在同一台机器上启动多个节点,甚至可以运行…

YOLOv7基础 | 第2种方式:简化网络结构之yolov7.yaml(由104层简化为30层)

前言:Hello大家好,我是小哥谈。通过下载YOLOv7源码可知,原始的yolov7.yaml文件是拆开写的,比较混乱,也不好理解,并且为后续改进增添了很多困难。基于此种情况,笔者就给大家介绍一种将yolov7.yaml文件简化的方法,将104层简化为30层,并且参数量和计算量和原来是一致的,…

内存占用构造方法

#使用虚拟内存构造内存消耗 mkdir /tmp/memory mount -t tmpfs -o size5G tmpfs /tmp/memory dd if/dev/zero of/tmp/memory/block #释放消耗的虚拟内存 rm -rf /tmp/memory/block umount /tmp/memory rmdir /tmp/memory #内存占用可直接在/dev/shm目录下写文件

《极客时间 - 左耳听风》【文章笔记个人思考】

《极客时间 - 左耳听风》原文链接:https://time.geekbang.org/column/intro/100002201?tabcatalog 10 | 如何成为一个大家愿意追随的Leader? 10 | 如何成为一个大家愿意追随的Leader? 这里的Leader是在技术上取得优势,而不是行政…

2024年2月个人工作生活总结

本文为 2024年2月工作生活总结。 研发编码 一些警告修正记录 这个月修正了个人所负责的工程警告,这些警告其实是前人的代码遗留的,我续写的代码,除printf函数的%d、%ld格式,都在写的过程中改了。 下面记录一些典型的警告及应对…

NLP(一)——概述

参考书: 《speech and language processing》《统计自然语言处理》 宗成庆 语言是思维的载体,自然语言处理相比其他信号较为特别 word2vec用到c语言 Question 预训练语言模型和其他模型的区别? 预训练模型是指在大规模数据上进行预训练的模型,通常…

测试环境搭建整套大数据系统(七:集群搭建kafka(2.13)+flink(1.13.6)+dinky(0.6)+iceberg)

一:搭建kafka。 1. 三台机器执行以下命令。 cd /opt wget wget https://dlcdn.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz tar zxvf kafka_2.13-3.6.1.tgz cd kafka_2.13-3.6.1/config vim server.properties修改以下俩内容 1.三台机器分别给予各自的broker_id…

git操作学习记录,简单易上手

配置git 的账户邮箱 $ git config --global user.name "Firstname Lastname" $ git config --global user.email "your_emailexample.com"代码回溯 git rest --hard [commit哈希值]git log命令只能查看以当前状态为终点的历史日志 git reflog命令&#x…

Python+neo4j构建豆瓣电影知识图谱

文章目录 数据来源数据整理导入节点和关系导入使用Subgraph批量导入节点和关系 多标签实体和实体去重 数据来源 http://www.openkg.cn/dataset/douban-movie-kg 该网址拥有丰富的中文知识图谱数据集,OpenKG(Open Knowledge Graph),可供研究人员使用研究…

【golang】25、图片操作

用 “github.com/fogleman/gg” 可以画线, 框 用 “github.com/disintegration/imaging” 可以变换颜色 一、渲染 1.1 框和字 import "github.com/fogleman/gg"func DrawRectangles(inPath string, cRects []ColorTextRect, fnImgNameChange FnImgNameChange) (st…

Python爬虫——Urllib库-3

目录 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 获取豆瓣电影前十页的数据 ajax的post请求 总结 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 首先可以在浏览器找到发送数据的接口 那么我们的url就可以在header中找到了 再加上UA这个header 进行请…

Facebook的元宇宙实践:数字化社交的新前景

近年来,元宇宙(Metaverse)这一概念备受瞩目,被认为是数字化社交的未来趋势之一。而在众多科技巨头中,Facebook(现更名为Meta)一直处于元宇宙发展的前沿。在本文中,我们将深入探讨Fac…

万字带你走过数据库的这激荡的三年

本文收集了卡内基梅隆大学计算机科学系数据库学副教授 Andy Pavlo 从 2021 到 2023 连续三年对数据库领域的回顾,希望通过连续三年的回顾让你对数据库领域的技术发展有所了解。 关于 Andy Pavlo:卡内基梅隆大学计算机科学系数据库学副教授,数…

vuepress项目侧边栏菜单配置使用

第一种菜单配置,自定义菜单名称 {text: 菜单名称,// 是否折叠collapsible: true,children: [{text: "自定义md菜单名称",sidebarDepth: 2,link: "/xxx/aa.md",children: [],}],},第二种菜单配置 标题自动生成菜单,使用需要搭配sideb…

c语言求矩阵的局部极大值

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。 输入格式: 输入在第一行中给出矩阵A的行数M和列数N(3≤…

C语言创建结构体时 什么时候需要C++引用 什么情况下下不需要引用

在C语言中,结构体通常通过传递指针来实现对结构体的修改。当在函数中需要修改结构体的内容,并且希望这些修改在调用函数后仍然保持,可以考虑使用指针。引用是C中的一种特殊机制,用于更方便地传递参数,但在纯粹的C语言中…