Bots

提供:ct777-wiki
2022年1月20日 (木) 11:54時点におけるクールトレイン777 (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

Botを使い始めるまで

Vikipediaという過疎サイトが、スパムにより2021年4月下旬から8月末までに約10000記事も作成された。このサイトはアカウント作成をすでに規制していたので、攻撃法はたった一つのIPでひたすらページを作るというものであった。普通スパムはIPを変えつつアカウントを濫造することが多かったが、今回はそのIPをブロックしたら即攻撃終了となり、いささか拍子抜けした。

問題は記事である。Special:Nukeから1200件ほど削除できたが、大量すぎるのと放置期間が長すぎた為古いものは表示されず、8000本が残ることに。当然手動はムリ。そこで思いついたのがBotを使う方法。すごく昔にインストールだけやった気がしないでもないが、PC買い換えでデータが消えていたため改めてググって試してみた。

導入

ボットの作動方式は運用者が指定したスクリプトに従って元々wikiに用意されているapi.phpに(半)自動的にアクセスし処理を実行するものなので、無理にBotを使わなくても自分でapi.phpにリクエストを送り付けてもよい。しかしトークンや出力結果が見にくく面倒なのでBotを使うのが定番だろう。

導入したのはやはり定番のmw:Pywikibot。PHPベースや他のPythonベースの仕組みもあったが、ウィキメディアプロジェクト全体で使われており安定性も高いPywikibotを選択した。

Pywikibotの名の通りPythonが導入済みであるのが必須条件である。Fandomのヘルプがかなり参考になった。 今後を楽にするための作業などを除けば、最低限必要なのは

  1. ソースファイルのダウンロードと設置。ダウンロードしても、pipでもOK。
  2. python generate_family_file.py
    • 続けて、wikiのURLを入力
  3. python generate_user_files.py
    • 続けて、使用するボットの利用者名を入力
  4. python pwb.py login
    • ボットのパスワードを入力

を打ち込むだけ。この後

python pwb.py <起動するスクリプト>

と書くだけで処理してくれる。非常に楽!

削除処理

Pywikibotの良いところは、すぐ使えるスクリプトをセットにしてくれている点。基本的な作業ならすぐに実行できる。

今回は「とあるIPによる全投稿を削除」なので、delete.pyというスクリプトを使う。ちなみにMediaWiki.orgは解説に乏しく、英語版すら解説が用意されていないスクリプトもあるので注意が必要。このdelete.pyもWebの解説には利用者名を指定するオプション「usercontribs」が記載されておらず、無いのかと思って一瞬落胆した。ちゃんとしたヘルプを見るにはPCにダウンロードされた各スクリプトファイルを直接覗く必要がある。ちょっと不親切。

python pwb.py delete -usercontribs:<IP/利用者名> -pt:<作業間隔>
  • 「特定カテゴリに入った全てのページ」、「特定期間内に作成された全てのページ」、名前空間といった柔軟なオプションが選択可能。-pt:で作業間隔を設定でき、サーバーの状況を見て調整できる。デフォルト10秒。

実行風景

作業間隔10秒。

ただこれではいつまで経っても終わらないので2秒にした。myhtにかかる負荷が気になったが、巨大なデータを送っているわけでもないのでそれほど重くはならなかった。

これでついにBot使いになりましたとさ。

独自版

pywikibotはあくまでもライブラリの一つなので、それを使わなくても独自にプログラムを組むことは当然可能。 1つの作業のみの基礎プログラムならMediaWiki.orgに沢山転がっている。 試しに、mw:API:Edit#Pythonでやってみた。ログイン情報を予め仕込んでおけるので、実行は簡単。シンプルでgood。

ちなみに、このようなサンプルプログラムはPHP版やjavascript版も用意されている。どれもapiを使うのは同じなので、完全に好みの問題。

メモ

マシンのリソースを使わずに操作してみたいと思ったので、#独自版Google Colabでやってみたが、動かせなかった。エラーを見るとプログラムというよりはSSL周りによるものらしく、apiそのものにアクセスできなかった。Wikimedia、Miraheze標準ドメインではいけるが、同独自ドメインやmyhtなどでは不可能。なぜかは不明。

単純にColabの問題かと思いローカルのJupyter Notebookでも試してみたが、こちらは作業はできるものの一定の確率でログインが抜けるなど動作に不安定さが見られる。

pywikibotをGoogleで実行できるかは未検証。どうもドライブとの相性がよろしくなく、そもそも読み込めない。

  • 普通に.pyでやろう

たのしい

想像以上に楽で速くて気持ちいいので、他のサイトでもやってみたい。

Miraheze

成り済まし目的でもない不要なサブアカウントがあるので、名前を変更してボット化した。使い分けは未定。

その他

ローカルPC上のWiki(CentralAuth用と同一)で動かしている。活用は...していない。

Visions

  1. ようこそ自動貼り付け - よくある
  2. リンク切れ修正・除去 - よくある
    • 特にYouTube
  3. サンドボックスの砂慣らし - よくある
  4. 定 期 的 な 編 集 に よ る w i k i の 延 命 - ボットだけでも勝手に編集していたら活動休止期間中にもサイトの延命が可能?