WikiChree.COM 新規   編集   添付   管理  



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

Pkript/API/wiki の変更点

#author("2026-08-31T22:05:54+09:00","default:guide","guide")
* Pkript/API/wiki [#q48526bc]
#author("2026-09-04T00:05:49+09:00","default:mcp","bot-mcp")
* Pkript/API/wiki [#b327f074]

WikiデータへのアクセスAPI。ページの読み書き・存在確認・URI生成・リダイレクトを提供する。
WikiデータへのアクセスAPI。ページの読み書きと存在確認、URI生成、リダイレクトを提供する。

** リファレンス [#g1f49676]
** リファレンス [#u61f214f]

*** wiki.exists(page) [#u7f2da0e]
*** wiki.exists(page) [#de6aff67]

#pkript(highlight){{
#highlight{{
wiki.exists(page)
}}

- page: String: 確認対象のページ名

戻り値: Boolean

*** wiki.link(page, [label]) [#g27dae02]
*** wiki.link(page, [label]) [#y8bbcc35]

#pkript(highlight){{
#highlight{{
wiki.link(page, [label])
}}

|~引数|~型|~説明|h
|page|String|リンク先のページ名|
|label|String|リンクテキスト(省略時はページ名)|

戻り値: String: PukiWikiのページリンクHTML

*** wiki.convert(text) [#de3a83a1]
*** wiki.convert(text) [#uaf22142]

#pkript(highlight){{
#highlight{{
wiki.convert(text)
}}

- text: String: 変換対象のWikiテキスト

戻り値: String: 変換済みのHTML

1リクエストあたりの呼び出し回数上限: PKRIPT_MAX_CONVERT(既定 32)

*** wiki.source(page) [#u4076f6d]
*** wiki.source(page) [#zb72fa99]

#pkript(highlight){{
#highlight{{
wiki.source(page)
}}

- page: String: 対象ページ名

戻り値: String: Wikiソース。存在しないページは空文字列。

*** wiki.pages([prefix]) [#s65a128e]
*** wiki.pages([prefix]) [#i53a4bbf]

#pkript(highlight){{
#highlight{{
wiki.pages([prefix])
}}

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

戻り値: Array<String>: ページ名の配列。最大 PKRIPT_MAX_PAGES 件(既定 1000)
戻り値: Array&lt;String&gt;: ページ名の配列。最大 PKRIPT_MAX_PAGES 件(既定 1000)

*** wiki.write(page, text) [#qb251de4]
*** wiki.write(page, text) [#p51790ed]

#pkript(highlight){{
#highlight{{
wiki.write(page, text)
}}

|~引数|~型|~説明|h
|page|String|書き込み対象のページ名|
|text|String|書き込む内容(ページ全体を上書き)|

戻り値: なし

呼び出し条件: action + POST + wiki.token() のトークン + スクリプトの信頼度。
書き込めるページの最大バイト数: PKRIPT_MAX_PAGE_BYTES(既定 512KB)。
1リクエストあたりの書き込み回数上限: PKRIPT_MAX_WRITES(既定 4)。

*** wiki.append(page, text) [#e63cb939]
*** wiki.append(page, text) [#dd09ab50]

#pkript(highlight){{
#highlight{{
wiki.append(page, text)
}}

|~引数|~型|~説明|h
|page|String|書き込み対象のページ名|
|text|String|追記する内容(ページ末尾に追加)|

戻り値: なし

呼び出し条件・上限は wiki.write と同じ。
呼び出し条件と上限は wiki.write と同じ。

*** wiki.token() [#bfd63703]
*** wiki.token() [#cba27ee7]

#pkript(highlight){{
#highlight{{
wiki.token()
}}

戻り値: String: CSRF対策トークン

トークンはログイン中のユーザーに紐付く。認証なしのWikiではサイト共通の値になる。

*** wiki.canWrite(page) [#j13b2465]
*** wiki.canWrite(page) [#kedfdfbd]

#pkript(highlight){{
#highlight{{
wiki.canWrite(page)
}}

- page: String: 確認対象のページ名

戻り値: Boolean

確認する条件: スクリプトの信頼度 / PKWK_READONLY / ページ名 / 凍結状態 / $edit_auth_pages

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

wiki.write はすべての条件を確認する。canWrite() が true でもトークンなしのPOSTは失敗する。

*** wiki.time(page) [#q881afe9]
*** wiki.time(page) [#oe92a406]

#pkript(highlight){{
#highlight{{
wiki.time(page)
}}

- page: String: 対象ページ名

戻り値: Number: 最終更新時刻(エポック秒 - サーバTZ差)。存在しない・読めないページは 0。
戻り値: Number: 最終更新時刻(エポック秒 - サーバTZ差)。存在しないページと読めないページは 0。

*** wiki.isFrozen(page) [#a5a0ae27]
*** wiki.isFrozen(page) [#n2c4dfa0]

#pkript(highlight){{
#highlight{{
wiki.isFrozen(page)
}}

- page: String: 対象ページ名

戻り値: Boolean。存在しないページは false。

*** wiki.uri([page], [absolute]) [#i03d7434]
*** wiki.uri([page], [absolute]) [#tf80dee9]

#pkript(highlight){{
#highlight{{
wiki.uri([page], [absolute])
}}

|~引数|~型|~説明|h
|page|String|対象ページ名(省略時はWiki自身のURI)|
|absolute|Boolean|true で絶対URI(省略または false で相対URI)|

戻り値: String

*** wiki.redirect(page) [#pe93fd5b]
*** wiki.redirect(page) [#f87705b8]

#pkript(highlight){{
#highlight{{
wiki.redirect(page)
}}

- page: String: 移動先のページ名

戻り値: なし(以降のコードは実行されない)
戻り値: なし(リクエストはその時点で終了し、以降のコードは実行されない)

呼び出し条件: action かつ POST のみ。
移動先は自Wikiのページに限定される。: で始まるページと存在しないページは拒否される。
try / catch で捕捉できない。

*** wiki.stripBracket(str) / wiki.encode(str) / wiki.decode(str) [#p21d566d]
*** wiki.stripBracket(str) / wiki.encode(str) / wiki.decode(str) [#bbec327a]

|~メソッド|~説明|h
|wiki.stripBracket(str)|[[page]] 形式の二重角括弧を除去|
|wiki.encode(str)|ページ名をPukiWikiの16進ファイル名表現に変換|
|wiki.decode(str)|16進表現からページ名に変換|
|~メソッド|~戻り値|~説明|h
|wiki.stripBracket(str)|String|ページ名を囲む二重角括弧 &#91;&#91; &#93;&#93; を除去|
|wiki.encode(str)|String|ページ名をPukiWikiの16進ファイル名表現に変換|
|wiki.decode(str)|String|16進表現からページ名に変換|


** 使用法 [#g8b289f1]
** 使用法 [#mac639af]

*** フォームからページへ書き込む [#d673f901]
*** フォームからページへ書き込む [#ce4d5a63]

フォームを描画(convert)し、送信された内容をページに追記する(action)。

#pkript(highlight){{
#highlight{{
function plugin_guestbook_convert(e) {
    if (!wiki.canWrite("GuestBook")) return "<p>書き込み権限がありません</p>";
    return "<form method=\"post\">"
        + "<input type=\"hidden\" name=\"plugin\" value=\"pkript\">"
        + "<input type=\"hidden\" name=\"script\" value=\"guestbook\">"
        + "<input type=\"hidden\" name=\"pkript_token\" value=\"" + wiki.token() + "\">"
        + "<textarea name=\"text\"></textarea>"
        + "<input type=\"submit\" value=\"投稿\">"
        + "</form>";
}

function plugin_guestbook_action(e) {
    wiki.append("GuestBook", "\n- " + e.vars["text"]);
    wiki.redirect("GuestBook");
}
}}

*** ページ一覧からリンクを生成する [#i4392fe4]
*** ページ一覧からリンクを生成する [#wiki_usage_list]

#pkript(highlight){{
#highlight{{
const pages = wiki.pages("Blog/");
const links = pages.map((p) => "<li>" + wiki.link(p) + "</li>").join("");
return "<ul>" + links + "</ul>";
}}

*** Wikiテキストを動的に変換する [#i47302f5]
*** Wikiテキストを動的に変換する [#wiki_usage_convert]

#pkript(highlight){{
#highlight{{
const src = wiki.source("Template");
const html = wiki.convert(src.replace("__NAME__", htmlsc(e.args[0])));
return html;
}}