読者です 読者をやめる 読者になる 読者になる

なにも わからぬ

パソコンとプログラミング関係をメモっていきたい

複数回献血クラブにログインしデータを取得するスクリプト

日本赤十字社の複数回献血クラブに登録すると、ネット上でこれまでの献血時のデータを閲覧できたり、
f:id:htkb:20161027001127j:plain
こんな風にグラフにして見せてくれたりするため、ちょくちょく献血している人には便利。しかし献血後にデータ反映まで数日のラグがあったり、データ閲覧のページにたどり着くまで2回ほどログイン作業が必要だったりとチェックが面倒だったりする。そこで、python+requestsでログインを試みてみる。

firefoxで複数回献血クラブにログインしつつLive HTTP headersを覗きながら試してみると、

  1. 会員ログインページ(https://www.kenketsu.jp/nskc/user/login.asp)に {"mode":"login", "user_id":数字10桁の会員ID, "password":パスワード}をPOSTしクッキーを得る
  2. 会員メニュー内の献血記録のパス入力ページ(https://www.kenketsu.jp/nskc/user/done/passwdexe.asp)に 1. で得たクッキーと {"mode":"login", "passwd":4桁のパスワード, "dummy":""}をPOSTする

のみで良いことがわかった。以下はとりあえず最終の記録の日時を得るだけのスクリプト

import requests
import re

def get_latest_date():
    # 以下3つを自分の情報に変更する
    user_id = "0000000000"
    login_password = "password"
    record_password = "0000"

    login_url = "https://www.kenketsu.jp/nskc/user/login.asp"
    login_data = {"mode": "login", "user_id": user_id, "password": login_password}
    record_url = "https://www.kenketsu.jp/nskc/user/done/passwdexe.asp"
    record_data = {"mode": "login", "passwd": record_password, "dummy": ""}

    # まずは会員ログインしてログイン状態のクッキーをもらう
    resp = requests.post(url=login_url, data=login_data)

    # もらったクッキーを使って献血記録にアクセス
    resp2 = requests.post(url=record_url, data=record_data, cookies=resp.cookies)

    # あとはresp2.textを煮るなり焼くなり
    html = resp2.text
    latest_date = re.search(r"H\d+\.\d+\.\d+", html)
    if latest_date is not None:
        return latest_date.group()
    else:
        return None