楽天ポイントの履歴を自動で取得する

技術,スクレイピング,楽天ポイント

TL;DR

ポイントは取得方法によっては課税対象。ポイントの実績を取得するのは大切、ということで自動的に楽天ポイントを集計する方法を調べてみました。

なぜ、実績をデータ化するのか

皆さん、ポイ活してますか。自分もフリーランスという名の無職になってからちょっとやっています。ただ、このポイントって、取得方法によっては課税対象。一時所得だったり雑所得だったり、色々複雑です。ポイントの取得自体は課税対象ではありませんが、それを換金(現預金だけでなく電子マネーも含む)したり、商品を購入したりするタイミングで収入扱いになります。

その辺は色々複雑でサイトによっても解説がわかりにくかったり、微妙に違うのでここでは詳しくは説明しません。ただ、どちらにしろ、利用や獲得の実績をちゃんと記録しておかないと話になりません。

memo

課税対象になる金額は給料をもらう本業がある方か、フリーランスや自営業などかでも異なりますが、非課税の上限額があります。ポイントでその金額まで達しなければ申告の必要はないです。が、あくまで一時所得や雑所得の合計が越えないという条件なので、他の収入がある方は意外と敷居が低いので注意が必要。

例えば、サラリーマンの場合、雑所得なら20万円で申告対象かと思います。ポイ活でアンケートなどの作業をしてポイントを得た金額が1万円分だから申告不要かと思っても、他に雑所得で19万円以上稼いでいたら他のものも含めた雑所得全体が申告対象です。例えば、副業で稼いでいるなんて方は最近多いですよね。

最近はテレビで派手にポイ活で〇〇円分稼いだ主婦、みたいなのやってることがありますが、彼や彼女らに対して税務署も目をつけてるんじゃないですかね。知らんけど。

本文でも書きましたが、ポイントの取得は課税対象外。あくまで換金のタイミングでの課税となります。また、ポイントによる値引きについては課税対象外であることが国税庁のサイトのQAにも書いてあります。ただ、いまいち曖昧で、全額ポイント負担で購入した時はどうなのかとか不明。ポイントでの値引きでも、店独自のポイントではない共通ポイントの利用も値引き扱いなのかも曖昧。ある国税庁の資料ではとにかく利益を受ければ収入扱いみたいな記述も。

なんにせよ、手元にポイントの履歴を残しておくのは大切になっているかと思います。

そうだ、スクレイピングしよう

そんなわけでスクレイピングしようと思いましたが、そんなものはどこかにありそう。Webでググったところ、実際に見つかりました。

環境構築などは細かく書かれていませんでしたが、pipを使ってseleniumとpandasを入れて、ChromeのWebDriverを入れれば動き…ませんでした。

Pythonスクリプトの修正

適当にライブラリを入れたので最新版がインストールされました。が、seleniumもpandasも上記サイトで使っていたものよりも新しくなっていて、ErrorやWarningが出る状態。

seleniumの変更

オリジナルではfind_element_by_idやfind_element_by_nameといったメソッドを使っています。ただ、これらのメソッドは新しいバージョンでは廃止されていることがわかりました。これについては、新しい書き方に直すだけです。メソッド名+エラーなどで検索すれば回答はすぐ出ました。

pandasの変更

こちらはWarningなので放っておいても動作はします。ただ、気持ち悪いので直すことにしました。こちらも原因自体はすぐ出てきましたが、そもそもpandasというライブラリを初めてみたので、直し方がよくわかりません。

あれこれ検索してなんとか直したついでに、オリジナルから色々改変してしまいました。内容は

  • 後で説明するモジュール構成の見直しに関連して、利用ポイントを負の数にしていたのを廃止
  • 自分の集計の都合で以下変更
    • 期間限定ポイントの列を独立
    • Excelのフィルタかける時とかに面倒なので、ランクアップ対象外や備考欄が空欄の場合「-」を出力
    • 内容欄の「ランクアップ対象」表記を削除
    • 内容欄のトリム処理を追加
  • 出力ファイルの見出しを日本語文字列に修正
  • 出力ファイルの各行左端のインデックスが0オリジンだったのを1オリジンに変更

モジュール構成の変更

元のPythonスクリプトは使い捨てのためなのかあまりモジュール分けがされてませんでした。DRY原則ガーとか言いませんが、楽天サイトの修正でメンテすることはあり得るので、後々のために色々見直しました。

まず、利用ポイントと獲得ポイントの処理はほとんど同じですが、二重になっているでモジュールを別に分けました。そこで利用処理と獲得処理を分けても良かったのですが、違いはポイントを正にするか負にするかだけだったので、同じ処理にしてしまいました。

また、try〜exceptの例外の範囲がすごく広かったので、そこは狭く直してます。これはライブラリのバージョン違いを修正するときに必要なエラーメッセージが握りつぶされてしまうのを避けるための変更です。ついでに途中で様々な情報を出力するようにして、どこまで進んでいるかをわかりやすくしています。本当はログファイルに書き出すべきですが、標準出力に垂れ流しています。

また、書き捨てスクリプトだからでしょうがIDやパスワードが直書きになっていたのはライブラリを使って設定ファイルから読み取るようにしています。これは、GitHubでソース公開するときに事故って自分のIDやパスワードを晒さないため。

最低限の変更をするつもりが、結構大掛かりな変更になってしまいました。書き捨てのスクリプトでここまでやるか、というくらいの変更が入っているかもしれませんが、個人の趣味です。

ソースなど

ここにソースを上げても見づらいですので、GitHubのリポジトリを参照してください。使い方もざっくり簡単なメモ程度ですが、READMEに書いてあります。

実際に使用して

これのおかげで1年分の楽天ポイントをCSVに吐き出すことができました。オリジナルを公開していただきた方や、各種ライブラリの変更方法を挙げていただいた方には感謝するばかりです。

今までは収入が雑に分かればよかったのでほぼ毎日、手入力で家計簿サイトに入力していました。ただ、それを始めたのが10月くらいからだったので、それ以前の分をどうしようかと途方に暮れていたところです。dポイントの実績履歴はExcelにコピペで集計でなんとかなったのですが、楽天ポイントのサイトはコピペしてもぐちゃぐちゃでなんらかの加工をしないと集計もできないようなサイトなので、スクレイピングするしかありませんでした。仮にも代表的なIT企業グループなのですから、CSV出力機能くらいつけておいて欲しいものです。