背景
BacklogのWikiを修正したいが、修正対象の文言が複数ページに渡って記載されている。
人力で1ページずつ更新するには量が多いため、APIを使用して一括で修正を適用したい。
APIキーの発行
APIを使用するにはAPIキーの発行が必要です。
個人設定のAPIタブ(****.backlog.jp/EditApiSettings.action)から新しいAPIキーを発行します。
実装
Python3で実装していきます。
使用ライブラリ
import requests
import json
import sys
ある文言が含まれるWikiのページIDと本文を取得する
def wiki_search():
params = {
"apiKey": BACKLOG_API_KEY,
"projectIdOrKey": BACKLOG_PROJECT_KEY,
"keyword": ORIGIN_KEYWORD
}
result = requests.get(BACKLOG_HOST + "/api/v2/wikis", params=params)
if "errors" in result.json():
print(u"ERROR: {}".format(result.json()["errors"][0]["message"]))
sys.exit()
if not len(result.json()):
print(u"INFO: \"置換元のキーワードは使われていません。\"")
sys.exit()
return {result.json()[i]["id"]: result.json()[i]["content"] for i in range(len(result.json()))}
本文に対し、文言置換を行う
def replace_contents(origin_contents):
update_contents = {}
for id, origin_content in origin_contents.items():
update_content = origin_content.replace(ORIGIN_KEYWORD, UPDATE_KEYWORD)
update_contents[id] = update_content
return update_contents
文言置換した内容でWikiを更新する
def wiki_update(update_contents):
for id, update_content in update_contents.items():
params = {
"apiKey": BACKLOG_API_KEY
}
data = {
"content": update_content
}
result = requests.patch(BACKLOG_HOST + "/api/v2/wikis/{}".format(id), params=params, data=data)
if "errors" in result.json():
print(u"ERROR: {}".format(result.json()["errors"][0]["message"]))
sys.exit()
print(u"{} を更新しました。".format(json.dumps(result.json()["name"], ensure_ascii=False)))
更新履歴
20/03/14 更新内容をparamsではなくdataに含めるよう修正