LoginSignup
5
5

More than 5 years have passed since last update.

【cURLのススメ】ゆるきゃらグランプリの魚心くんを応援しよう!

Posted at

locodol_twittericon00.jpg

今期の難民枠「普通の女子校生が【ろこどる】やってみた。」のマスコットキャラクター「魚心くん」がゆるキャラグランプリに出場中です。

投票はメールアドレス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!

おわり

ゆるキャラグランプリに限らず、こういった操作はわりと簡単に自動化することができます。
みなさんも試してみてはいかがでしょうか。

ただし!言わなくて分かると思いますが、くれぐれも悪用厳禁です!

魚心くんの応援もぜひ!!

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5