Bitflyer Streaming APIをPythonから使う
bitFlyerのAPIドキュメントにはサンプルがないので、Streaming APIのサンプルを載せます。 Streaming APIを使用するときは、bitFlyerへリクエストを送りません。代わりにpubnubというサービスへリクエストを送ります。 pubnubを使用するときは、
と4つの方法がありますが、ここではtornadoを使用することにします。pythonのバージョンは2.7です。 基本的にはpubnubのサンプルそのままで大丈夫なはず。
pip install tornado pip install pubnub
でライブラリをインストールすることを忘れずに。
from pubnub.callbacks import SubscribeCallback from pubnub.enums import PNStatusCategory from pubnub.pnconfiguration import PNConfiguration from pubnub.pubnub_tornado import PubNubTornado from pubnub.pnconfiguration import PNReconnectionPolicy config = PNConfiguration() config.subscribe_key = 'sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f' config.reconnect_policy = PNReconnectionPolicy.LINEAR pubnub = PubNubTornado(config) from tornado import gen @gen.coroutine def main(channels): class BitflyerSubscriberCallback(SubscribeCallback): def presence(self, pubnub, presence): pass # handle incoming presence data def status(self, pubnub, status): if status.category == PNStatusCategory.PNUnexpectedDisconnectCategory: pass # This event happens when radio / connectivity is lost elif status.category == PNStatusCategory.PNConnectedCategory: # Connect event. You can do stuff like publish, and know you'll get it. # Or just use the connected event to confirm you are subscribed for # UI / internal notifications, etc pass elif status.category == PNStatusCategory.PNReconnectedCategory: pass # Happens as part of our regular operation. This event happens when # radio / connectivity is lost, then regained. elif status.category == PNStatusCategory.PNDecryptionErrorCategory: pass # Handle message decryption error. Probably client configured to # encrypt messages and on live data feed it received plain text. def message(self, pubnub, message): # Handle new message stored in message.message # メインの処理はここで書きます # 登録したチャンネルからメッセージ(価格の変化など)がくるたび、この関数が呼ばれます print("%s : %s" % (message.channel, message.message)) listener = BitflyerSubscriberCallback() pubnub.add_listener(listener) pubnub.subscribe().channels(channels).execute() if __name__ == '__main__': channels = [ 'lightning_ticker_BTC_JPY', 'lightning_ticker_FX_BTC_JPY', 'lightning_ticker_ETH_BTC', ] main(channels) pubnub.start()