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()