WikiChree.COM 新規   編集   添付   管理  



トップ   編集 編集〔GUI〕 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

Pkript/API/data の変更点

#author("2026-08-31T22:06:28+09:00","default:guide","guide")
* Pkript/API/data [#rba0c4d7]
#author("2026-09-04T00:05:50+09:00","default:mcp","bot-mcp")
* Pkript/API/data [#t07e53af]

リクエストをまたいで値を永続化するAPI。キーと値のペアを :config/pkript/data/<キー> ページにJSONで保存する。
リクエストをまたいで値を永続化するAPI。キー1つが :config/pkript/data/&lt;キー&gt; ページ1枚に対応し、値はJSONで保存される。

** リファレンス [#b183f922]
** リファレンス [#t2d3b41e]

*** data.get(key, [default]) [#q3399d1a]
*** data.get(key, [default]) [#lb6f6002]

#pkript(highlight){{
#highlight{{
data.get(key, [default])
}}

|~引数|~型|~説明|h
|key|String|取得対象のキー|
|default|any|キーが存在しない場合の戻り値(省略時 null)|

戻り値: 保存された値、またはデフォルト値

読み出しにアクセス制御はない。どのスクリプトからもどのキーも読める。
PKRIPT_ALLOW_DATA が 0 の場合は常にデフォルト値を返す。

*** data.set(key, value) [#y9aae398]
*** data.set(key, value) [#abcf92cd]

#pkript(highlight){{
#highlight{{
data.set(key, value)
}}

|~引数|~型|~説明|h
|key|String|書き込み対象のキー|
|value|any|保存する値(JSON化して保存される)|

戻り値: なし

呼び出し条件: action + POST + wiki.token() のトークン + スクリプトの信頼度(wiki.write と同じ)。
呼び出し条件: action + POST + wiki.token() のトークン + スクリプトの信頼度(wiki.write と同じ)。ページの描画中は書き込めない。
PKRIPT_ALLOW_DATA が 0 の場合は拒否される。

*** data.has(key) [#ic66d98a]
*** data.has(key) [#j79c350b]

#pkript(highlight){{
#highlight{{
data.has(key)
}}

- key: String

戻り値: Boolean: キーが存在するか

*** data.remove(key) [#m529c053]
*** data.remove(key) [#m607830b]

#pkript(highlight){{
#highlight{{
data.remove(key)
}}

- key: String

戻り値: Boolean: 削除した場合 true、存在しなかった場合 false

呼び出し条件は data.set と同じ。

*** data.keys([prefix]) [#d3b273ed]
*** data.keys([prefix]) [#afd58bcc]

#pkript(highlight){{
#highlight{{
data.keys([prefix])
}}

- prefix: String: 絞り込みに使うキーの接頭辞(省略可)

戻り値: Array<String>: キーの配列(辞書順ソート済み)
戻り値: Array&lt;String&gt;: キーの配列(辞書順ソート済み)

*** data.canWrite(key) [#c8df0965]
*** data.canWrite(key) [#j39d0cd6]

#pkript(highlight){{
#highlight{{
data.canWrite(key)
}}

- key: String

戻り値: Boolean

action / POST / トークンは確認しない(フォーム描画中は常に偽のため)。

*** キーの制約 [#e1acbfe2]
*** キーの制約 [#j3a53e8d]

- 使用できる文字: [A-Za-z0-9_-] を / でつないだもの
- 最大バイト数: 128バイト
- 接頭辞(PKRIPT_DATA_PREFIX)の外のページは指定できない


** 使用法 [#u88309ed]
** 使用法 [#df6292c0]

*** カウンターを実装する [#a03fe963]
*** カウンターを実装する [#ze23a52e]

#pkript(highlight){{
#highlight{{
function plugin_counter_action(e) {
    const page = e.vars["page"];
    const n = data.get("counter/" + page, 0) + 1;
    data.set("counter/" + page, n);
    wiki.redirect(page);
}
}}

*** 書き込めるときだけフォームを表示する [#kd01f171]
*** 書き込めるときだけフォームを表示する [#n031de67]

#pkript(highlight){{
#highlight{{
function plugin_vote_convert(e) {
    if (!data.canWrite("vote/" + e.args[0])) return "<p>投票は締め切られています</p>";
    return "<form method=\"post\">...</form>";
}
}}

*** キー一覧を取得して集計する [#uc9e4cd9]
*** キー一覧を取得して集計する [#zf6ab6c6]

#pkript(highlight){{
#highlight{{
const keys = data.keys("counter/");
const rows = keys.map((k) => "<tr><td>" + htmlsc(k) + "</td><td>" + data.get(k, 0) + "</td></tr>").join("");
return "<table>" + rows + "</table>";
}}


** 注意点 [#h0e42256]
** 注意点 [#l4a6cecf]

秘密データの保存には使用しないこと。data.get() はアクセス制御なしで誰でも読める。