毎日ログインすることでポイントとかが貰えるサイトありますよね。
手動で毎日ログインするのがダルいので、ラズパイにやらせることに。
ブラウザの開発者ツールを開きながら挙動(どのURLに何を送信してるか)を確認しながら作成した。
curl -bは複数同時に使えないけど、 -H "Cookie: ~~" という形で記述すると大丈夫。
daily-point.sh
#!/bin/sh
cd `dirname $0`
logfull=full-log.txt
logshort=log.txt
#24時間+4分程度待機したい。
#前回の待機秒数読み出し
waitbefore=$(cat waitsec.txt)
#10s~8minの乱数作成
wait=$((waitbefore + 10 + ($RANDOM % 470)))
date=`date '+%Y-%m-%d %H:%M:%S'`
echo ${date} wait=${wait} >> ${logfull}
echo ${wait} > waitsec.txt
sleep ${wait}
#HTML内のトークン取得
curl -s -c cookie.txt -b cookie.txt -H "Cookie: Confirmation=1" https://example.com/mypage/ > login.html
token=`grep -E 'name="token"' login.html | awk -F\" '{print $6}'`
date=`date '+%Y-%m-%d %H:%M:%S'`
echo ${date} token=${token} >> ${logfull}
#ログイン用セッションのクッキーを取得
curl -s -c cookie.txt -b cookie.txt -H "Cookie: Confirmation=1" --referer "https://example.com/mypage/" -X POST -d email=めあど -d pass=ぱすわーど -d token=${token} https://example.com/mypage/login > /dev/null
#mypageダウンロード
curl -s -c cookie.txt -b cookie.txt -H "Cookie: Confirmation=1" https://example.com/mypage/ > mypage.html
point=`grep -E "ぽいんよ" mypage.html | awk '{print $2}'`
date=`date '+%Y-%m-%d %H:%M:%S'`
echo ${date} point=${point:0:-2} >> ${logfull}
echo ${date} point=${point:0:-2} >> ${logshort}
#echo "続けるにはEnterを入力してください"
#read Wait
#ファイル削除
rm -rf cookie.txt
rm -rf login.html
rm -rf mypage.html
あとはこれをcron.dに登録。毎日12:01に実行(スクリプト内で0~55分待機)
nano /etc/cron.d/example 1 12 * * * root sh /path/to/daily-point.sh
自分用、どのサイトのためかは言わない(適当に書き換えてる)。
2025/1/14更新: 0~55分ランダムに待機するよう変更
2025/1/23更新: 24時間ごとに付与されるサイトだったので、24時間+平均4分程度待機することに
参考
- 要ログインのWebページにコマンドラインからアクセスしてみる - Webログインの簡単な解説 - #Linux - Qiita
- curlでCookieを保存、送信する #curl - Qiita
- curlでcookieを送信する方法 – さいけの技術ブログ
- そのシェルスクリプトのあるディレクトリに移動する #ShellScript - Qiita
- ダブルクォーテーションで囲まれた文字列の抜き出し | クロジカ
- Linux Shellでよく使うコマンド集
- Debian系の cron で気をつけること - QG Tech Blog
- hogehoge.comは使っちゃダメ! - Ruby on Railsを始めた非エンジニアのブログ