この記事で分かること
- Confluenceを操作する仕組みが分かる
- PythonプログラムでConfluenceを操作する方法が分かる
PythonでConfluenceを操作する概要
今回の記事では、Confluence REST APIを利用して、Confluenceページの作成や、ページコンテンツの読み取りなど、ConfluenceをPythonで操作する方法を解説します。PythonでConfluenceを使う為には、PythonのコードからConfluenceのREST APIを呼べば終了です。
しかし、ConfluenceのRESTAPIではGETとPOSTで呼ぶことできる機能APIが異なります。なので、やりたい処理に合わせてGETリクエストとPOSTリクエストを呼び分ける必要があります。下の表のように、Confluenceを操作する機能はそれぞれGETとPOSTという具合に呼び出し方が決まっています。
GET or POST | API名 | 機能 |
---|---|---|
POST | Create space | スペースを作る |
GET | Get user | ユーザー情報を取得する |
POST | Create content | ページを作成する |
GET | Get content by ID | ページ情報を取得する |
PythonでConfluenceを操作する前提の環境
Confluenceを操作する前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。
レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。
PythonでConfluenceを操作するサンプルプログラム
ここでは、実際にPythonでConfluenceを使う為サンプルプログラムを説明します。ユーザーの環境毎に設定が変わる部分は、個人で設定する必要がありますので、その点は注意してください。サンプルプログラムは次の順番で説明します。
- Confluenceを操作する為に必要なライブラリ
- Confluence REST APIへのGETメッセージ
- Confluence REST APIへのPOSTメッセージ
- 作成ページコンテンツの作成
- POSTリクエストの呼び出し
1.Confluenceを操作する為に必要なライブラリ
PythonでConfluenceを使う為に、私は下記の3つのライブラリを準備しました。その他のやり方もありますが、ここでは下記3つのPythonライブラリを用いた方法で解説します。
import base64
import urllib2
import json
2.Confluence REST APIへのGETメッセージ
こちらはConfluence REST APIにGETリクエストを送信する方法を説明しています。基本的な処理の流れは、base64でエンコードしたヘッダー情報にして、 urllib2のRequestメソッドを呼ぶだけです。関数「get_input_param」はConfluenceユーザー名とパスワードをユーザーに問い合わせ、取得するメソッドです。ユーザー名とパスワードの取得方法は、お持ちの環境に合わせて選んでください。
def GetConfluenceRespGET(url):
user,passwd,input_result = get_input_param()
page = ''
if input_result is "OK":
headers = {
'Content-Type': 'application/json'
}
auth = user + ':' + passwd
auth_b64 = base64.encodestring(auth.encode("utf8")).decode("ascii")[:-1]
# need to remove '\n' by [:-1]
headers['Authorization'] = 'Basic ' + auth_b64
resp = ''
req = urllib2.Request(url=url, headers=headers)
res = urllib2.urlopen(req)
resp = res.read().decode("utf-8")
res.close()
page = json.loads(resp)
else:
print('Wrong confluence account')
return page
3.Confluence REST APIへのPOSTメッセージ
こちらはConfluence REST APIにPOSTリクエストを送信する方法です。上記と同様に、base64でエンコードしたヘッダー情報にして、 urllib2のRequestメソッドを呼ぶだけです。
関数「get_input_param」でConfluenceユーザー名とパスワードを取得していますが、これはそれぞれの環境に合わせて取得してください。
def GetConfluenceRespPOST(url, obj):
user,passwd,input_result = get_input_param()
page = ''
if input_result is "OK":
headers = {
'Content-Type': 'application/json'
}
auth = user + ':' + passwd
auth_b64 = base64.encodestring(auth.encode("utf8")).decode("ascii")[:-1]
# [:-1]で'\n'を削除する必要がある
headers['Authorization'] = 'Basic ' + auth_b64
body_data = json.dumps(obj).encode("utf-8")
resp = ''
req = urllib2.Request(url=url, data=body_data,headers=headers)
res = urllib2.urlopen(req)
resp = res.read().decode("utf-8")
page = json.loads(resp)
else:
print('Wrong confluence account')
return page
4.作成ページコンテンツの作成
次に関数「create_confluence_page_data」を定義します。ConflueneページのコンテンツをpayloadというJSON形式で返却する関数になります「payload」 に必要な値を入れて、これから作成するページの情報を作成します。
def create_confluence_page_data(title,ancestors_id,space,page_contents):
payload = {
"type":"page",
"title":title,
"ancestors":[{"id":ancestors_id}],
"space":{"key":space},
"body":{
"storage":{
"value" : page_contents,
"representation":"storage"
}
}
}
return payload
5.POSTリクエストの呼び出し
こちらはメインからの上記で定義した、Confluenceページコンテンツを作成し、POSTリクエストによってConfluence REST APIにページ作成依頼する一連の流れになります。関数「get_confluence_baseurl」にてConfluenceのURLを取得していますが、これはそれぞれの環境に合わせて入力してください。
関数「create_confluence_page_data」のそれぞれの引数の意味は下記の通りです。
- 「title」はページのタイトルです。
- 「ancestors_id」は、親のページが存在する場合、その親ページのIDです。
- 「space」はスペース名です。
- 「page_contents」は作成するHTML形式のページデータです。
if __name__ == '__main__':
url = get_confluence_baseurl()
obj = create_confluence_page_data(title=title,ancestors_id=ancestors_id,space=space,page_contents=page_contents)
res = GetConfluenceRespPOST(url=url,obj=obj)
Pythonで業務効率化するその他の方法
今回の記事では、ConfluenceRESTAPIを利用して、Confluenceページの作成や、ページコンテンツの読み取りなど、ConfluenceをPythonで操作する方法を解説しました。
Confluence以外にも、Pythonには、業務効率化できる手段がたくさんあります。
下記の記事に、Confluence以外に、普段オフィス環境で使われるツールを使って業務効率化できる方法をまとめていますので、合わせて読んでください。