WIKIWIKI REST API コミュニティ

Google App Script を使ってWiki 操作を自動化する

0 コメント
views
1 フォロー

Google App Script を使ってWiki 操作を自動化する

WIKIWIKI REST API はプログラムを通じて Wikiページの読み書きを行うことができる機能です。大量のページを一括で更新したり、記事を定期的に自動更新したりすることができます。
WIKIWIKI REST API は Python, PHP, Java 等どんなプログラミング言語からでも利用できますが、Google App Script (以下 GAS) を利用することで、PCに環境構築する必要もなく、また、Google スプレッドシート 等との連携を行いやすくなります。

GAS を実行するための事前設定

Google アカウントを作成し、Google ドライブ上でドキュメントやスプレッドシート等のファイルを作成します。作成したファイルを開き、メニューの「拡張機能 > Apps Script」を選択するとスクリプトエディタが開きます。ここにプログラムを記載します。

WIKIWIKI 側の設定

コントロールパネル の「各種設定 > HTTP API 利用可能」を ON にしてください。また、API利用の際には APIキー を発行して利用することをおすすめします。管理パスワードと違い、流出しても該当のAPIキーを削除して無効にすることができます。

サンプル

以下に GAS を用いて Wiki ページの取得と書き込みを行うサンプルを示します。
プログラムの中の wikiID, wikiPage, pageContents, authInfo を実際の設定に合わせて変更してください。

ページ取得

/// WikiのIDを設定します
const wikiID = 'your-wiki-id';

// 対象となるWikiのページ名を設定します
const wikiPage = 'samplePage';

// 認証情報を設定します
const authInfo = {
  "api_key_id": "your-api-key-id",
  "secret": "your-secret"
};

// 認証トークンを取得します
function getAuthToken() {
  const url = `https://api.wikiwiki.jp/${wikiID}/auth`;
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(authInfo)
  };
  const response = UrlFetchApp.fetch(url, options);
  const data = JSON.parse(response.getContentText('UTF-8'));

  if (data.status !== 'ok') {
    throw new Error('認証に失敗しました');
  }

  return data.token;
}

// 特定のページの内容を取得します
function getPageContent(pageName, token) {
  const url = `https://api.wikiwiki.jp/${wikiID}/page/${pageName}`;
  const options = {
    'method': 'get',
    'contentType': 'application/json',
    'headers': { 'Authorization': `Bearer ${token}` }
  };
  const response = UrlFetchApp.fetch(url, options);

  return JSON.parse(response.getContentText('UTF-8'));
}

// スクリプトを実行します
function runScript () {
  try {
    const token = getAuthToken();
    const pageData = getPageContent(wikiPage, token);
    // 新しい Google ドキュメントを作成します
    const doc = DocumentApp.create(wikiPage);
    
    // ドキュメントの本文を取得します
    const body = doc.getBody();
    
    // ページデータをドキュメントに書き込みます
    body.appendParagraph(JSON.stringify(pageData.source));
  } catch (e) {
    console.error(e);
  }
}

ページリスト取得

/// WikiのIDを設定します
const wikiID = 'your-wiki-id';

// 認証情報を設定します
const authInfo = {
  "api_key_id": "your-api-key-id",
  "secret": "your-secret"
};

// 認証トークンを取得します
function getAuthToken() {
  const url = `https://api.wikiwiki.jp/${wikiID}/auth`;
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(authInfo)
  };
  const response = UrlFetchApp.fetch(url, options);
  const data = JSON.parse(response.getContentText('UTF-8'));

  if (data.status !== 'ok') {
    throw new Error('認証に失敗しました');
  }

  return data.token;
}

// ページリストを取得します
function getPageList(token) {
  const url = `https://api.wikiwiki.jp/${wikiID}/pages`;
  const options = {
    'method': 'get',
    'contentType': 'application/json',
    'headers': { 'Authorization': `Bearer ${token}` }
  };
  const response = UrlFetchApp.fetch(url, options);

  return JSON.parse(response.getContentText('UTF-8'));
}

// 日時をわかりやすい形に変換します
function convertDateFormat(dateString) {
  // 日付文字列をDateオブジェクトに変換
  const date = new Date(dateString);

  // 曜日の配列
  const weekdays = ["日", "月", "火", "水", "木", "金", "土"];

  // 年、月、日、曜日、時間、分、秒を取得
  const year = date.getFullYear();
  const month = ("0" + (date.getMonth() + 1)).slice(-2);
  const day = ("0" + date.getDate()).slice(-2);
  const weekday = weekdays[date.getDay()];
  const hours = ("0" + date.getHours()).slice(-2);
  const minutes = ("0" + date.getMinutes()).slice(-2);
  const seconds = ("0" + date.getSeconds()).slice(-2);

  // 新しい日付形式を作成
  const newDateFormat = `${year}-${month}-${day} (${weekday}) ${hours}:${minutes}:${seconds}`;

  return newDateFormat;
}

// スクリプトを実行します
function runScript () {
  try {
    const token = getAuthToken();
    const pageList = getPageList(token)['pages'];

    // 新しい Google ドキュメントを作成します
    const doc = DocumentApp.create('pageList');
    
    // ドキュメントの本文を取得します
    const body = doc.getBody();

    // ページリストの内容を文字列としてまとめます
    let listStrings = '';
    pageList.forEach((element) => {
      listStrings += 'ページ名: ' + element['name'] + '\n';
      listStrings += 'url: ' + element['url'] + '\n';
      listStrings += '更新日時: ' + convertDateFormat(element['timestamp']) + '\n';
      listStrings += '\n';
    });
    
    // ページデータをドキュメントに書き込みます
    body.appendParagraph(listStrings);
  } catch (e) {
    console.error(e);
  }
}

ページ書き込み

// WikiのIDを設定します
const wikiID = 'your-wiki-id';

// 対象となるWikiのページ名を設定します
const wikiPage = 'samplePage';

// ページに書き込む内容を設定します
const pageContents = 'your contents';

// 認証情報を設定します
const authInfo = {
  "api_key_id": "your-api-key-id",
  "secret": "your-secret"
};

// 認証トークンを取得します
function getAuthToken() {
  const url = `https://api.wikiwiki.jp/${wikiID}/auth`;
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(authInfo)
  };
  const response = UrlFetchApp.fetch(url, options);
  const data = JSON.parse(response.getContentText('UTF-8'));

  if (data.status !== 'ok') {
    throw new Error('認証に失敗しました');
  }

  return data.token;
}

// ページに内容を書き込みます
function writePage(pageName, source, token) {
  const url = `https://api.wikiwiki.jp/${wikiID}/page/${pageName}`;
  const options = {
    'method': 'put',
    'contentType': 'application/json',
    'headers': { 'Authorization': `Bearer ${token}` },
    'payload': JSON.stringify({
      'source': source
    })
  };

  const response = UrlFetchApp.fetch(url, options);
  const data = JSON.parse(response.getContentText('UTF-8'));

  if (data.status !== 'ok') {
    throw new Error('書き込みに失敗しました');
  }
}

// スクリプトを実行します
function runScript () {
  try {
    const token = getAuthToken();
    writePage(wikiPage, pageContents, token);
    console.log('sucess');
  } catch (e) {
    console.error(e);
  }
}

GAS の実行

スクリプトエディタの内容を保存し、「実行する関数を選択」から “runScript” を選択し、「実行」をクリックします。
初回実行時は「承認が必要です」というダイアログが表示されるので「権限を確認」を選択します。
「このアプリは Google で確認されていません」という警告が表示される場合がありますが、「詳細」をクリックし、「(安全ではないページ)に移動」を選択します。
「外部サービスへの接続」権限を要求されるので、「許可」を選択します。
承認後、プログラムが実行されます。

WIKIWIKI運営
作成: 2023/12/13 (水) 16:13:07
最終更新: 2023/12/20 (水) 17:35:31
通報 ...