Python + Websocket 实时获取更新数据的一些心得和感受

有时, 当我们在页面上对一个 Base 表格进行编辑,进行添加行, 修改行等操作时, 需要获取当前操作行的一些信息, 尤其是当前行的数据。并且拿到该数据进行一些额外的处理, 如实时对接第三方系统,发送邮件,或者微信等。 这些我们目前可以在自动化规则中进行有效的实现。 而在这里, 我使用了一种 python + websocket技术, 能够对正在编辑的表格数据处理地更加灵活, 对像我们这些有点儿编程基础的小伙伴们更加友好。利用 Websocket,你可以像 SeaTable 网页端一样实时获取 Base 的数据更新细节。

授权中开启 websocket

强大的是, SeaTableAPI 包中已经可以支持通过websocket来获取表格数据了,只需要在 Base 授权中开启 socket 的参数:with_socket_io,例如

from seatable_api import Base

server_url = 'https://cloud.seatable.cn'
api_token = 'c3c75dca2c369849455a39f4436147639cf02b2d'

base = Base(api_token, server_url)
base.auth(with_socket_io=True)

base.socketIO.wait()

当 Base 有数据更新时,命令行中将输出如下内容, 这其中包括, Socket连接信息, 当前的操作类型, 子表id, 行id,以及行的数据

2022-07-19 11:48:37.803956 [ SeaTable SocketIO connection established ]
2022-07-19 11:48:39.953150 [ SeaTable SocketIO on UPDATE_DTABLE ]
{"op_type":"insert_row","table_id":"0000","row_id":"YFK9bD1XReSuQ7WP1YYjMA","row_insert_position":"insert_below","row_data":{"_id":"RngJuRa0SMGXyiA-SHDiAw","_participants":[],"_creator":"seatable@seatable.com","_ctime":"","_last_modifier":"seatable@seatable.com","_mtime":""},"links_data":{}}

获取数据更新,自定义后续的操作

通过监听和重写 UPDATE_DTABLE 事件,可以自定义后续的操作, 如下:

import json
from seatable_api import Base
from seatable_api.constants import UPDATE_DTABLE

server_url = 'https://cloud.seatable.cn'
api_token = 'c3c75dca2c369849455a39f4436147639cf02b2d'

# 自定义操作函数
def on_update(data, index, *args):
    try:
        operation = json.loads(data)
        print(operation)
        op_type = operation['op_type']
        table_id = operation['table_id']
        row_id = operation['row_id']
        row_data = operation['row_data']
        #  自定义行数据的处理逻辑
        print(row_data)
    except Exception as e:
        print(e)

base = Base(api_token, server_url)
base.auth(with_socket_io=True)

base.socketIO.on(UPDATE_DTABLE, on_update) # 监听到表格变化之后, 调用自定义处理函数
base.socketIO.wait()

以上是我使用 seatable_api 来实时获取 Base 操作的一些心得和体会, 希望可以帮助大家。

这个好,可以做实时前端数据检验