Python

【Python】Confluenceを操作する方法【→業務効率UP】

9月 26, 2019

プログラム女子
会社でConfluenceが導入されたんだけど、Pythonで業務効率を改善できるかことはあるかな...
ConfluenceのREST APIを使えば、Confluenceのページの作成や、ページコンテンツの読み取ったりすることができるよ。<br>今回はConfluenceの操作方法について説明するね。
Tommy

この記事で分かること

  • Confluenceを操作する仕組みが分かる
  • PythonプログラムでConfluenceを操作する方法が分かる

PythonでConfluenceを操作する概要

summary of controlling confluence on python

今回の記事では、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を操作する前提の環境

environment of controlling confluence on python

Confluenceを操作する前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

オススメ
how to check version in python
【Python】バージョン確認の方法【→プログラミング初心者向け】

続きを見る

レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

オススメ
how to programming on rental server
【Linux】レンタルサーバーでプログラミングする方法【→ブログのサーバーでできる!】

続きを見る

PythonでConfluenceを操作するサンプルプログラム

sample program of controlling confluence on python

ここでは、実際にPythonでConfluenceを使う為サンプルプログラムを説明します。ユーザーの環境毎に設定が変わる部分は、個人で設定する必要がありますので、その点は注意してください。サンプルプログラムは次の順番で説明します。

  1. Confluenceを操作する為に必要なライブラリ
  2. Confluence REST APIへのGETメッセージ
  3. Confluence REST APIへのPOSTメッセージ
  4. 作成ページコンテンツの作成
  5. POSTリクエストの呼び出し

1.Confluenceを操作する為に必要なライブラリ

PythonでConfluenceを使う為に、私は下記の3つのライブラリを準備しました。その他のやり方もありますが、ここでは下記3つのPythonライブラリを用いた方法で解説します。

import base64
import urllib2
import json

  1. ライブラリ「base64」をインポートする
  2. ライブラリ「urllib2」をインポートする
  3. ライブラリ「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

  1. 関数「GetConfluenceRespGET」を定義宣言する。
  2. 「user」「passwd」「input_result」 の3つの変数を関数「 get_input_param」からの戻り値で初期化する。
  3. 変数「input_result 」の値が文字列「OK」の場合は次の処理を実施する。
    1. 変数「headers」 を定義する。
    2. 変数「auth」を 変数「user」と文字「:」と変数「passwd」を連結させた文字列で初期化する。
    3. 変数「auth_b64」をライブラリ「base64」の関数「encodestring」の戻り値で初期化する
    4. 「headers」の要素「Authorization'」を 文字列「Basic」 と変数「 auth_b64」の値を連結させた要素で初期化する。
    5. 変数「body_data」をライブラリ「json」の関数「dumps」からの戻り値で初期化する。
    6. 変数「resp」を空の文字列で初期化する。
    7. 変数「req」をライブラリ「urllib2」の関数「Request」からの戻りで初期化する。
    8. 変数「res」 をライブラリ「urllib2」の関数「urlopen」からの戻りで初期化する。
    9. 変数「resp」をオブジェクト「res」の関数「read」からの戻り値で初期化する。
    10. 変数「page」をライブラリ「json」の関数「loads」からの戻り値で初期化する。
  4. 変数「input_result 」の値が文字列「OK」以外の場合は次の処理を実施する。
    1. 文字列「Wrong confluence account」を表示する。
  5. 変数「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

  1. 関数「GetConfluenceRespPOST」を定義宣言する。
  2. 「user」「passwd」「input_result」 の3つの変数を関数「 get_input_param」からの戻り値で初期化する。
  3. 変数「input_result 」の値が文字列「OK」の場合は次の処理を実施する。
    1. 変数「headers」 を定義する。
    2. 変数「auth」を 変数「user」と文字「:」と変数「passwd」を連結させた文字列で初期化する。
    3. 変数「auth_b64」をライブラリ「base64」の関数「encodestring」の戻り値で初期化する
    4. 「headers」の要素「Authorization'」を 文字列「Basic」 と変数「 auth_b64」の値を連結させた要素で初期化する。
    5. 変数「body_data」をライブラリ「json」の関数「dumps」からの戻り値で初期化する。
    6. 変数「resp」を空の文字列で初期化する。
    7. 変数「req」をライブラリ「urllib2」の関数「Request」からの戻りで初期化する。
    8. 変数「res」をライブラリ「urllib2」の関数「urlopen」からの戻りで初期化する。
    9. 変数「resp」をオブジェクト「res」の関数「read」からの戻り値で初期化する。
    10. 変数「page」をライブラリ「json」の関数「loads」からの戻りtで初期化する。
  4. 変数「input_result 」の値が文字列「OK」以外の場合は次の処理を実施する。
    1. 文字列「Wrong confluence account」を表示する。
  5. 変数「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

  1. 変数「payload」を定義する。
  2. 変数「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)

  1. 変数「url」を関数「get_confluence_baseurl」からの戻り値で初期化する。
  2. 変数「obj」を関数「create_confluence_page_data」戻り値で初期化する。
  3. 変数「res」を関数「GetConfluenceRespPOST」の戻り値で初期化する。

Pythonで業務効率化するその他の方法

other way of business efficiency by python

今回の記事では、ConfluenceRESTAPIを利用して、Confluenceページの作成や、ページコンテンツの読み取りなど、ConfluenceをPythonで操作する方法を解説しました。

Confluence以外にも、Pythonには、業務効率化できる手段がたくさんあります。

下記の記事に、Confluence以外に、普段オフィス環境で使われるツールを使って業務効率化できる方法をまとめていますので、合わせて読んでください。

オススメ
8 ways for business efficiency by python
【Python】業務効率化の方法8選【→周りを出し抜く自動化】

続きを見る

-Python
-