今期の難民枠「普通の女子校生が【ろこどる】やってみた。」のマスコットキャラクター「魚心くん」がゆるキャラグランプリに出場中です。
投票はメールアドレス1つにつき1日1回答票可能です。
魚心くんは現在41位(2014年9/21時点)となかなか厳しい順位。
応援したいけど毎日HPにいって投票するのは結構手間…
というわけで、cURLコマンドを使ってさくっと投票を自動化してみました。
ゆるキャラグランプリに登録
あらかじめ、ゆるキャラグランプリ オフィシャルウェブサイト でメールアドレスを登録しておく必要があります。
詳細は割愛
cURLを使った認証〜フォーム送信
まずは主要部分を抜粋
# 以下を自身のメールアドレスとパスワードに書き換える
MAIL='your-mail-address'
PASS='your-password'
ENTRY_ID=1482
CHARACTER_ID=00001509
TMPFILE='cookie.txt'
urlencode() {
echo "$1" | nkf -wMQ | tr = %
}
urlencode_param() {
local key value
key=$(urlencode "$1")
value=$(urlencode "$2")
echo "$key=$value"
}
MAIL_PARAM=$(urlencode_param 'data[Member][email]' "$MAIL")
PASS_PARAM=$(urlencode_param 'data[Member][password]' "$PASS")
curl -v -d "entry_id=$ENTRY_ID&character_id=$CHARACTER_ID" \
-c "$TMPFILE" \
https://yurugp2014.secureserv.jp/yurugp.jp2014/pc/vote/comp
curl -v -d "$MAIL_PARAM&$PASS_PARAM" \
-b "$TMPFILE" \
https://yurugp2014.secureserv.jp/yurugp.jp2014/pc/login/comp
curl -v \
-b "$TMPFILE" \
https://yurugp2014.secureserv.jp/yurugp.jp2014/pc/vote/comp
やってることは単純で、HPでの投票操作(POSTによるフォーム送信)をcURLコマンドを使ってそのまま再現してるだけです。
また、認証が必要なのでクッキーを引き継ぐようにしてます。
cURLオプションの説明
- -v: 詳細表示
- -d <key=value>: フォーム送信(key=value)
- -c <file>: cookieをファイルに保存
- -b <file>: 保存したcookieを使用
こんな感じで簡単にフォーム操作を自動化することができます。
コマンド化
コマンド化します。あくまで一例です。
vote_yuru_uogokoro.sh
# !/bin/bash
#
# vote_yuru_uogokoro.sh
#
# Vote Uogokoro-kun at Yuru-GP
#
# http://www.yurugp.jp/vote/detail.php?id=00002402
#
# USAGE:
# vote_yuru_uogokoro.sh <mail address> <password>
# vote_yuru_uogokoro.sh <file>
#
# file format:
# MAIL=xxxx@yyyy
# PASS=xxxxxxxxx
#
# ------------------------------------------------------------------------------
ENTRY_ID=${ENTRY_ID:-1482}
CHARACTER_ID=${CHARACTER_ID:-00001509}
urlencode() {
echo "$1" | nkf -wMQ | tr = %
}
urlencode_param() {
local key value
key=$(urlencode "$1")
value=$(urlencode "$2")
echo "$key=$value"
}
atexit() {
[[ -n ${TMPFILE-} ]] && rm -f "$TMPFILE"
}
if [[ $# -eq 1 && -r ${1-} ]]; then
source "$1"
fi
MAIL=${MAIL:-${1-}}
PASS=${PASS:-${2-}}
TMPFILE=
echo "MAIL=$MAIL"
echo "PASS=$PASS"
echo
if [[ -z ${MAIL-} || -z ${PASS-} ]]; then
echo 'ERROR: Illegal arguments' 1>&2
echo "USAGE: ${0##*/} <mail address> <password> | <file>"
exit 1
fi
MAIL_PARAM=$(urlencode_param 'data[Member][email]' "$MAIL")
PASS_PARAM=$(urlencode_param 'data[Member][password]' "$PASS")
if [[ $DEBUG ]]; then
echo "MAIL_PARAM=$MAIL_PARAM"
echo "PASS_PARAM=$PASS_PARAM"
echo
fi
trap atexit EXIT
trap 'trap - EXIT; atexit; exit -1' INT PIPE TERM
TMPFILE=$(mktemp "/tmp/${0##*/}.tmp.XXXXXX")
curl -d "entry_id=$ENTRY_ID&character_id=$CHARACTER_ID" \
-c "$TMPFILE" \
https://yurugp2014.secureserv.jp/yurugp.jp2014/pc/vote/comp
curl -d "$MAIL_PARAM&$PASS_PARAM" \
-b "$TMPFILE" \
https://yurugp2014.secureserv.jp/yurugp.jp2014/pc/login/comp \
2>&1 \
| GREP_OPTIONS= grep 'メールアドレスかパスワードが間違っています' \
| sed 's/<[^<]*>//g'
curl -v \
-b "$TMPFILE" \
https://yurugp2014.secureserv.jp/yurugp.jp2014/pc/vote/comp \
2>&1 \
| GREP_OPTIONS= grep -A 1 '<h3>投票エラー</h3>\|<h3>投票完了</h3>' \
| sed 's/<[^<]*>//g'
使用例
$ vote_yuru_uogokoro.sh address@xxx.yyy passxxxxx
あとはcronなどに登録して、1日1回実行すればOK!
おわり
ゆるキャラグランプリに限らず、こういった操作はわりと簡単に自動化することができます。
みなさんも試してみてはいかがでしょうか。
ただし!言わなくて分かると思いますが、くれぐれも悪用厳禁です!
魚心くんの応援もぜひ!!