REST API で Confleunce(コンフルエンス) のページを生成(Server版)
2022年12月16日(2023年11月17日 更新)
樋口 晃 Akira Higuchi
Jira Softwareを導入検討されているお客様に商品説明をしていると、「他システム連携はできますか?」と良く聞かれます。
バッチ処理を定期的に実行して、レポートをConfluence のページに出力するなど連携が可能です。
今回は、Jira Server版をご利用の方向けに、Rest Remote APIを使ってConfluenceにページを作成する方法をご紹介します。
Confluence(サーバー版)のアトラシアンドキュメント
Confleunce (サーバー版)の REST API の詳細については、下記のAtlassian の下記ドキュメントを参照して下さい。
- Confluence REST API : https://docs.atlassian.com/atlassian-confluence/REST/latest/
- サンプル:https://developer.atlassian.com/confdev/confluence-rest-api/confluence-rest-api-examples
Python のサンプル
下記の Python を実行すると、ページが作れます。BASE_URL ~ AUTH は ご利用状況に応じて、変更して下さい。
Windows の Python 2.7.11 , Confluence 5.9 で動作確認をしました。
ページの検索
http://CONFLUENCE のサーバーURL /rest/api/content に GET メソッドで通信する事でページを検索できます。
パラメータにスペースキーと、タイトルを指定しているので該当するページが有れば、レスポンスの中のJSONデータに情報が格納されます。expand パラメータで version を指定すると、バージョン情報を取得できます。
JSON データの "size" 値から検索件数を、 "version"→ "number" からバージョン番号を取得しています。
ページの作成
http://CONFLUENCE のサーバーURL /rest/api/content に POST メソッドで通信する事で、ページを作成できます。
登録データはJSON 形式で送信し、"body" → "storage" → "value" の情報がページのコンテンツとして登録されます。
HTML の閉じタグが無いなど、エラーが有ると "HTTPステータス=400, Bad Request" が返されますので、ご注意下さい。
ページの更新
http://CONFLUENCE のサーバーURL /rest/api/content/ページID に PUT メソッドで通信する事でページを更新できます。
送信した JSON データの内容によりページが更新されます。
"version"→"number" の値は、新しい値を指定する必要が有ります。
#!/usr/bin/python # coding: utf-8 import requests import json from datetime import datetime BASE_URL="http://onfluence.local/wiki" SPACE_KEY="TST" PAGE_TITLE="Rest サンプル" AUTH=("user", "password") HEADERS = {"content-type":"application/json"} # ページの検索 # http://CONFLUENCEのサーバーURL/rest/api/content?title=タイトル&spaceKey=スペースキー にアクセスしてページを検索します # (HTTP メソッドは get ) def get_page_info(space_key, page_title): response = requests.get( BASE_URL + "/rest/api/content", auth=AUTH, params={"title":PAGE_TITLE, "spaceKey":SPACE_KEY, "expand":"version,history"}) #http ステータスのチェック response.raise_for_status() return response # ページの作成 # http://CONFLUENCEのサーバーURL/rest/api/content にアクセスしてページを作成します # (HTTP メソッドは post ) def create_page(): json_data = create_json_data() response = requests.post( BASE_URL + "/rest/api/content", auth=AUTH, data = json.dumps(json_data), headers=HEADERS) response.raise_for_status() return response # ページの更新 # http://CONFLUENCEのサーバーURL/rest/api/content/ページID にアクセスしてページを更新します # (HTTP メソッドは put ) def update_page(version_num, page_id): # バージョン情報を追加します。 json_data = create_json_data() json_data["version"] = {'number' : version_num} response = requests.put( BASE_URL + "/rest/api/content/" + page_id, auth=AUTH, data = json.dumps(json_data), headers=HEADERS) response.raise_for_status() return response # json データの生成 def create_json_data(): # page_text にページに設定したい文字列を入れて下さい。 page_text = "<h1>REAT API のサンプルです。</h1>\n \ <p>今の時刻です:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "</p>" payload = { "type":"page", "title":PAGE_TITLE, "space":{"key":SPACE_KEY}, "body":{ "storage":{ "value" : page_text, "representation":"storage" } } } return payload # main function if __name__ == "__main__": print "-------------- start --------------------" response = get_page_info(SPACE_KEY, PAGE_TITLE) response_data = json.loads(response.text) if response_data["size"] == 0: create_page() print "ページが無いので作成しました" else: result = response_data["results"][0] new_version_number = result["version"]["number"] + 1 page_id = result["id"] update_page(new_version_number, page_id) print "ページが有ったので更新しました (バージョン={0})".format(new_version_number) print "-------------- end ----------------------"
※Remote API の操作を繰り返し実行すると、Confluenceに負荷がかかる事が有ります。なぜなら、人間がブラウザーで操作するよりもプログラムの方が早いからです。大量のページ作成や大量のページ検索を実施すると、結果的に「負荷テスト」を実施しているような事になります。Remote API を利用する時ははサーバーの負荷にご注意下さい。
樋口 晃 Akira Higuchi
この記事を読んだ⼈におすすめのページ
本情報はブログを公開した時点の情報となります。
Software Collection
Jira Service Management
Customer Service Management
Assets
Rovo
Focus
Jira Align
Talent




2026年春、ベトナムで感じた「AI熱」とBiplusの本気度 ――ベトナムITイベントレポ
5,000名以上のエンタープライズで Jira / Confluenceを選ぶ理由 ― 情報ガバナンスとセキュリティを両立する Atlassian Guard活用術
モダン開発の落とし穴『認知負荷』の正体――。複雑なエンジニアリング環境を救うIDP (Compass)の価値を一般家庭に例える
SFA・Excel・データ整形の限界を突破!Workatoで予実管理を自動化する方法|月末の「あの作業」がなくなる