0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PukiWikiAdvent Calendar 2024

Day 2

PukiBot Pyとbot.inc.phpで遊んでみる

Posted at

私が昔作ったPukiWiki用のボットAPI「bot.inc.php」とPython用フレームワーク「PukiBot Py」でページを自動で編集するボットを作ってみます。

上記のサイトからプラグインとフレームワークがダウンロードできます。ぜひ使ってみてください。

準備

※PythonやPukiWikiなどの導入はあらかじめしておいてください。ここでは記述しません。

1. 以下のリンクからプラグインbot.inc.phpを入手し、PukiWikiのplugin/に入れておく

2. 以下のリンクからPukiBot Pyをダウンロードする

3. require.batまたは以下を実行してFlaskを入れる

pip install --upgrade pip
pip install Flask

4. bot.inc.php内のPLUGIN_BOT_ALLOW_TOKEN_LISTへトークンを設定する
デフォルトではMDhEOTQ2MjE4NjJDRjAwRjdGNzhCNDlEQTgxN0RBMzkが設定されていますが、公開されているWikiでは利用しないでください。

bot.inc.php
// トークンの指定、作成
define('PLUGIN_BOT_ALLOW_TOKEN_LIST', array("MDhEOTQ2MjE4NjJDRjAwRjdGNzhCNDlEQTgxN0RBMzk", "dG9tYXRvMTIzNDU2Nzg5MA"));

// ボット名設定 ("(TOKEN)" => (ボット名))
// こちらでユーザー認証をボットに適用されることもできます
define('PLUGIN_BOT_NAMES', array(
	'DEFAULT' => 'bot',
	'MDhEOTQ2MjE4NjJDRjAwRjdGNzhCNDlEQTgxN0RBMzk' => 'example_bot',
	'dG9tYXRvMTIzNDU2Nzg5MA' => 'tomato',
));

// パーミッション設定 ("(TOKEN)" => (パーミッション))
// パーミッションはplugin_bot_define_permissions関数を参照してください
plugin_bot_define_permissions();
define('PLUGIN_BOT_PERMISSIONS', array(
	"DEFAULT" => BOT_PERMISSION_DEFAULT,
	"MDhEOTQ2MjE4NjJDRjAwRjdGNzhCNDlEQTgxN0RBMzk" => BOT_PERMISSION_DEFAULT | BOT_PERMISSION_PAGE_EDIT,
    "dG9tYXRvMTIzNDU2Nzg5MA" => BOT_PERMISSION_ALL,
));

5. PLUGIN_BOT_PERMISSIONSで "設定したトークン" => BOT_PERMISSION_PAGE_EDIT,のようにボットに編集権限を付与する。
6. (公開しているウィキであれば)PLUGIN_BOT_ALLOW_TOKEN_LISTのMDhEOTQ2MjE4NjJDRjAwRjdGNzhCNDlEQTgxN0RBMzkを削除する

ボットの権限一覧

権限名 説明
BOT_PERMISSION_NONE なし
BOT_PERMISSION_INFO 情報取得
BOT_PERMISSION_PAGE_READ ページの読み取り
BOT_PERMISSION_PAGE_EDIT ページの書き込み
BOT_PERMISSION_PAGE_LIST ページ一覧の取得
BOT_PERMISSION_PAGE_CHECK ページの存在チェック
BOT_PERMISSION_PAGE_SEARCH ページの検索
BOT_PERMISSION_PAGE_TOTAL 合計ページ数
BOT_PERMISSION_PAGE_RAW 読み取り / 書き込み
BOT_PERMISSION_PAGE_ALL すべてのページ関連の権限
BOT_PERMISSION_PLUGIN_EXECUTE プラグインの実行
BOT_PERMISSION_PLUGIN_LIST プラグインの一覧取得
BOT_PERMISSION_PLUGIN_CHECK プラグインの存在チェック
BOT_PERMISSION_PLUGIN_TOTAL プラグインの合計
BOT_PERMISSION_PLUGIN_ALL すべてのプラグイン関連の権限
BOT_PERMISSION_ATTACH_TOTAL 添付ファイルの合計
BOT_PERMISSION_ATTACH_ALL すべての添付関連の権限
BOT_PERMISSION_BACKUP_READ 履歴の読み取り / 一覧
BOT_PERMISSION_BACKUP_TOTAL 履歴の合計
BOT_PERMISSION_BACKUP_ALL すべての履歴関連の権限
BOT_PERMISSION_DIFF_READ 差分の読み取り
BOT_PERMISSION_DIFF_TOTAL 差分の合計
BOT_PERMISSION_DIFF_ALL すべての差分関連の権限
BOT_PERMISSION_TOTAL_ALL すべての合計関連の権限
BOT_PERMISSION_ALL すべての権限
BOT_PERMISSION_DEFAULT デフォルト権限(書き込み、実行、検索以外)

本題

※dG9tYXRvMTIzNDU2Nzg5MAをトークンとします。
まず、PukiWikiのURLとBotのトークンを設定しましょう。

bot.py
from lib import pukibot

URL = "https://example.wiki/"      # PukiWikiのURL
TOKEN = 'dG9tYXRvMTIzNDU2Nzg5MA'   # Botのトークン

bot = pukibot.PukiBot(URL, TOKEN)

ページの取得

bot.py
from lib import pukibot

URL = "https://example.wiki/"
TOKEN = 'dG9tYXRvMTIzNDU2Nzg5MA'

bot = pukibot.PukiBot(URL, TOKEN)

# 「PukiWiki」というページ名のデータを取得
print(bot.getPage('PukiWiki'))

bot.getPage("ページ名")でページのデータを取得することができます。

bot.getPage('PukiWiki')では、
https://pukiwiki.example.com/?cmd=bot&api=page&authorization=M25rbzEzYTIxNTIxMDM5Nzk&name=PukiWiki
へ接続しています。

これにより以下のようなJSONのデータを取得できます。

{
    "name": "PukiWiki",
    "source": "#freeze\n#nofollow\n#norelated\n* PukiWiki [#v1621880]\n\n- https:\/\/pukiwiki.osdn.jp\/\n- https:\/\/osdn.jp\/projects\/pukiwiki\/\n\nPukiWikiは Wiki([[WikiWikiWeb]]) と呼ばれているもののひとつで、基本的に誰でも全てのページを作成・編集することができます。\n\nまた、編集には特別な知識を要することなく、簡単なルールに従うだけで整形されたHTML文書を生成できます。\n\n- 漢字をサポートしています。日本語のページ名もOK!\n- 全てのデータはテキストファイルに保存されます\n- 定期的にバックアップが保存されるので、復旧も簡単\n- ページ単位の凍結なども可能です\n- URLを短く表現できる[[InterWiki]]をサポート\n- [[PHP]]で書かれています\n- ライセンスはGPL(( https:\/\/www.gnu.org\/licenses\/gpl.html ))です\n\n** リンク [#nf50e667]\n\n- [[PukiWiki-official:https:\/\/pukiwiki.osdn.jp\/]] からPukiWiki 公式サイトへ飛べます\n-- ご質問や御意見は、こちらへどうぞ。 :)\n\n- Pukiwiki-dev - https:\/\/pukiwiki.osdn.jp\/dev\/\n-- こちらはPukiWiki開発サイトです。PukiWiki開発サイトでは、次期バージョンの開発だけでなく、現行バージョンの1.4系や1.3系の修正、セキュリティfixが行なわれています。[[pukiwiki.dev:開発日記]]で日々の作業の内容が掲載されていますので、PukiWikiを運用されている方は目を通すようお願いします。\n\n- https:\/\/osdn.jp\/projects\/pukiwiki\/\n-- OSDN のプロジェクトサマリです。PukiWikiのダウンロードはこちらからどうぞ。\n\n** 関連ページ [#zf685513]\n\n#ls2\n- [[InterWikiName]] -- [[InterWiki]]のサーバリスト\n",
    "modified_unixtime": 1582433504,
    "modified_time": "",
    "author_username": "",
    "author_fullname": "",
    "editable": false,
    "freeze": true,
    "attaches": []
}

ページの保存

上記のGistで作成した「PukiBot Pyを使ってPukiWikiでSandBoxを自動で初期化するボットをつくってみる」です。

こちらは、24時になるとページが定期的に更新されるボットです。

ただ、savePageじゃなくてwritePageです。今さら、昔書いたGistが間違えていることに気付きました。

bot.py
from lib import pukibot
import datetime
import time
import schedule

URL = "https://example.wiki/"
TOKEN = 'dG9tYXRvMTIzNDU2Nzg5MA'

bot = pukibot.PukiBot(URL, TOKEN)

def job():
 # ページの保存
  print(bot.writePage("SandBox", "[省略]"))

# 24時になると定期的にjob()を実行
schedule.every().day.at("00:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(60)

ページの保存にはbot.writePage("ページ名", "内容")を利用します。

最後に

昔につくったbot apiとフレームワークですが、もしよければ使ってみてください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?