LoginSignup
3
6

More than 5 years have passed since last update.

Redminea APIとSlack APIをpythonで連携してみた

Last updated at Posted at 2018-11-14

概要

前回の記事( Docker環境でRedmineを立ち上げてslackと連携させてみた )ではプラグインを使用してRedmineとSlackの連携を行いましたが、
今回はSlack APIとRedmine APIを使用してpythonで連携する方法を紹介します。
自分でAPIを操れるようになると自由度が格段にあがります。

ざっくりとしたイメージとしては、SlackとRedmineをpythonが仲介しており、APIとライブラリがインターフェースを担っているような感じです。
[Slack] ⇔ Slack API ⇔ python-slackclient ⇔ [python] ⇔ python-redmine ⇔ Redmine API ⇔ [Redmine]

使用ライブラリ

事前準備

ここではあまり詳しく解説しません。検索すれば見つかると思うので他の記事をご参照ください。

Slack側の設定

  • Slack API( https://api.slack.com/apps )のサイトからSlack Appを作成し、認証設定(authorization)を行う
  • Slack APIの設定画面 > OAuth & Permissions から、OAuth Access Tokenを取得する

スクリーンショット 2018-11-14 23.44.35.png

Redmine側の設定

  • 管理者権限でRedmineにログインし、管理 > 設定 > API の画面で「RESTによるWebサービスを有効」にチェックして有効にする
  • 個人設定 > APIアクセスキーの画面で、 APIアクセスキーを取得する

スクリーンショット 2018-11-14 23.44.54.png

環境変数にトークンを設定する

トークンはコードにベタ書きでも使用できますが、環境変数に設定する方がセキュリティ面で安全です。
python-slackclientの公式ドキュメントではこの方法を推奨しています。

環境変数を設定する方法やコマンドはOSに合わせて適宜変えてください。
Linux,Macの場合

$ export SLACK_TOKEN='your token'
$ export REDMINE_TOKEN='your token'

WindowsのPowerShellの場合

> $env:REDMINE_TOKEN = 'your redmine token'

Windowsのコマンドプロンプトの場合

> set REDMINE_TOKEN=your redmine token

内容

Redmineから取得してきたチケットの情報を、Slackへ投稿します。

import os
from redminelib import Redmine
from slackclient import SlackClient

# 環境変数からトークンを取得
slack_token = os.environ["SLACK_TOKEN"]
redmine_token = os.environ["REDMINE_TOKEN"]

# クライアントインスタンスの作成
redminecliant = Redmine('http://your_redmine_url', key=redmine_token)
slackclient = SlackClient(slack_token)

# 投稿用パラメータを設定
channel = "general"
message = dir(redminecliant.issue.get(ticketNumber))

# 投稿
slackclient.api_call(
  "chat.postMessage",
  channel=channel,
  text=message
)

以下のようにSlackに投稿されれば成功です。

スクリーンショット 2018-11-14 23.53.47.png

Slack APIやRedmine APIはそれぞれ様々な関数が用意されているので、リファレンスなどをご参照ください。

最後に

何か間違いや不明な点があればご指摘ください。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6