Python版のConfluence API用モジュールを使ってみましたので、ご紹介します。
はじめに / 20171227 追記
Confluence用のpythonのモジュール無いかな...と思ってこちらの記事にたどり着いてくださった方へ。
この記事を作成した2014年段階ではBitbucketにあったリポジトリは、2017年12月時点で、GitHubに移行していました。
下記のリポジトリになります。
GitHubに移行した分、アップデートのチェックやプルリクを出すといったこともやりやすくなった気がします!
Python API to Confluence
- パッケージ (pypi): https://pypi.python.org/pypi/confluence
- ドキュメント: Python confluence module Documentation (via Sphinx)
- リポジトリ: https://bitbucket.org/phoebian/confluence
#リポジトリがBitbucketっていうのは、やっぱりpython&Atlassian的ですね!
インストール
pipで入れます〜 (手抜きですみません...)
% sudo pip install confluence
Password:
Downloading/unpacking confluence
Downloading confluence-0.1.tar.gz
…
Successfully installed confluence
Cleaning up...
コマンドラインでドキュメントの取得
認証情報は、config.iniという設定ファイルを作成して省略も可能です。
今回はオブジェクト生成の際にパラメータを指定してみます。
ターゲットのConfluenceは、Jenkins用Confluenceです。
>>> from confluence import Confluence
>>> conf = Confluence(profile=None, url="https://wiki.jenkins-ci.org", username="xxx", password="xxxx")
>>> o = conf.getPage("Jenkins勉強会","JA")
>>>
>>> print o['title']
Jenkins勉強会
>>>
>>> print o['content'][0:100]
h2. Jenkins勉強会
h3. 東京
* [第1回Hudson勉強会|Hudson勉強会]
* [第2回Jenkins勉強会]
* [第3回Jenkins勉強会]
* [第4回Jenkins
>>> o['id']
'58000672'
>>>
Jenkins用のConfluenceはVersion3.4.7のようですが、読み取りについては大丈夫でした。
書き込みについて
オリジナルのパッケージ (https://pypi.python.org/pypi/confluence) については、Pageが主体で、Blogの投稿/更新用は無く、基本的なもののみになっています。
Pageの操作
上記のサンプルで、Pageオブジェクトのcontent部分を変更して、conf.storePageContent(o) とすれば上書き更新されます。
idが無い場合は、新規登録になります。
Blogの書き込み
さて、元々のConfluence APIがシンプルなので、 Blog用のメソッドに対応したものを、自分のリポジトリに置いてみました。
(強制的に出来上がったページを他の指定のユーザにウォッチさせるメソッドも追加してみました)
サンプルはこちら。
# 投稿用のオブジェクトを作る
newPost = {}
newPost['content'] = content
newPost['title'] = title
newPost['space'] = '~自分'
newPost['author'] = '自分のログインアカウント'
# Blogとして登録
res = conf.storeBlogEntry(newPost)
print res['id']
# タグをくっつける(page, Blog共通)
conf.addLabelByName(u'アドベントカレンダー',res['id'])
# 無理矢理できたコンテンツをウォッチさせちゃう(page, Blog共通)
conf.watchPageForUser(res['id'], "ウォッチさせたい人のアカウント")
REST APIでカバー
Confluence APIのXML-RPC / SOAPでは実装されていないメソッドがあるのですが、RESTを使っての操作が出来るので、少し紹介しておきます。
#実際はConfluenceの画面から実行した処理をキャプチャして、『どんなリクエスト送ってるのかな〜』みたいな探し方もしました。(おはずかしい)
コマンドラインで、下記のようにすると、自分のアカウントで認証 -> 指定のコンテンツにLikeが出来ます。
curl https://confluenceのURL/rest/likes/1.0/content/__ID__/likes -X POST --user user:passwd
import requests
# res['id']はコンテンツのID
url = "https://confluenceのURL/rest/likes/1.0/content/%s/likes" % res['id']
requests.post(url, auth=(アカウント, パスワード))
イイネ!の取り下げは、dislikeに変えればOKです。