【cURL의 추천】유루 캐릭터 그랑프리의 어심군을 응원하자!

13288 단어 curlnkfBash


금기의 난민 테두리 「보통의 여고생이【로코도루】 해 보았다.」의 마스코트 캐릭터 「어심군」이 느슨한 캐릭터 그랑프리에 출전중입니다.
  • 최신정보|TBS TV:보통의 여고생이【로코도루】 해 보았다. 공식 홈페이지
  • 어심 군 | 유루 캐릭터 그랑프리 공식 웹 사이트

  • 투표는 메일 주소 1개당 1일 1 회답표 가능합니다.

    어심군은 현재 41위(2014년 9/21시점)로 상당히 엄격한 순위.
    응원하고 싶지만 매일 HP에 가서 투표하는 것은 상당히 노력…

    그래서 cURL 명령을 사용하여 투표를 자동화해 보았습니다.

    유루 캐릭터 그랑프리에 등록



    미리 유루 캐릭터 그랑프리 공식 웹 사이트 로 이메일 주소를 등록해 두어야 합니다.
  • 유루 캐릭터 ® 그랑프리 ID (메일 주소) 등록 | 유루 캐릭터 그랑프리 공식 웹 사이트

  • 자세한 내용은 할애

    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)
  • -c : 쿠키를 파일에 저장
  • -b : 저장된 쿠키 사용

  • 이런 식으로 쉽게 폼 조작을 자동화할 수 있습니다.

    명령화



    명령화합니다. 어디까지나 일례입니다.

    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 [email protected] passxxxxx
    

    나머지는 cron 등에 등록하고 하루에 한 번 실행하면 OK!



    느슨한 캐릭터 그랑프리에 한정되지 않고, 이러한 조작은 비교적 간단하게 자동화할 수 있습니다.
    여러분도 시험해 보는 것은 어떻습니까.

    단! 말하지 않아 알겠다고 생각합니다만, 부디도 악용 엄금입니다!

    어심군의 응원도 꼭! !

    좋은 웹페이지 즐겨찾기