Skip to main content

Singer.io tap 用于从 Slack Web API 中提取数据 - PipelineWise 兼容

项目描述

pipelinewise-tap-slack

PyPI 版本 PyPI - Python 版本 执照:麻省理工学院

Singer tap 从Slack工作区中提取数据并按照Singer 规范生成 JSON 格式的数据。

这是一个PipelineWise兼容的水龙头连接器。

如何使用它

运行此水龙头的推荐方法是从PipelineWise使用它。从 PipelineWise 运行它时,您无需使用 JSON 文件配置此分流器,并且大部分操作都是自动化的。请查看Tap Slack的相关文档

如果您想独立运行此Singer Tap ,请进一步阅读。

安装

强烈建议安装tap-slack在它自己的隔离虚拟环境中。例如:

python3 -m venv ~/.venvs/tap-slack
source ~/.venvs/tap-slack/bin/activate
pip3 install tap-slack
deactivate

设置

点击需要Slack API 令牌才能与您的 Slack 工作区交互。您可以通过在您的工作区中创建一个新的Slack 应用程序并为其分配相关范围来获取单个工作区的令牌。截至目前,此应用程序的最低要求范围是:

  • channels:history
  • channels:join
  • channels:read
  • files:read
  • groups:read
  • links:read
  • reactions:read
  • remote_files:read
  • remote_files:write
  • team:read
  • usergroups:read
  • users.profile:read
  • users:read
  • users:read.email仅当您还想提取用户电子邮件时才需要此范围。

创建一个包含 API 令牌和开始日期的配置文件,例如:

{
  "token":"xxxx",
  "start_date":"2020-05-01T00:00:00"
}

私人频道

或者,您还可以通过将以下内容添加到配置中来指定是否要同步私人频道:

    "private_channels":"false"

默认情况下,将同步私人频道。

加入公共频道

通过将以下内容添加到您的配置文件中,您可以让点击自动加入您的 ogranziation 中的所有公共频道。

"join_public_channels":"true"

如果您不选择让水龙头加入所有公共频道,则必须邀请机器人加入您希望同步的所有频道。

指定要同步的频道

默认情况下,点击会同步它被邀请的所有频道。但是,您可以通过将它们的 ID 添加到配置文件中来限制点击以仅同步您指定的频道,例如:

"channels":[
    "abc123",
    "def345"
  ]

请注意,这需要是通道 ID,而不是名称,这是 Slack API 推荐的。要获取频道的 ID,请使用 Slack API 或在 URL 中找到它

存档频道

您可以通过在点击配置中包含以下内容来控制点击是否会同步存档频道:

  "exclude_archived": "false"

请务必注意,机器人无法加入存档频道,因此除非在存档之前将机器人添加到频道,否则它将无法从该频道同步数据。

日期窗口

由于在同步某些流(消息、文件、线程)时可能存在大量数据,因此此点击实现基于配置参数的日期窗口。

包含

"date_window_size": "5"

将导致水龙头为适用的流同步每个请求 5 天的数据。如果未定义,则默认值为一次窗口请求 7 天。

用法

建议在单独运行 Tap或使用 Singer 目标时遵循 Singer最佳实践

在实践中,它将如下所示:

~/.venvs/tap-slack/bin/tap-slack --config slack.config.json --catalog catalog.json | ~/.venvs/target-stitch/bin/target-stitch --config stitch.config.json

复制

Slack Conversations API 本身不会存储有关对话的最后更新时间戳信息。此外,对话记录是可变的。因此,tap-slack需要一种FULL_TABLE复制策略来确保在复制以下流时复制最新的数据:

  • Channels(对话)
  • Channel Members(对话成员)

Users确实存储有关用户记录上次更新时间的信息,因此tap-slack使用该时间戳作为书签值并更喜欢使用INCREMENTAL复制策略。

表模式

频道(对话)

  • 表名:channels
  • 描述:
  • 主键列:id
  • 复制策略:FULL_TABLE
  • API 文档:链接

频道成员(对话成员)

  • 表名:channel_members
  • 描述:
  • 主键列:channel_id,user_id
  • 复制策略:FULL_TABLE
  • API 文档:链接

消息(对话历史记录)

  • 表名:messages
  • 描述:
  • 主键列:channel_id,ts
  • 复制策略:INCREMENTAL
  • API 文档:链接

用户

  • 表名:users
  • 描述:
  • 主键列:id
  • 复制策略:INCREMENTAL
  • API 文档:链接

主题(对话回复)

  • 表名:threads
  • 描述:
  • 主键列:channel_id, ts,thread_ts
  • 复制策略:FULL_TABLE针对每个父母message
  • API 文档:链接

用户组

  • 表名:user_groups
  • 描述:
  • 主键列:id
  • 复制策略:FULL_TABLE
  • API 文档:链接

文件

  • 表名:files
  • 描述:
  • 主键列:id
  • 复制策略:INCREMENTAL使用日期窗口和回溯窗口过滤查询
  • API 文档:链接

远程文件

  • 表名:remote_files
  • 描述:
  • 主键列:id
  • 复制策略:INCREMENTAL使用日期窗口和回溯窗口过滤查询
  • API 文档:链接

测试水龙头

安装测试依赖

python3 -m venv venv
. venv/bin/activate
pip install --upgrade pip
pip install .[test]

运行测试:

pytest

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pipelinewise-tap-slack-1.1.0.tar.gz (14.8 kB 查看哈希)

已上传 source

内置分布

pipelinewise_tap_slack-1.1.0-py3-none-any.whl (29.9 kB 查看哈希

已上传 py3