$p.apiGetClosestSiteId
概要¶
AjaxのPOSTリクエストにより、サイト名検索で該当サイトに最も近いサイトIDを取得します。
前提条件¶
- 本機能はサイトの「サイト名」を検索します。あらかじめサイト名を設定してください。サイトのタイトルではありませんので注意ください。

構文¶
JavaScript¶
$p.apiGetClosestSiteId({
id: <検索開始のサイトID>,
data: {
<取得条件>
},
done: <任意の処理>,
fail: <任意の処理>,
always: <任意の処理>
});
パラメータ¶
| パラメータ名 | 型 | 必須 | 概要 |
|---|---|---|---|
| id | long | ○ | 検索開始のサイトID。通常は $p.siteId() を使用して、このメソッドを呼び出しているサイトのIDを指定します。 |
| data | object | ○ | 取得条件 |
| done | function | ○ | API通信成功時の処理 |
| fail | function | API通信失敗時の処理 | |
| always | function | API通信完了時の処理 |
取得条件について¶
| キーワード | 説明 | 必須 |
|---|---|---|
| FindSiteNames | 検索したい対象のサイト名を配列で指定。 | ○ |
使用例¶
呼び出し¶
JavaScript¶
$p.apiGetClosestSiteId({
id: $p.siteId(),
data: {
FindSiteNames:['ParentSite','HideSize']
},
done: function (data) {
console.log(data);
}
});
レスポンス¶
JSON¶
{
"SiteId": 12345,
"Data": [
{
"SiteName": "ParentSite",
"SiteId": 12344
},
{
"SiteName": "HideSite",
"SiteId": -1
}
]
}
サンプルコード¶
Note
コード内の【 ... 】は適宜修正してください。
1. サイトIDをキャッシュし処理効率化
サイト名からサイトIDを取得する処理を、一度取得した結果をキャッシュしておくことで、同じサイト名を何度も検索しないようにするサンプルです。
実務での使いどころ
複数のプロセスやループ処理の中で同じサイト名を繰り返し検索する場合
一覧の一括処理など、同じサイト名を何度も参照する処理がある場合
通信回数を減らして処理速度を改善したい場合
// ===== 設定 =====
const TARGET_SITE_NAME = '【サイト名】'; // 検索対象のサイト名
// サイトIDキャッシュ
const _siteIdCache = new Map();
/**
* サイト名からSiteIdを取得する(キャッシュ利用)
* @param {string} siteName - 検索したいサイト名
* @returns {Promise<number|null>} 見つかったSiteId。見つからない場合はnull
*/
function getSiteIdOrNull(siteName) {
return new Promise((resolve) => {
if (_siteIdCache.has(siteName)) {
resolve(_siteIdCache.get(siteName));
return;
}
$p.apiGetClosestSiteId({
id: $p.siteId(),
data: {
FindSiteNames: [siteName]
},
done: (res) => {
const found = res?.Data?.find(d => d.SiteName === siteName);
if (!found || !found.SiteId || found.SiteId === -1) {
console.error(`(error)${siteName} サイト情報取得失敗`);
resolve(null);
return;
}
_siteIdCache.set(siteName, found.SiteId);
resolve(found.SiteId);
},
fail: (res) => {
console.error(`(error)${siteName} サイト情報取得失敗`, res);
resolve(null);
}
});
});
}
(async () => {
const siteId = await getSiteIdOrNull(TARGET_SITE_NAME);
if (siteId) {
console.log(`(info)${TARGET_SITE_NAME}のSiteId: ${siteId}`);
}
})();
