【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を確認することができます。
この記事が気に入ったらサポートをしてみませんか?