#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<String>: ページ名の配列。最大 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|ページ名を囲む二重角括弧 [[ ]] を除去| |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; }}