暗号通貨.py

ビットコインやブロックチェーンの技術に衝撃を受け、プログラミングの勉強を開始。現在はPythonを勉強中。

Bitcoin Programming

pythonでbitFlyerの状態を確認する

文系卒、プログラミングド素人ですが現在pythonを勉強しています。

ただの素人じゃないですよ!ド素人ですよ。プログラマーとエンジニアの違いすらわかりません。

今までもプログラミングを勉強したことは少しだけありましたが、3日で挫折するなど自分の自堕落さに嫌気が差していました。

だから今回こそ、独力でイチからwebサービスというか、自分の想像していることを実現するために、勉強を本格的に始めます。

自分がサボらないようにするためにも、メモ代わりにも使えるこのブログに勉強の記録やコードを記していきます。エラーで詰まったとこなんか後で見直せるので良さそう。

ということでとりあえず、色々コードを書いていってみようと思い、

「pythonでAPIを使ってbitcoin取引所のbitFlyer lightningの状態を確認する」という私にとってはかなり難易度の高いチャレンジをしました。

参考にしたのはQiitaのこの記事です。

BitFlyer Ligntning APIをPythonで使ってみる

ほとんど丸パクリになってしまいましたが、キャプテン翼がそうであるように、速攻で上達するためには人の技術を盗むことですよね。表現は悪いけども。

現段階でコードなんかどうやって書くのか全くわからないので、しばらくは人のコードを参考にしてちょこっと変えて実験したりの繰り返しになりそうです。作者のhistoriaさんありがとうございます。

開発環境は

Python 3.5.1

Anaconda 2.5.0

ipython notebookを使って簡単にブラウザで結果が返ってくるようになってます。

bitFlyerのAPIドキュメントはコチラ

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json
import requests
import time
import hmac
import hashlib

api_key = 'key'
api_secret = 'secret'
api_endpoint = 'https://api.bitflyer.jp'

def get_api_call(path):
    method = 'GET'
    timestamp = str(time.time())
    text = timestamp + method + path
    sign = hmac.new(b'api_secret', b'text', hashlib.sha256).hexdigest()
    request_data=requests.get(
        api_endpoint+path
        ,headers = {
            'ACCESS-KEY': api_key,
            'ACCESS-TIMESTAMP': timestamp,
            'ACCESS-SIGN': sign,
            'Content-Type': 'application/json'
        })
    return request_data

def post_api_call(path,body):
    body = json.dumps(body)
    method = 'POST'
    timestamp = str(time.time())
    text = timestamp + method + path + body
    sign = hmac.new(b'api_secret', b'text', hashlib.sha256).hexdigest()
    request_data=requests.post(
        api_endpoint+path
        ,data = body
        ,headers = {
            'ACCESS-KEY': api_key,
            'ACCESS-TIMESTAMP': timestamp,
            'ACCESS-SIGN': sign,
            'Content-Type': 'application/json'
        })
    return request_data

path = '/v1/gethealth'
status = get_api_call(path).json()['status']

print(status)

 

statusに現在のbitFlyerの状態が返ってきます。

以下がstatusの結果一覧です。

NORMAL: 取引所は稼動しています。

BUSY: 取引所に負荷がかかっている状態です。

VERY BUSY: 負荷が大きい状態です。発注は失敗するか、遅れて処理される可能性があります。

STOP: 取引所は停止しています。発注は受付されません。

だいたいNORMALで返ってきますが(当たり前)メンテナンス時などはSTOPで返ってきました。

ハマったところ

実は元記事の通りコードを写経するとエラーが発生したので少し弄ってます。

おそらく元記事はpython2でコードを書いています。違ったらすみません。

私はpython3なので若干変わるようです。

18行目の

sign = hmac.new(b'api_secret', b'text', hashlib.sha256).hexdigest()

変更点は赤字の部分で、元記事ではb'〜'はありません。

hmacはメッセージ認証のアルゴリズムでhmac.new(key, msg=None, digestmod=None)でkeyを引数にとります。

「b'〜'」をつけないと文字列のstr型になってしまうため、bytes型にしてあげる必要があります。

 

このサイトがわかりやすかったです。

python3のbytes型とstr型の比較と変換方法

このへんも参考にしました。

http://stackoverflow.com/questions/31848293/python3-and-hmac-how-to-handle-string-not-being-binary

http://docs.python.jp/3/library/hmac.html

もう1つ変更点は

print (status)

statusに()を付けただけです。

pythonは最新版は3ですが2を利用している人も多くいるようで、そのへんの理解が大変そうですね・・・

この型を合わせるというエラーだけでも意味がわからず1時間ぐらいは格闘していたと思います。

でも大変ですがコードが動いたときの達成感はなかなか味わえませんね!

がんばっていきまっしょい。

スポンサーリンク

adsense

スポンサーリンク

 

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

-Bitcoin, Programming