65.9K
CodeProject 正在变化。 阅读更多。
Home

写入 Slack 频道 - Python 版

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (3投票s)

2018年12月28日

CPOL

6分钟阅读

viewsIcon

10693

downloadIcon

132

写入 Slack 频道 - Python 版

注意:本教程是 CodeProject 的 Slack API 挑战 的一部分。如果您还没有完成 入门文章 并创建您的 Slack 应用,请立即完成,因为本教程建立在第一篇文章的基础上。

在本文中,我们将创建一个简单的 Python 应用程序,该应用程序可以向 Slack 频道发送消息。如果您尚未完成本系列的第一篇教程,学习 Slack 的 API 并创建您的第一个工作区和应用程序,请先完成该教程。 

为了保持简单,我们将使用 Slack 的 Web API。这意味着我们只需发送 HTTP POST 请求即可向 Slack 频道发送消息。

入门

如果您尚未安装 Python,则需要 Python 3.6 或更高版本。尽管此代码可能适用于旧版本的 Python,但尚未经过测试。

要开始,我们需要将我们的应用程序安装到我们的 Slack 工作区中,这将为我们提供一个可以用于向工作区中的频道发布消息的访问令牌。首先,通过导航到 Slack API 应用页面,然后在出现的列表中点击您的应用程序,来找到您的应用程序的管理页面。

当您的应用程序管理页面加载时,点击左侧菜单中的“OAuth & Permissions”。此页面加载后,向下滚动到“Scopes”。在生成访问令牌之前,您需要添加至少一个作用域。这是有道理的,因为如果没有授权的作用域,您的应用程序将无法执行任何操作,而授予您执行任何操作的能力的访问令牌将毫无用处!

点击下拉框以查看可添加的作用域列表。您要查找的作用域是“Send messages as Super Amazing Test App”,但您会看到您为自己的应用程序指定的超级名字,而不是 Super Amazing Test App。它应该看起来像这样

scopes

添加此范围后,您就可以将应用程序安装到您的工作区中。滚动回“OAuth & Permissions”页面的顶部,您将看到一个可点击的友好的绿色按钮

app install button

点击它,您将被带到一个要求您授予应用程序访问您的工作区的屏幕。授权后,您的 OAuth & Permission 页面将包含一个访问令牌

access token

您将在那里看到您自己的访问令牌,而不是一个黑匣子。将此页面保留在浏览器标签页中,因为您很快就需要这个访问令牌。

现在我们有了所需的信息,可以继续编写使我们的应用程序正常工作的代码。

代码

现在来到有趣的部分了!

首先,打开终端或命令提示符,然后为您的应用程序创建一个新目录

mkdir slack-app

然后切换到新目录,并运行 npm init

cd slack-app
pip install requests

精明的读者会注意到,这会全局安装 requests 库。在较大的 Python 项目中,您会希望使用 pipenv 并将所有依赖项包含在应用程序目录中。但由于这是一个入门教程,因此我们保持简单。

这可能看起来有点令人失望。我的意思是,我们正在尝试创建一个超级棒的 Slack 应用,而我们只安装了一个包?这是怎么回事?!而且只会更糟!我们甚至不需要安装任何依赖项就可以向 Slack 频道发送消息!requests 库只是一个方便的 HTTP 客户端,可以使我们的生活更轻松。

现在,在文本编辑器中打开该目录。Visual Studio Code 是一个免费编辑器,可在 Windows、MacOS 和 Linux 上运行,如果您不确定使用什么,它是一个不错的选择。但是,如果您已经有偏好的 Python 编辑器,请继续使用它。

在您的 slack-app 目录中,创建一个名为 app.py 的新文件。将以下代码添加到 app.py

import requests
import json

url = "https://slack.com/api/chat.postMessage"
token = "your-token-goes-here"

我们目前还没有太多内容,但我们已经取得了一个好的开端!我们导入了 requestsjson 库,并定义了我们将使用的 URL 和访问令牌。还记得我们之前在工作区中安装应用程序时生成的访问令牌吗?这就是您应该替换 your-token-goes-here 的地方。

在实际的、生产就绪的应用程序中,您会将应用程序的密钥存储在更安全的地方;有些人喜欢将密钥保存在应用程序运行的服务器的环境变量中,而另一些人则使用 Kubernetes secrets 或 AWS secrets manager 等解决方案。

请记住不要将您的访问令牌提交到公共 GitHub 仓库,除非您希望全世界都知道它。在我们的例子中,唯一可能发生的事情是,全世界的巨魔都可以愉快地向我们的 Slack 工作区发布消息。这不会是巨大的安全漏洞,但会非常烦人。

接下来是什么?目前,我们的应用程序非常无聊,而且什么也做不了。所以,让我们编写一个函数来发送消息到 Slack!将以下代码添加到 app.py

headers = {
  "Content-Type": "application/json",
  "Authorization": "Bearer {0}".format(token)
}

def send_message(message_text):
  message = {
    "channel": "#general",
    "text": message_text
  }

  requests.post(url, headers=headers, data=json.dumps(message))

有了这块代码,我们就完成了整个 Slack API 消息发布器。每当您调用此函数并向其传递消息时,它都会将消息写入我们 Slack 工作区中的 #general 频道。

为了好玩,让我们再添加一段代码,以便我们可以看到我们的 Slack 消息发布器确实有效。

send_message("Hello from Python!");

在这里,我们只是调用我们友好的 send_message 函数,并要求它为我们发布一条消息。如果我们登录到我们的 Slack 工作区并检查 #general 频道,我们将看到我们的应用程序确实发布了我们的消息。

slack message

成为比赛参与者

如果您想加入竞赛参与者列表,还有一些额外的步骤需要遵循。首先,您需要找到您的 CodeProject 会员编号。您可以通过点击页面右上角的 CodeProject 用户名来找到它。我建议在新标签页中打开它。

一旦您在那里,您将在右侧看到一个包含您的头像的框。在此框的顶部,您将看到一个标签,例如“Member 123456789”。123456789 部分是您的 CodeProject 会员编号。

接下来,打开 app.py 并添加以下代码

def send_secret_message(secret_message):
  hash = 5381
  for x in secret_message:
    hash = (( hash << 5) + hash) + ord(x)

  send_message(hash & 0xFFFFFFFF)

send_secret_message('123456789')

123456789 替换为您的会员编号。完成此操作后,再次运行程序。如果您检查 Slack 工作区中的 #general 频道,您将看到一个数字代码已写入该频道。

获得代码后,您可以 在此处 输入。

我们都完成了!

就是这样!您已经编写了您的第一个 Slack API 应用程序。这很简单,不是吗?

现在是真正的好消息:您可以正式将“Slack API Developer”添加到您的 LinkedIn 个人资料中,并期待大量招聘人员的邮件,告诉您您是他们正在填补的职位的完美人选。

© . All rights reserved.