Box: フォルダ共有リンク作成 (Box: Create Shared Link to Folder)
この工程は、Box 上のフォルダにアクセスできる URL を作成します。有効期限の指定が無い場合は無期限で、パスワードの指定が無い場合はパスワード要求無しで作成します。
Configs:共通設定
  • 工程名
  • メモ
Configs
  • C1: OAuth2 設定 *
  • C2-deprecated: 共有するフォルダ ID#{EL}
  • C2: 共有するフォルダ ID *
  • C3: リンクの有効期限が格納されているデータ項目
  • C4: リンクのパスワードが格納されているデータ項目
  • C5: 共有リンクを保存するデータ項目 *

Notes

  • 廃止予定(C2-deprecated)が設定されている場合、C2: 共有するフォルダ ID を設定してください
  • フォルダ ID は、URL に含まれています https:// {sub-domain}.app.box.com/folder/(Folder ID)
  • Box のリフレッシュトークンには、期限があります
  • 既に共有リンクが作成されているフォルダは、共有リンクの再設定はできません
  • 対象のフォルダに「電子すかし」が適用されたファイルが含まれている場合にパスワードを設定すると、共有先では「電子すかし」が適用されたファイルのダウンロードやプレビューができなくなります(2022-10-28 現在)

Capture

See also

Script (click to open)
  • 下記のスクリプトを記述した XML ファイルをダウンロードできます
    • box-folder-link-create.xml (C) Questetra, Inc. (MIT License)
    • Professional をご利用であればファイルの内容を改変することでオリジナルのアドオンとして活用できます

main();
function main(){
  const folderId = retrieveFolderId();
  const dateItem = configs.get("unsharedAt");
  const passwordItem = configs.get("DownloadPass");
  
  let unsharedDate = null;
  if (dateItem !== "" && dateItem !== null){
    unsharedDate = engine.findDataByNumber(dateItem);
  }

  let password = "";
  if (passwordItem !== "" && passwordItem !== null){
    password = engine.findDataByNumber(passwordItem);
  }

  // get OAuth2 Setting
  const oauth2 = configs.get("OAuth2");

  // フォルダが既に共有リンク作成されているか調べる
  const existingUrl = getFolderInformation(oauth2, folderId);

  //フォルダに既に共有リンクがある場合はエラーにする  共有リンクが無い場合は作成する
  if (existingUrl !== null){
    throw `Shared link(${existingUrl.url}) was already created.`;
  }
  const sharedlinkUrl = createSharedLink(oauth2, folderId, unsharedDate, password);

  const UrlData = configs.getObject( "DownloadUrlItem" );
  if (UrlData !== null) {
    engine.setData(UrlData,sharedlinkUrl);
  }
}

/**
  * config からフォルダ ID を読み出す。空文字列の場合はエラー
  * @return {String} folderId フォルダ ID
  */
function retrieveFolderId() {
  const folderIdV1 = configs.get("FolderId");
  if (folderIdV1 !== null && folderIdV1 !== "") {
    return folderIdV1;
  }
  let folderId = configs.get("FolderId_V2"); // 固定値の場合
  const folderIdDef = configs.getObject("FolderId_V2");
  if (folderIdDef !== null) { // 文字型データ項目が選択されている場合
    folderId = engine.findData(folderIdDef);
  }
  if (folderId === null || folderId === "") {
    throw "Folder ID is blank";
  }
  return folderId;
}

/**
  * Get Folder Information on Box  フォルダが既に共有リンク作成されているか調べる
  * @return {String}  フォルダの共有リンクオブジェクト
  */
function getFolderInformation(oauth2, folderId) {
  const url = `https://api.box.com/2.0/folders/${folderId}?fields=shared_link`;
  const response = httpClient.begin()
    .authSetting(oauth2)
    .get(url);

  const status = response.getStatusCode();
  const responseTxt = response.getResponseAsString();
  if (status !== 200) {
    engine.log(responseTxt);
    throw "Failed to get folder information";
  }
  const jsonRes = JSON.parse(responseTxt);
  return jsonRes.shared_link;
}

/**
  * Create Shared Link to Folder on Box  共有リンク作成
  * @return {String}  フォルダの共有リンクURL
  */
function createSharedLink(oauth2, folderId, unsharedDate, password) {
  let timezone = engine.getTimeZoneId();
  if (timezone === "GMT"){
    timezone += "+00:00";
  }

  let jsonBody = {};

  jsonBody["shared_link"] = {"access": "open"};
  if(unsharedDate !== null){
    jsonBody["shared_link"]["unshared_at"] = unsharedDate.toString() + timezone.slice(3);
  }
  if(password !== "" && password !== null){
    jsonBody["shared_link"]["password"] = password;
  }
  
  jsonBody["shared_link"]["permissions"] = {"can_download": true };
  
  const url = `https://api.box.com/2.0/folders/${folderId}?fields=shared_link`;
  const response = httpClient.begin()
    .authSetting(oauth2)
    .body(JSON.stringify(jsonBody), "application/json; charset=UTF-8")
    .put(url);

  const status = response.getStatusCode();
  const responseTxt = response.getResponseAsString();
  if (status !== 200) {
    engine.log(responseTxt);
    throw "Failed to create Shared Link";
  }
  const jsonRes = JSON.parse(responseTxt);
  return jsonRes.shared_link.url;
}
%d人のブロガーが「いいね」をつけました。