東京電力 TEPCO 毎月のWeb検針票をプログラムで取得

こんにちは、エンジニアです。

これまで東京電力の検針票は毎月、郵便受けに投函されていましたが、2021年4月から紙の検針票がなくなり、Web検針票になりました。

ただWeb検針票は毎月サイトにアクセスして見に行かなくてはいけないのが面倒。。

またWeb検針票のサイトは、初回に入力項目が多いのもさらに面倒。

ブラウザーの保存機能がありますが、別のパソコンで閲覧しようとすると再入力が必要に。

実は4月から私もWeb検針票をPHPで自動化して取得していますか、なぜか最近になり検針票URLが

https://www.kenshin.tepco.co.jp/Certification

から

https://www.kenshin.tepco.co.jp/identification

に変更されました。なんかあやしいなと思っていたところ、仕様が変わっていたようでした。

他のサイトやブログを調べてみても、前者(URLがCertificationの方)の取得方法しかなかったので、後者(URLがidentificationの方)を紹介しようと思います。

ステップは3つ!!

【STEP 1】まずはサイトにアクセス

https://www.kenshin.tepco.co.jp

_csrfって言うキーをホームページから取得しないとできなくなりました。

この画面で

_csrf値が取れます

【STEP 2】_csrfキーを取得するため、注意事項に同意する

https://www.kenshin.tepco.co.jp

その_csrfって言うキーを自分でPOSTしないとsessionがとれない仕組みになっています。

実際画面上にはポップアップで表示される、「ご利用にあたっての注意事項」に隠してあり、気づかない人が多いかも。。

【STEP 3】POST

https://www.kenshin.tepco.co.jp/identification

今度は本番です。フォームの情報をすべてPOSTするとWebクローリングすることができます。

【STEP 1-3 のプログラム】

▼ソースはこちらです

<?php

$listUrl = "https://www.kenshin.tepco.co.jp";
list($h, $b) = downloadPage($listUrl, "");
if (!empty($b)) {

    $csrfString = explode('<input type="hidden" name="_csrf" value="', $b);
    $csrfString = explode('"/>', $csrfString[1]);
    $csrfString = $csrfString[0];

    $query = "_csrf=$csrfString";

    $listUrl = "https://www.kenshin.tepco.co.jp";
    list($h, $b) = downloadPage($listUrl, $query);
    if (!empty($b)) {


        $query = "_csrf=$csrfString";

        //ここはブラウザーから取ります
        $query.= "&options=1&firstName=姓lastName=名companyName=&departmentName=&zipCode1=110&zipCode2=0001&prefectureCode=13&prefectureName=東京都cityCode=211&city=新宿address1Code=010&address1=住所1address2Code=003&address2=住所2addressBanchi=2&addressGou=1&addressRoomNm=202&customerCdSelect=0&visitNumber1=01000&visitNumber2=02000&visitNumber3=1&visitNumber4=01&officeCode=001&others=1&phoneNumber1=03&phoneNumber2=6555&phoneNumber3=4454&inquiryButton=";

        $listUrl = "https://www.kenshin.tepco.co.jp/identification";
        list($h, $b) = downloadPage($listUrl, $query);
        if (!empty($b)) {

            //ここです
            echo $b;
        }
    }
}

function downloadPage($url, $query)
{
    $resp = "";
    $curl = curl_init();

    $params = array(
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => $url,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_COOKIEFILE => './cookiePath.txt',
        CURLOPT_COOKIEJAR => './cookiePath.txt',
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0',
        CURLOPT_VERBOSE => 0,
        CURLOPT_HEADER => 1,
    );

    if (!empty($query)) {
        $params[CURLOPT_POST] = 1;
        $params[CURLOPT_POSTFIELDS] = $query;
    }

    curl_setopt_array($curl, $params);
    $resp = curl_exec($curl);

    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
    $header = substr($resp, 0, $header_size);
    $body = substr($resp, $header_size);

    curl_close($curl);
    return array($header, $body);
}

注意

//ここはブラウザーから取りますのところですが

最初は自力で取る必要です!

まずはブラウザーの開発ツールを開き、Networkタップを選択して、Web検針票の画面従って全部項目を入力して「次へ」をクリック

結果ページに入力した情報が次回ソースで再利用することができます。

*Sorry for the quick 5 mins dirty source code, as I have no interest in TEPCO.