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

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

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

サーバーワークスでは、プロジェクト管理ツールとして「Backlog」を使っています。
https://backlog.com/ja/
前回は、PythonスクリプトでBacklog Wikiのページを追加する記事を書きました。
【Backlog API】PythonスクリプトでBacklog Wikiのページを追加する

今回は、PythonスクリプトでBacklog APIを使って、Wikiのページ(記事)を更新します。
先日の この記事 のスクリプトをちょいと改造して、セキュリティグループごとにルール一覧をMarkdown形式のファイルとして出力させたのですが、
それをまとめたWikiを、今度は更新するのが想定されるユースケースです。


準備

前回(追加の話)と同じ記載のため、追加の話で知っている部分は読み飛ばしてください。
Backlog APIキーを取得しておきます。

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

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


さらに、更新するページのWikiIDを取得します。
ページの「Wikiの短いURLをクリップボードにコピーします」ボタンをクリックして、
テキストエディタ等に貼り付けてURLを確認すると、URLの/wiki/の次に数字の列があります。
この値がWikiIDと同一です。

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

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


サンプルスクリプト

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

※ 毎度の注意点

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

実行環境

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

backlog-upd-wikipage.py

#!/usr/bin/env python
  
#####
# Backlog Wikiページ更新ツール (Backlog API v2 使用)
#
# 引数:Wiki ID, 更新内容を記載したファイル名
#####
 
import requests
import sys
import os
 
### ###
ppapiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'   # xxxx...xxxにBacklogのAPIキーを記載します
url = "https://xxxxx.backlog.jp/api/v2/wikis"   # xxxxxをBacklog の スペースURLになるように書き換えます
### ###
 
# 引数よりWiki IDとファイル名を取得
args = sys.argv
strWikiid = 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()
 
# WikiIDをくっつける
strUrl = url + strWikiid
 
# Set the API endpoint
# パラメーター:APIキー, 更新内容
payload = {
        'apiKey': ppapiKey,
        'content': filedata,
}
 
r = requests.patch(strUrl, params=payload)
print(r.text) # レスポンスを出力(ここはお好みで)

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

実行環境が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-2.md

# hoge-xxx-sg

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


## インバウンド

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


## アウトバウンド

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

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

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

python backlog-upd-wikipage.py 1234567890 hoge-xxx-sg-2.md

Wikiのページが更新されます。
追記や一部更新ではなく、ページが丸ごと入れ替わってしまうのでご注意ください。

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

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

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

Wikiページ情報の更新

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

それでは、楽しいBacklogライフを! f:id:swx-kenichi-ito:20201112213228p:plain

伊藤K (記事一覧)

SRE部

おっさんエンジニア。

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

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