私が昔作った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では利用しないでください。
// トークンの指定、作成
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のトークンを設定しましょう。
from lib import pukibot
URL = "https://example.wiki/" # PukiWikiのURL
TOKEN = 'dG9tYXRvMTIzNDU2Nzg5MA' # Botのトークン
bot = pukibot.PukiBot(URL, TOKEN)
ページの取得
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が間違えていることに気付きました。
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とフレームワークですが、もしよければ使ってみてください