python3
IDCFクラウド

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

はじめに

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

事前準備

1.IDCFクラウド管理コンソールにログインします。
2.右上のアカウントをクリックし、アカウント設定をクリックします。
idcf-api.png
3.APIをクリックし、APIキーとSecretkeyをメモします。
001.PNG
4.下にスクロールし、ビリングのAPIエンドポイントを確認します。
002.PNG
5.環境変数にAPIキーとSECRETキーをセットします。

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

書いたコード

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

# -*- 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=(',', ': ')))

実行

python3.6 idcf.py

出力結果

{
    "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"
    }
}

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