MediaWikiでWikipediaのInfoboxテンプレートを使う

どうもこんにちは、中原電車区のトトロです。

鉄道総合Wikiを運営するにあたり、Wikipediaで使われているInfoboxと呼ばれる右の画像みたいなテンプレートが自前のMediaWikiにも欲しい!!ってなったので、導入までの備忘録を記しておきます。(と言っても基本はこの方の記事の受け売りですが…())

一応Webサーバーのスペックは、

  • Ubuntu 18.04
  • VPS(Conoha)

です。(レン鯖(Xrea)でも多分使えると思います(前Xreaでやってた))

前導入しようとして挫折した経緯があるので、できるだけMediaWikiとWebサーバ初心者の方向けに解説します。

InfoboxをWikipediaから書き出す

実はMediaWIkiにはページの書き出しという便利な機能があるので、そこから現在のInfoboxテンプレートの内容をXMLファイルに書き出してしまいましょう。

「手動でページを追加」に Template:Infobox と入力して書き出しボタンを押します。

書き出すときはとりあえず3つのチェックボックス全てにチェックを付けてください。

するとXMLファイルがダウンロードされます。

Infoboxを自前のMediaWikiに取り込む

ページの書き出しと対を成すように管理者のみアクセス可能なデータ取り込み機能があるので、自前のWikiの検索窓に「特別:データ取り込み」と入力してアクセスします。

多分アクセスするとこんな感じになるので、ダウンロードしたXMLファイルを選択してアップロードします。

多分インターウィキ接頭辞はよく知らんけど多分Wikipediaで良いと思います。

するといっぱいデータが取り込まれます。

Scribuntoのインストール

InfoboxはMediaWikiのScribuntoParserFunctionsという拡張機能に依存します。

受け売りしてる記事はさくらレンタルサーバーとの事ですが、さくらは鯖のOSがFreeBSDというちょっとマイナーなOSなのでUbuntuOSとかXrea鯖向けのやり方です。

ParserFunctions拡張機能はデフォルトでインストールされてるので普通にLocalSettings.phpに

wfLoadExtension( 'ParserFunctions' );

と追記すれば完了です。(既に書いてあったら何もしなくて大丈夫)

一方、Scribunto拡張機能はLuaというAviUtlのスクリプトで使われている事で有名なスクリプト言語をMediaWiki中で使用できるようにするための拡張機能です。

なので、インストールするためにはLuaの実行ファイル(Windowsで言うlua.exe的な奴)を指定する必要があります。

インストールはこちらをGoogle翻訳して見てもらった方が早いと思いますが、

取り敢えずこ↑こ↓から自分のMediaWikiバージョンと同じScribuntoなんちゃら.tar.gzをダウンロードして、FTPかなんかでWikiのextensionsフォルダに解凍します。

さくらサーバーの場合は前述の通りマイナーOSなので一々公式サイトからFreeBSD用のLuaのソースコードも持ってきて自分でmakeしてコンパイルする必要があるんですが、

UbuntuやCentOSなどのメジャーなLinux系OS向けには、ご丁寧にLinux・Mac・Windows向けのLua実行ファイルが入ってるので、LocalSettings.phpにLuaバイナリの位置を指定してあげればOKです。

…なんですが、実行権限を付けとかないと実行できないので、サーバーにSSHでログインして(SSHはレン鯖に対してコマンドを打てるツールです(コマンドプロンプトみたいなやつ・知らない人は調べて、どうぞ))黒い画面が出てきたら、

chmod a+x /Wikiをインストールしたパス/extensions/Scribunto/includes/engines/LuaStandalone/binaries/lua5_1_5_linux_64_generic/lua

と実行します。(Chmodはファイルの権限を変更するコマンド)

※多分64Bitだと思うのでこれで行けますが鯖が32Bitの場合はlua5_1_5_linux_64_generic を lua5_1_5_linux_32_generic に変更して下さい

そして、LocalSettings.phpに、

require_once "$IP/extensions/Scribunto/Scribunto.php";
$wgScribuntoDefaultEngine = 'luastandalone';

と追記し、MediaWikiの特別:バージョン情報にアクセスしてScribuntoが有効になっていればScribuntoのインストールは完了です。

これで一応、Infoboxが使えるようになります。

画像データをコピーする

Infoboxの中にはテンプレートに画像が使われている場合があるのですが、データをインポートしただけだと画像まで取り込めていないため、一部レイアウトが崩れてしまう場合があります。

そのため、MediaWikiのデータベースから足りない画像の一覧を取得し、それがWikipediaにあれば取ってくる的なシェルスクリプトを組んで実行します。

レンタルサーバーの場合、上記のSSHを使いますが

もしSSHが使えないレン鯖の場合はとりあえず下に書いてあるシェルスクリプトに必要項目を記入してInfobox.sh的な名前で保存、適当にInfobox.php的なファイルを作成して中身に

<?php
exec("sh infobox.sh" ,$opt);
print_r($opt);
echo "Download Done.";
?>

とコピペして(Infobox.shは適宜変えてね)、ブラウザ上からhttp://(あなたのサイト)/(phpファイルを置いた場所)/Infobox.phpとやって実行すると多分できると思います(小並)

シェルスクリプト

さくらサーバーの場合はこちらの記事の方を読んで頂きたいのですが、

基本的にレン鯖は(さくらを除いて)大体CentOSかUbuntuのLinuxが入ってると思うので、取り敢えずそれ用に書いてます。

#!/bin/sh
 
SQL_HOST="MySQLのホスト名" #基本はlocalhostで行けるかと
SQL_USER="MySQLのユーザー名" #Xreaならアカウント名と同じ
SQL_PWD="MySQLのユーザーのパスワード" #Wiki作るときにパスワード作ってるはず
SQL_TABLE="データベースの名前" #Wiki作るときに入力した奴
MEDIAWIKI_DIR="wikiが置いてある場所のパス"
#↑Xreaなら/virtual/(ユーザ名)/public_html/(wikiの置いてあるディレクトリ)
IMAGE_DOWNLOAD_DIR="./images" #基本は変えなくておk(一時ディレクトリ)
REMOTE_PATH="http://upload.wikimedia.org/wikipedia/en"
 
SQL_CMD="SET NAMES utf8; SELECT distinct il_to FROM imagelinks;"
IMAGE_DIR="$MEDIAWIKI_DIR/images"
MD5="md5sum"
 
mkdir -p $IMAGE_DOWNLOAD_DIR
 
images=`echo $SQL_CMD | mysql -h $SQL_HOST -u $SQL_USER -p"$SQL_PWD" $SQL_TABLE | grep -v '^il_to$'`
for image in $images
do
md5=`echo -n $image | $MD5`
first=`echo $md5 | cut -c1-1`
second=`echo $md5 | cut -c1-2`
target="$IMAGE_DIR"/"$first"/"$second"/"$image"
if [ -f $target ]
then
echo found $target
else
url="$REMOTE_PATH"/"$first"/"$second"/"$image"
echo downloading $url
wget -a ./getMediaWikiImages.log --restrict-file-names=nocontrol -P $IMAGE_DOWNLOAD_DIR $url
fi
done
 
php $MEDIAWIKI_DIR/maintenance/importImages.php $IMAGE_DOWNLOAD_DIR

これをコピペしてInfobox.shとかの名前で保存し、SSHから

sh /(Infobox.shが置いてある場所のフルパス)/Infobox.sh

と実行します。

すると、画像データも無事インポートされて無事登録できます。

コメント