2016/02/08

Confluence の pageId を常にURLに表示したい

Confluenceのページには、固有のページIDがふられています。APIで何かしようとすると必ず必要になってきます。

https://confluence.atlassian.com/display/CONFKB/How+to+get+Confluence+page+ID

にあるように、編集モードに入ればURLでわかるのですが、編集権限を持っている必要があります 。pageId ぐらい「ページ情報」で表示されていてもいいと思う。

また、ページ名に非ASCII文字を使うと、そのページの閲覧するときのURLが編集時と同じように「pageId=<ページID>」を含む文字列になりますが、(上記リンクのように)ASCIIでページ名を付けた場合ページIDが出てきません。ASCIIページ名の場合、ページ名を変更してしまうとURLが変わってしまうこともあり、閲覧(表示)のURLを常にpageId を含む文字列にしたくなります。ページ名が何であれ、非ASCIIのときのURL形式に統一したい。

ですが、公式に解決策が提供されていないので 、ソースコードを修正してパッチを当てました。

で、URLの文字列を生成しているところで、ASCIIの時の処理をごっそりコメントにするだけなのですが、ソースコードのどこを修正した、というのはライセンス的に書いてはいけない気がするので、本稿は何の役にも立たないポストとして終了です。無念

2016/02/07

aliexpress.com で自転車のパーツを買ってみた(3)

今使ってるリア用の赤いLEDライトがコイン型の電池で結構な勢いでなくなってしまい、電池を入れ替えるのも買うのも面倒臭いので、USBで充電可能なものを買ってみました。送料無料の2.51ドル。何度も言うけど、どういうカラクリなのかわからない安さ。ぱっと見、同じものがAmazonで1000円ぐらいで売ってました。

さて、1/15に発送しました通知が出て、届いたのが2/6。たっぷり3週間かかりました。台湾からの郵送のようです。時間がかかるのと送料がタダなのは、たぶん、ヒッチハイク方式で、近くまで乗せていってくれる便が無いと進まないのだと思います(割と真剣にそう思う)。

さて、割とちゃんとしたパッケージに、本体、固定用のゴム大2二本、USBケーブル1本という構成。27.2mmのシートポストに大きい方のゴムでピッタリ固定。縦長なので昼間も主張少なめでいい感じです。



光り方は品がないですが...点灯しっぱなしとフラッシュ3タイプの切り替えができます。一番長いので12時間もつと書いてあります。まだ夜使ってないですが、よさげです。300円ですし。使用感は、特筆すべきことがあれば後ほど。

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 を参考にしよう。