質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
bitFlyer API

bitFlyer APIは、仮想通貨取引所bitFlyerが公開しているAIPツール。bitFlyer Lightning/API playground/chainFlyer/Echoの4種類あり、bitFlyerソフトをカスタマイズすることが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

解決済

bitflyer Realtime APIに、websocketで接続して得たデータを変数に格納する

161
161

総合スコア1

bitFlyer API

bitFlyer APIは、仮想通貨取引所bitFlyerが公開しているAIPツール。bitFlyer Lightning/API playground/chainFlyer/Echoの4種類あり、bitFlyerソフトをカスタマイズすることが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

1回答

0リアクション

0クリップ

546閲覧

投稿2022/08/21 11:42

編集2022/08/22 00:21

前提

bitflyer Realtime APIに、websocketで接続して得たデータを変数に格納するために
試行錯誤しましたが、やり方がわかりませんでした

実現したいこと

bitflyer Realtime APIに、websocketで接続して得たデータを変数に格納する

発生している問題・エラーメッセージ

--- Logging error ---
Traceback (most recent call last):
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 383, in run_forever
dispatcher.read(self.sock.sock, read, check)
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 64, in read
r = self.select()
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 78, in select
r = sel.select(self.ping_timeout)
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/selectors.py", line 562, in select
kev_list = self._selector.control(None, max_ev, timeout)
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 424, in _callback
callback(self, *args)
TypeError: on_close() takes 2 positional arguments but 4 were given

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/logging/init.py", line 1086, in emit
stream.write(msg + self.terminator)
AttributeError: 'int' object has no attribute 'write'
Call stack:
File "/Users/a1/Desktop/ml/main.py", line 14, in <module>
json_rpc = RealtimeAPI(url=url, channel=channel)
File "/Users/a1/Desktop/ml/bitflyer.py", line 15, in init
self.connect()
File "/Users/a1/Desktop/ml/bitflyer.py", line 22, in connect
self.ws.run_forever()
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 390, in run_forever
teardown()
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 318, in teardown
self._callback(self.on_close, close_status_code, close_reason)
File "/Users/a1/opt/anaconda3/envs/m/lib/python3.9/site-packages/websocket/_app.py", line 429, in _callback
self.on_error(self, e)
File "/Users/a1/Desktop/ml/bitflyer.py", line 35, in on_error
logger.error(error)
Message: TypeError('on_close() takes 2 positional arguments but 4 were given')
Arguments: ()

該当のソースコード

使用言語 python3.9

コード ファイル名 bitflyer.py

import logging import websocket import json import pybitflyer logger = logging.getLogger(__name__)#logging ticker_data = 0#追記 class RealtimeAPI(object): def __init__(self, url, channel): self.url = url self.channel = channel self.connect() def connect(self): self.ws = websocket.WebSocketApp\ (self.url,header=None,on_open=self.on_open,\ on_message=self.on_message, on_error=self.on_error,\ on_close=self.on_close) self.ws.run_forever() logger.info('Web Socket process ended.') """ Below are callback functions of websocket. """ # when we get message def on_message(self, ws, message): resp = json.loads(message)['params']['message'] self.set_realtime_ticker(resp) # when error occurs def on_error(self, ws, error): logger.error(error) # when websocket closed. def on_close(self, ws): logger.info('disconnected streaming server') # when websocket opened. def on_open(self, ws): logger.info('connected streaming server') input_data = json.dumps( {'method' : 'subscribe', 'params' : {'channel' : self.channel} } ) ws.send(input_data) def set_realtime_ticker(self, resp): timestamp = resp['timestamp'] product_code = resp['product_code'] volume = float(resp['volume']) ticker = [product_code, timestamp, volume] print(ticker) logger.info(f'ticker={ticker}') global ticker_data#追記 ticker_data = ticker#追記 print(ticker_data)#ここにAPIから入ってくるtickerのデータを入れたいです ---------------------------------ここからもう一つのファイル--------------------------------------- #ファイル名 main.py import logging import sys from bitflyer import RealtimeAPI logging.basicConfig(level=logging.INFO, stream=sys.stdout) # logging.basicConfig(level=logging.INFO, stream=a) #ログレベル INFO 出力先 stream=sys.stdout if __name__ == "__main__": url = "wss://ws.lightstream.bitflyer.com/json-rpc" channel = "lightning_ticker_FX_BTC_JPY" json_rpc = RealtimeAPI(url=url, channel=channel) ------------------------------コードはここまで--------------------------------------- ### 試したこと ①ファイル名bitflyer.pyのdef set_realtime_tickerにあるtickerをグローバル変数にした ②ファイル名 main.pyのlogging.basicConfigにあるstream=変数にした ### 補足情報(FW/ツールのバージョンなど) Visual Studio Codeを使用しています ここにより詳細な情報を記載してください。 よろしくお願いいたします

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

qnoir

2022/08/21 12:02

「変数に格納する」とは、具体的にいうと、質問に記載されているソースコードの中のどの変数を、どのようにしたいのでしょうか? 手元でbitflyer.pyとmain.pyを同じディレクトリに配置してmain.pyを実行したところ、tickerの内容は正常にターミナルに表示されました。
161

2022/08/21 12:30

追記依頼いただき、ありがとうございます 仰る通りターミナルに表示されるところまではできています そのターミナルに表示されているデータを、コード中には記入していないのですが ファイル名 bitflyer.py の def set_realtime_ticker内に tick_data=ticker として変数 tick_data 内に格納し それを関数の外でも使えるグローバル変数として使用したいと考えています
qnoir

2022/08/21 13:08

「それを関数の外でも使えるグローバル変数として使用したいと考えています」 →これは、何も情報を持っていない人から見ると、手掛かりがなく答えようがありません。 というか範囲が広すぎます。 エスパーを駆使して具体的なシチュエーションを勝手に作って例示することはできなくもないですが、仮にそれが質問者さんの解決したいことではなかった場合、無駄打ちになってしまいます。 (よくある「XY問題」というものに近いです) 「(グローバル変数などにすることによって)どのように使いたいのか」という「使い方」を具体的なコードも含めて、質問文に書いてください。 つまり「このようなコードで、こういう風にtickerを取り出して、このように加工したいと考えているが、現状できない」というのがわかる内容(コード)、ということです。 動かないコードでも構いません。そのコードを動かしてエラーが出ているならばそのエラーも省略せずに記載してください。
161

2022/08/22 01:11 編集

内容を修正しました、コードの変更(ファイル名 bitflyer.pyの#追記となっている部分と、最終行) とコード変更に伴って生じたエラーを記載しました よろしくお願いいたします

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

bitFlyer API

bitFlyer APIは、仮想通貨取引所bitFlyerが公開しているAIPツール。bitFlyer Lightning/API playground/chainFlyer/Echoの4種類あり、bitFlyerソフトをカスタマイズすることが可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。