IDCFクラウドのビリングAPIをpythonで利用する方法

#はじめに
IDCFクラウドのビリングAPIをpython3で利用したかったのですが、
公式HPにはrubyの[サンプルコード](http://docs.idcf.jp/cloud/billing/sample.html)しかなかったので色々検索したのですが見つけられませんでした。
python3もやり始めたばかりということもあり、お勉強のために書いてみたコードです。
あと[公式ドキュメントのAPIリクエスト方法](http://docs.idcf.jp/cloud/billing/create_request.html)だけだとよくわから・・・（ゲフンゲフン）
ワンライナーで記載可能な部分もありますが、あえて分解して自分がわかりやすいように書いています。
デバッグに利用していたprint文もそのままです（笑）

#事前準備
1.IDCFクラウド管理コンソールにログインします。
2.右上のアカウントをクリックし、アカウント設定をクリックします。
![idcf-api.png](https://qiita-image-store.s3.amazonaws.com/0/48100/d80c27bf-1524-a7a6-fbbd-5cd32d8d9a5f.png)
3.APIをクリックし、APIキーとSecretkeyをメモします。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/48100/a0c89a37-f840-c0a2-e8b9-36bec1c1d55d.png)
4.下にスクロールし、ビリングのAPIエンドポイントを確認します。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/48100/2cfb851b-c94e-e511-f2ed-cbcbc1bb7d51.png)
5.環境変数にAPIキーとSECRETキーをセットします。

```bash
export IDCF_APIKEY=確認したAPIキー
export IDCF_SECRETKEY=確認したシークレットキー
```

#書いたコード
下記内容で、idcf.pyとして今回保存しました。
importで利用しているライブラリについては適宜pip等でインストールしてください。

```py3
# -*- conding:utf8 -*-

import os
import json
import requests
import hashlib,hmac
import time
import base64

METHOD='GET'
QUERY_STRING = 'format=json'
APIKEY=os.getenv("IDCF_APIKEY")
SECRET_KEY=os.getenv("IDCF_SECRETKEY")
ENDPOINT='https://your.idcfcloud.com'
ENDPOINT_URI='/api/v1/billings/history'
EXPIRATION_SECONDS = 30

expiration = int(time.time()) + EXPIRATION_SECONDS
#print(expiration)

message = METHOD + "\n" + ENDPOINT_URI + "\n" + APIKEY + "\n" + str(expiration) + "\n" + QUERY_STRING
secret = SECRET_KEY

signature=hmac.new(bytes(secret, 'ascii'), bytes(message, 'ascii'), hashlib.sha256).digest()
sig=base64.b64encode(signature)

head = {'X-IDCF-APIKEY': APIKEY, \
        'X-IDCF-Expires' : str(expiration), \
        'X-IDCF-Signature' : str(sig,'utf-8') }
#print(head)
#URL生成
uri = ENDPOINT + ENDPOINT_URI + '?' + QUERY_STRING
res = requests.get(uri, headers=head)
data = res.json()
print(json.dumps(data,sort_keys=True,indent=4,separators=(',', ': ')))
```

#実行

```bash
python3.6 idcf.py
```

##出力結果

```json
{
    "data": [
        {
            "billing_amount": 0,
            "month": "2017-11",
            "payment_status": 1
        },
        {
            "billing_amount": 0,
            "month": "2017-10",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2017-09",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2017-08",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2017-07",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2017-06",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2017-05",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2017-04",
            "payment_status": 3
        },
        {
            "billing_amount": 54,
            "month": "2017-03",
            "payment_status": 3
        },
        {
            "billing_amount": 54,
            "month": "2017-02",
            "payment_status": 3
        },
        {
            "billing_amount": 54,
            "month": "2017-01",
            "payment_status": 3
        },
        {
            "billing_amount": 54,
            "month": "2016-12",
            "payment_status": 3
        },
        {
            "billing_amount": 54,
            "month": "2016-11",
            "payment_status": 3
        },
        {
            "billing_amount": 355,
            "month": "2016-10",
            "payment_status": 3
        },
        {
            "billing_amount": 378,
            "month": "2016-09",
            "payment_status": 3
        },
        {
            "billing_amount": 378,
            "month": "2016-08",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-07",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-06",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-05",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-04",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-03",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-02",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2016-01",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2015-12",
            "payment_status": 3
        },
        {
            "billing_amount": 0,
            "month": "2015-11",
            "payment_status": 3
        }
    ],
    "meta": {
        "account_id": "7100XXXXXXX0",
        "updated_at": "2017-11-08T02:27:37+09:00"
    }
}
```

毎月の支払い履歴を確認することができました！