2016/02/04

Confluence の添付ファイルの履歴をAPI風に削除する

さて前回に続いて今度はConfluenceのページに添付したファイルの履歴(古いバージョン)をAPIで削除しようと思い調べてみたところ、REST APIは言うまでもなく、SOAP APIにもAPIがありません! どういうことだ!?

WebのUIから削除すると /rest/json/removeattachmentversion.action が呼ばれているので、公式のドキュメントでそれらしきものを調べるも何も発見できない。

本家answersやJIRAで、同じような質問には「Confluece CLI を使えばできるよ」とかで、実装が進展していない悲しい状況を見付けることができます。

仕方なく Confluence CLI の 古いバージョン(3.9)をダウンロードしてきて参考にさせてもらうことに。(現行バージョンは売りもの)

という経緯(1日消費)で、わかった使い方、ひとまず履歴 1バージョン削除する方法

まず、/login.action をふつうに呼びます。
  • os_username = <username>
  • os_password = <password>
  • os_cookie = true
をデータに詰めてPOST

返ってきたHTMLから atlassian-token と ヘッダからcookieを覚えておきます。
ここで、認証に失敗してもatlassian-token付きで、status code 200 で返ってきてしまい困るのですが、認証が成功すると X-AUSERNAME というヘッダにユーザー名が入って戻ってくるので、ここを手掛りに成否を確認することにしました。

次、

  • 削除したい添付ファイルの元ページのpage ID
  • 添付ファイル名
  • バージョン

を調べておきます。まずは人力でいいけど、pageidがわかれば、あとはSOAP API経由でなんとかできます。

次、 調べた情報を元に、

/rest/json/removeattachmentversion.action?pageID=<pageId>&fileName=<fileName>&version=<version>


  •  atlas-token=<login.actionで得られたatlassian-token>

 をデータ部につめて、あと同じくlogin.actionで得られた cookie もヘッダに付けてPOSTします。

以上。成功するとstatus code 200でbodyはnull で戻ってきます。失敗したら、response body を確認。

そもそも、素で /login.action を呼ばすに、前回の SOAP APIでログインした token をゲットしておいて、/rest/json/remove..なんとかに与えればいいだろうと思ったらダメでした。ふつうに loginto.action 呼んだときの token はすごい長いのに、SOAP でもらうtokenは10桁という違いがあり、たぶん、そのせい。

さて、発展系として、過去の履歴を全部消したいのですが、添付ファイルの履歴にどのバージョンが存在しているかわかりません。これまたAPIが存在しない。仕方ないので、添付ファイルのURLをゲットしてURLに書いてある現行バージョン番号が最大バージョンとして、version 1 までループさせて、存在する履歴を全部消すみたいな事をやる必要がありそう。というか、そう処理しました。

と、ここまで書いておいて、たぶん、ほとんどの人に何のことだかわからないだろうと思いつつ 、今回のまとめ

Confluence の APIの活用で困ったら Bob SwiftおじさんのConfluence CLI を参考にしよう。

0 件のコメント: