見出し画像

【GAS】Google Apps Script 活用事例 Confluence API(サーバー版)で情報を取得するスクリプト

勤め先はインフラ周りが比較的きちんと整っており、一つのログインIDとパスワードで他のSaaS系サービスのログインがスムーズになる仕組み(SSO)を採用していました。

入社して1年半、confluenceのパスワードだと思い込んでいたものが、実は、違うという事実が判明し、情シスに問合せ、スクリプトを修正したところ、やっとの想いで200 successが出ましたッ!!

良かったね、ルディちゃん!!

GET ページを取得するスクリプト

/**
* confluenceの内容を取得する
* 
*/

function getConfluenceInformation() {

 const baseUrl  = 'https://***********/wiki'; 
 const userId   = '*********@sample.com';
 const passWord = '**********';

 //confluenceのページIDを定義
 const pageId = '000000000';
 const headers  = {
   'content-type'  : 'application/json',
   'Authorization' : 'Basic ' + Utilities.base64Encode(userId + ':' + passWord)
 };

 const contents = getPageContent_(headers, baseUrl, pageId);
 console.log(contents);

}


/**
* @param {object} headers
* @param {string} https://***********
* @param {string} 取得したいページのページID
* 
* @return {object} コンフルエンスの内容
*/

function getPageContent_(headers, baseUrl, pageId) {
 const options = {
   'headers'  : headers,
   'method'  : 'get',
   'muteHttpExceptions' :true
 };
 
 const apiUrl       = baseUrl + '/rest/api/content/' +  + pageId + '?expand=space,body.view,version,container';
 const response     = UrlFetchApp.fetch(apiUrl, options)
 const contents     = response.getContentText('UTF-8');
 const responseCode = response.getResponseCode();

 console.log(contents);
 console.log(responseCode);

 const json = JSON.parse(contents);
 const info = {
   space:       json.space.name,
   pagetitle:   json.title,
   lastUpdate:  json.version.when.replace(/T.*/, ''),
   userName:    json.version.by.username,
   displayName: json.version.by.displayName,
   content:     json.body.view.value
 }
 
 /*
  *  ページが存在するスペース名
  *  ページのタイトル
  * 最終更新日 日付、時刻(タイムゾーン、秒単位)で取得できるが要らないので除外
  * 更新者 Email or UserId
  * 更新者 野比のび太 など名前で表記
  * ページ内容 html形式(matchなど正規表現で料理が必要)
 */
 
 console.log(info);
 return json;
}

サーバー版は、クラウド版への移行が推奨されており、新機能の追加開発が現在停止しているようです。おそらく、これからコンフルの導入を検討する場合は、必然的にクラウド版になるのだと思います。

公式ドキュメント

こちらの記事を参考にしました。

POST

function createNewPage() {
 const baseUrl  = 'https://***********/wiki'; 
 const userId   = '************@sample.com';
 const passWord = '**********';
 const headers  = {
   'content-type'  : 'application/json',
   'Authorization' : 'Basic ' + Utilities.base64Encode(userId + ':' + passWord)
 };

 const payload = {
   'type': 'page',
   'title': '我爱你',
   'space': {'key' : '********'}, //採用だとrecruit 経営管理だとmanagementとか
   'ancestors' : [{'id' : '11111111'}],
   'body': {
     'storage': {
       'value': '<p>你好世界</p>', //同一タイトルがスペース内に存在する場合、作成できない
       'representation': 'storage'
     }
   }
 };

 const params = { 
   'method': 'POST',
   'headers': headers,
   'muteHttpExceptions': true,
   'payload': JSON.stringify(payload),
 };

 const apiUrl         = baseUrl + '/rest/api/content/' + '?expand=' + 'null'; 
 const createResponse = UrlFetchApp.fetch(apiUrl, params);
 const content        = createResponse.getContentText('UTF-8');
 const json           = JSON.parse(content);

 console.log(createResponse.getResponseCode());
 console.log(json);
}

payload の spaceの設定が間違っていたようで、こちらを修正することで、エラーなく作成が出来ました。pageIdとは別物で、メニュー画面から、階層を表示を押すと、space keyを確認することができます。

この記事が気に入ったらサポートをしてみませんか?