日本でのアトラシアン(Atlassian)製品導入No.1

  1. HOME

リックソフトブログ

2016/03/30

REST API で Confleunce のページを生成

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

Author

樋口 晃Akira Higuchi

樋口 晃

こんにちは。リックソフトのプリセールス担当の樋口です。プリセールスで、JIRA, Confluenceの商品説明をしていると、「他システム連携はできますか?」と良く聞かれます。

そんな時は、「REST API が公開されていますので、データの参照や更新ができますよ」とお答えします。そうしますと「あっ REST が使えるんですね。そうしたら、json でポイっとやれば良いのですね」と言われるお客様も居ますが、「REST API って何ですか?」というお客様も居ます。

私も、実際にやってみるまでイメージが掴め無かったのでサンプルを作ってみました。今回は、Confluence の REST APIを利用して、ページの参照、作成、更新を実施する方法をご紹介します。バッチ処理を定期的に実行して、レポートをConfluence のページに出力するなどに利用できるかと思います。

Remote API の種類

Confluence の Remote API には以下の3種類が有ります。

  • REST
  • SOAP API
  • XML-RPC

このうち、XML-RPC と SOAP API は、Confluence 5.5 以降で 非推奨となっていますので、このドキュメントでは、REST API のサンプルをご紹介します。

Confleunce の REST API の詳細については、下記のAtlassian の下記ドキュメントを参照して下さい。

Python のサンプル

今回は、Python のサンプルを作成してみました。json を扱える言語なら 何でもできます。下記の 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 = response.json()
  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 を利用する時ははサーバーの負荷にご注意下さい。

最後に

今回は、Confluence の REST API の利用方法をご紹介しました。システム連携という観点では、JIRA の方が便利かもしれません。次回は、JIRAの REST API のサンプルをご紹介します。

何かご不明な点がありましたらお気軽にお問い合わせください。

お問い合わせ

評価ライセンスも発行しております。

評価ライセンスのご依頼

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

カテゴリ一覧

最近の記事

年別アーカイブ

アトラシアン製品の導入と活用を
成功させたいなら
リックソフトのサポートが
必要です。

サードパーティ製のアドオンもサポート

サードパーティ製のアドオンもサポート

RS標準サポート

アトラシアン社ではサポート範囲外となっているサードパーティ製のアドオンをリックソフトのRS標準サポートではサポートします。

  • アトラシアン製品とサードパーティ製のアドオンとの事象の切り分け
  • 海外のアドオンベンダーとのやり取りを代行(日→英/英→日)

リックソフトのRS標準サポートは開発元が提供するサポート以上の価値があります。

サポートについて

ツールの活用を促進するアイテム

ツールの活用を促進するアイテム

各種ガイドブック

ツールを導入しただけでは成功とはいえません。利用者が効果を感じていただくことが大切です。独自で制作した各種ガイドブックはツール活用を促進します。

リックソフトからライセンス購入を頂いたお客様にはガイドブックを無料進呈いたします。

ガイドブックについて

価値あるツールの使い方

価値あるツールの使い方

研修・トレーニング

ツール操作の研修だけでなく「ウォータフォール型開発」「アジャイル型開発」のシミュレーション研修も提供。

日本随一の生産性向上にも効果のある研修サービスです。

リックソフトからライセンス購入を頂いたお客様には無料招待や割引特典がございます。

研修について