- 前回までのお話
- XOOPS Cube のユーザー一覧を取得したい
XOOPS Cube の管理画面に Linux コンソールから wget コマンドでアクセスして 会員情報を取得する という方法を取ることにしました。
今回はVPSを使いましたが、Virtual Box や Bash on Windows 10 でも大丈夫でしょう。
ログインしてからページを取得
ログインが必要なサイトから情報を取得するには、cookie を使いまわします。
例えば下のようなスクリプトを作ります。
#! /bin/sh
# 第一引数:ユーザID
ID=$1
# ↓環境に合わせてくださ
LOGIN_USER='username'
LOGIN_PASS='password'
XOOPS_ROOT='http://url.to.xoops/'
USERINFO_BASE='UserInfo'
COOKIEFILE='cookies.txt'
# ログインする
wget --keep-session-cookies --save-cookies=${COOKIEFILE} \
--post-data "uname=${LOGIN_USER}&pass=${LOGIN_PASS}&op=login" \
${XOOPS_ROOT}/user.php -q -O /dev/null
# ユーザ情報閲覧ページを取得
wget --load-cookies ${COOKIEFILE} \
"${XOOPS_ROOT}/modules/user/admin/index.php?action=UserView&uid=${ID}" \
-q -O ${USERINFO_BASE}_${ID}.html
# ユーザ情報閲覧ページを整形して、ユーザ名とメールアドレスを表示
nkf -w ${USERINFO_BASE}_${ID}.html | sed -ne '
/UID/{n;n;p}
/ユーザー名/{n;n;p}
/>メールアドレス</{n;n;p}
' | sed -ne '
1{
N;N
s/\n/,/g
s/[ \t]//g
p
}
'
このスクリプトを第一引数にユーザIDを指定して起動すると、ユーザ情報閲覧ページのHTMLコードが得られます。
$ GetUserInfo.sh 100 100,user100,user100@sample.com
実際は 第一引数に指定するユーザIDも分からないし、分かったところで何百回もこのスクリプトを打つのが面倒なので、ユーザIDのリストも wget コマンドと sed で取得&整形しました。