IIJmioクーポンAPIをたたいて取得したJSONをパースして、日毎に利用可能なクーポンMB数を取得してみようと思います。
IIJMioクーポンAPI準備編☟
方針
- 「クーポン残量照会」用のURLをたたいて取得したJSONファイルをインプットにする
- クーポンMB数(SIM内クーポンを除く)を足し上げる(1)
- 翌月に繰り越したいMB数を(1)から除く(2)
- (2)を実行日を含む月の残り日数で割って、日毎に利用可能なMB数を取得する
- 結果は標準出力に表示する
ソース
pythonで書きました。
#!/usr/bin/python # -*- encoding:utf8 -*- import sys import json import datetime import calendar def main(json_path): RETURN_CODE_VALID = 'OK' # 残しておきたいMB数 REMAIN_MBYTES = 3000 f = None try: f = open(json_path,'r') json_data = json.load(f) return_code = get_return_code(json_data) # OK以外が帰ってきたら処理終了 if RETURN_CODE_VALID != return_code: print 'エラー:',return_code sys.exit(1) coupon_mbytes = get_coupon_mbytes(json_data) # 利用可能MB数合計から、残すMB数を引いたものを当月利用可能MB数とする available_mbytes = coupon_mbytes - REMAIN_MBYTES remain_days = get_remain_days() # 当月利用可能MB数/当月残り日数で1日あたりの利用MB数を算出 print '日毎の利用可能MB数:%03.1f' % (available_mbytes / remain_days) except IOError: print 'ファイルオープンに失敗しました:',json_path sys.exit(1) except KeyError as e: print 'キーがありません:',e.args[0] sys.exit(1) except: print '予期しないエラー:',sys.exc_info()[0] sys.exit(1) finally: if f is not None: f.close() # 今日を含めた当月の残り日数を算出する def get_remain_days(): today = datetime.datetime.today() # 当月末日 - 当日 + 1で当月の残り日数(当日含む) return calendar.monthrange(today.year,today.month)[1] - today.day + 1 # returnCodeセクションを取得する def get_return_code(json_data): KEY_RETURN_CODE = 'returnCode' return json_data[KEY_RETURN_CODE] # couponセクションから利用可能MB数合計を取得する def get_coupon_mbytes(json_data): KEY_COUPON_INFO = 'couponInfo' KEY_COUPON = 'coupon' KEY_VOLUME = 'volume' # ディクショナリ化のため、文字列化の後、先頭と末尾の'[]'を削除 couponInfo_str = json.dumps(json_data[KEY_COUPON_INFO]) sliced_couponInfo_str = couponInfo_str[1:len(couponInfo_str)-1] # ディクショナリ化 couponInfo_dict = json.loads(sliced_couponInfo_str) # 残クーポンMB数取得のため、couponセクションを取得 coupon_dict = couponInfo_dict[KEY_COUPON] coupon_mbytes = 0 for monthly_dict in coupon_dict: coupon_mbytes += monthly_dict[KEY_VOLUME] return coupon_mbytes if __name__=='__main__': try: args = sys.argv main(args[1]) except IndexError: print 'JSONファイルを指定してください' sys.exit(1)
実行例
[hoge@fuga]$ ./calc_coupon.py ./coupon.json 日毎の利用可能MB数:113.0
次回以降やりたいこと
slackにポストしたいので、slackに投稿する方法を調査する。