跳转到主要内容

Wayslack机器:使用Slack团队导出格式,增量归档Slack消息和文件

项目描述

The Wayslack Machine

Wayslack机器:使用Slack的“归档”导出格式,增量归档Slack团队并删除旧文件。

Wayslack还可以从Slack中删除旧文件,为免费层的用户提供更多存储空间。请参阅 delete_old_files 选项。

入门

  1. 安装 wayslack

    $ pip install wayslack
  2. (可选) 导出您的团队历史并解压: https://get.slack.help/hc/en-us/articles/201658943-Export-your-team-s-Slack-history

  3. 从: https://api.slack.com/custom-integrations/legacy-tokens 获取旧令牌

  4. 运行 wayslack path/to/export/directory 创建归档(如果尚不存在),然后下载所有消息和文件

    $ wayslack my-export/
    API token for my-export/ (see https://api.slack.com/custom-integrations/legacy-tokens): xoxp-1234-abcd
    Processing: my-export/
    Downloading https://.../image.jpg
    #general: 10 new messages in #general (saving to my-export/_channel-C049V24HY/2016-12-19.json)
    $ ls my-export/_files/
    ...
    https%3A%2F%2F...%2Fimage.jpg
  5. 可选地,创建一个配置文件,以便轻松归档多个团队

    $ cat ~/.wayslack/config.yaml
    ---
    archives:
      - dir: path/to/slack/first-export # path is relative to this file
        # Get token from: https://api.slack.com/custom-integrations/legacy-tokens
        token: xoxp-1234-abcd
        # Delete files from Slack if they're more than 60 days old (useful for
        # free Slack channels which have a file limit).
        # Files will only be deleted from Slack if:
        # - They exist in the archive (_files/storage/...)
        # - wayslack is run with --confirm-delete
        # Otherwise a message will be printed but files will not be deleted.
        delete_old_files: 60 days
      - dir: second-export
        token: xoxp-9876-wxyz
    
    $ wayslack
    Processing: first-export
    ...
    Processing: second-export
    ...

从Slack中删除旧文件

可以使用 delete_old_files 选项(以及 --confirm-delete 标志)从Slack中删除旧文件,释放团队的存储空间。

只有当使用 --confirm-delete 标志、文件存在于本地归档中,并且其大小与Slack API中报告的大小匹配时,才会删除文件。

注意:由于 Slack API 中的一个 bug,Slack API 报告的文件大小有时是不正确的。因为 Wayslack 不会在本地大小与远程大小不匹配时删除文件,所以在删除文件时几乎总是会产生一些警告(而且,显然,那些文件不会被删除)。

注意2:Slack 似乎会压缩 JPEG 文件,因此此检查不适用于 JPEG 文件。尽管如此,对于所有下载的文件,都会使用 etag 来验证下载文件没有损坏(即使它与最初上传的文件不相同)。

例如

$ wayslack --confirm-delete ~/.wayslack/your-archive/

将 Slack 消息导出到 SQL(PostgreSQL)

此存储库中还包括 wayslack2sql.py(尽管尚未包含在安装程序中),它可以将 Wayslack 归档导出到 PostgreSQL 数据库

$ pip install sqlalchemy
...
$ createdb wayslack
$ ./wayslack2sql.py postgres://localhost/wayslack ~/.wayslack/your-team

(注意:wayslack2sql.py 还未经过特别打磨)

模式很简单,与 Slack 的 JSON 格式非常接近

-- Channels (public, private, and IMs)
CREATE TABLE ws_channel (
    id VARCHAR(64) PRIMARY KEY NOT NULL, -- Slack channel ID
    kind VARCHAR(16), -- 'channel', 'im', or 'group'
    created TIMESTAMP WITHOUT TIME ZONE,
    creator VARCHAR(64), -- Slack creator ID
    members VARCHAR(64)[],
    name VARCHAR,
    purpose JSON,
    topic JSON,
    ..., -- See schema in wayslack2sql.py for all columns
    _original JSON,
)

-- Users
CREATE TABLE ws_user (
    id VARCHAR(64) PRIMARY KEY NOT NULL,
    name VARCHAR,
    real_name VARCHAR,
    ..., -- See schema in wayslack2sql.py for all columns
)

-- Files
CREATE TABLE ws_file (
    id VARCHAR(64) PRIMARY KEY NOT NULL,
    "user" VARCHAR(64), -- Slack ID
    title VARCHAR,
    name VARCHAR,
    size INTEGER, -- note: can be wrong sometimes
    mimetype VARCHAR,
    url_private VARCHAR,
    url_private_download VARCHAR,
    ..., -- See schema in wayslack2sql.py for all columns
    _wayslack_deleted BOOLEAN, -- If Wayslack has deleted this file from Slack
    _original JSON,
)

-- Messages
CREATE TABLE ws_msg (
    id SERIAL PRIMARY KEY NOT NULL, -- autoincrement integer primary key
    ts TIMESTAMP WITHOUT TIME ZONE,
    "user" VARCHAR(64),
    type VARCHAR(16),
    subtype VARCHAR(32),
    text VARCHAR,
    reactions JSON,
    attachments JSON,
    ..., -- See schema in wayslack2sql.py for all columns
    _original JSON,
)

例如,要查看发送最多消息的人,请使用

with mc as (
    select
        "user",
        sum(length(to_tsvector(text))) as word_count,
        count(*) as msg_count
    from ws_msg
    group by "user"
),
report as (
    select
        name,
        word_count,
        msg_count,
        round((word_count / msg_count::numeric), 2) as words_per_msg
    from mc
    join ws_user as u on u.id = mc."user"
    order by msg_count desc
)
select *
from report

返回

wayslack=# ...;
     name      | word_count | msg_count | words_per_msg
---------------+------------+-----------+---------------
 jane          |      34432 |      7489 |          4.60
 wolever       |      22871 |      4787 |          4.78
 alex          |      19977 |      4346 |          4.60
 smith         |      12090 |      2132 |          5.67
 luke          |      10099 |      1852 |          5.45
 ...

提示:pg-histogram 对于可视化这些数据特别有用。

不成熟警告

警告:wayslack 仍然相对不成熟,并未完全经过测试。目前,它将存档

  • 公开消息

  • 私有群组

  • 私有消息

  • 所有上传的文件

  • 所有链接预览

  • 频道列表

  • 用户列表

  • 文件

但是,对于拥有 100 个以上用户或频道的团队,它可能会非常慢,没有任何配置选项,并且可能会随着时间的推移发现一些 bug。

项目详情


下载文件

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

源分发

wayslack-0.3.1.tar.gz (18.7 KB 查看哈希值

上传时间

构建分发

wayslack-0.3.1-py2-none-any.whl (21.1 KB 查看哈希值

上传时间 Python 2

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面