【Backlog API】PythonスクリプトでBacklog Wikiのページを追加する

記事タイトルとURLをコピーする

エンジョイ Backlog!
サーバーワークス エンジニアの伊藤Kです。

サーバーワークスでは、プロジェクト管理ツールとして「Backlog」を使っています。
https://backlog.com/ja/
パステルグリーンに「b」だけ書かれているシンプルなアイコン、Goodですよね。

かつてはこのエンジニアブログでもBacklog APIを扱った記事もちらほら見かけたものですが、
ここのところすっかり鳴りを潜めております。
私も、1年半前に書いたのをすっかり忘れておりました。
【Backlog】課題のステータスを更新するスクリプト(Python)【API】

今日は、PythonスクリプトでBacklog APIを使って、Wikiのページ(記事)を追加します。
先日の この記事 のスクリプトをちょいと改造して、セキュリティグループごとにルール一覧をMarkdown形式のファイルとして出力させたのですが、
それをWikiにまとめるときに、セキュリティグループの数だけ手動で記事を作って、コピー貼り付けで編集していくのは手間だ、
ということで、スクリプトでWikiの記事を追加していきます。


準備

Backlog APIキーを取得しておきます。

スペースURLとプロジェクトIDも取得しておきます。
Webブラウザで、Wikiのページを追加したいプロジェクトの「課題一覧」を表示させます。
その状態でアドレスバーを確認すると、スペースURLとProjectIDが確認できます。(下図)

f:id:swx-kenichi-ito:20201112213018p:plain


サンプルスクリプト

サンプルスクリプトを掲載します。

※ 毎度の注意点

  • 本スクリプトを利用した結果に関して、本記事の筆者並びに著作権者は保証いたしません。 また、一切の責任も負いません。 ご自身の責任でご利用ください。
  • 「pythonで書くならもっといい書き方があるだろ」「変数名にセンスがない」などについては目をつぶってください。サンプルという位置づけで掲載いたしますので、使われる方がご自分のセンスでカスタマイズしていただけますと幸いです。

実行環境

  • 実行場所:自端末
  • OS:Windows 10
  • Pythonバージョン:3.7.1

backlog-add-wikipage.py

#!/usr/bin/env python
  
#####
# Backlog Wikiページ追加ツール (Backlog API v2 使用)
#
# 引数:ページ名, 更新内容を記載したファイル名
#####
 
import requests
import sys
import os
 
### ###
ppapiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'   # xxxx...xxxにBacklogのAPIキーを記載します
url = "https://xxxxx.backlog.jp/api/v2/wikis"   # xxxxxをBacklog の スペースURLになるように書き換えます
strProjectId = "xxxxxxxxxx"   # xxxxxxxxx にBacklog の プロジェクトIDを記載します
### ###
 
# 引数よりページ名とファイル名を取得
args = sys.argv
strPageNm = str(args[1])
strFileNm = str(args[2])
 
# ファイル存在確認
if os.path.isfile(strFileNm) == False:
    print('ファイルが存在しません')
    sys.exit()
 
# ファイルの中身を変数に格納
## Windows環境のため、ファイルの文字コードで使い分ける
rdf = open(strFileNm,'r',encoding="shift_jis") # Shift-Jis の場合
# rdf = open(strFileNm,'r',encoding="utf-8_sig") # UTF-8 の場合
 
filedata = rdf.read()
rdf.close()
 
# Set the API endpoint
# パラメーター:APIキー, 更新内容
payload = {
        'apiKey': ppapiKey,
        'projectId': strProjectId,
        'name': strPageNm,
        'content': filedata,
        'mailNotify': 'false',
}
 
r = requests.post(url, params=payload)
print(r.text) # レスポンスを出力(ここはお好みで)

実行ですが、まずはスクリプトをテキストエディタ等で開き、以下を書き換えます。
 ・BacklogのAPIキー
 ・Backlog の スペースURL
 ・該当の プロジェクトID

実行環境がWindows環境の場合、文字コードにも注意が必要です。「Wikiページの内容を記したファイル」の文字コードをもとに、
以下の部分のいずれかをコメント行、もう一方を非コメント行(実行される行)とします。

## Windows環境のため、ファイルの文字コードで使い分ける
rdf = open(strFileNm,'r',encoding="shift_jis") # Shift-Jis の場合
# rdf = open(strFileNm,'r',encoding="utf-8_sig") # UTF-8 の場合

「Wikiページの内容を記したファイル」のサンプルは以下の内容とします。

hoge-xxx-sg.md

# hoge-xxx-sg

| セキュリティグループ名 | GroupID | VpcId | 説明 |
| --- | --- | --- | --- |
| hoge-xxx-sg | sg-0xxxxxxxxxxxxxxxd | vpc-0xxxxxxxxxxxxxxxd | for ssh |


## インバウンド

| プロトコル | FromPort | ToPort | ソース(IP CIDR or SGID) | 説明 |
| --- | --- | --- | --- | --- |
| tcp | 22 | 22 | 192.168.0.0/24 | ssh from client subnet |
| icmp | -1 | -1 | 192.168.0.0/16 | Ping from Intranet |


## アウトバウンド

| プロトコル | FromPort | ToPort | 宛先(IP CIDR or SGID) | 説明 |
| --- | --- | --- | --- | --- |
| all | all | all | 0.0.0.0/0 | outbound all |

書き換えが完了したスクリプトファイルと、Wikiページの内容を記したファイルを同じフォルダ内に格納します。

pythonスクリプトを、「Wikiのページ名」「Wikiページの内容を記したファイル名」の2つを引数とし、実行します。

python backlog-add-wikipage.py hoge-xxx-sgのルール一覧 hoge-xxx-sg.md

Wikiのページが作成されています。

f:id:swx-kenichi-ito:20201112213203p:plain

複数ページを一度に作成する場合は、上記実行コマンドをバッチファイルにして実行するとよいでしょう。

参照したBacklog APIのドキュメント

Wikiページの追加

メソッドはPOSTなので、 requests.post(url, params=payload) を使っています。

それでは、楽しいBacklogライフを!

f:id:swx-kenichi-ito:20201112213228p:plain

伊藤K (記事一覧)

SRE部

おっさんエンジニア。

甘いお菓子が大好きですが、体重にDirect Connectなので控えています。

「エンジョイ AWS」を合言葉に、AWSを楽しむことを心がけています。