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

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

新規登録して質問してみよう
ただいま回答率
85.40%
WebSocket

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

215閲覧

python WebSocketAPI asyncio接続できないです

nao4a0

総合スコア5

WebSocket

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/04/30 00:45

実現したいこと

どこでつまずいてるか
わからないです
どうしたら接続できますか?

発生している問題・分からないこと

{'error': 'ERR-5106 Invalid request parameter. channel'}
パラメーターが不正な場合に返ってきます。
って返ってきます

該当のソースコード

python

1import asyncio 2import json 3import websockets 4 5async def subscribe_to_orderbook(): 6 uri = "wss://api.coin.z.com/ws/public/v1" 7 async with websockets.connect(uri) as websocket: 8 subscribe_msg = { 9 "command": "subscribe", 10 "channel": "orderbook", 11 "symbol": "BTC_JPY" 12 } 13 await websocket.send(json.dumps(subscribe_msg)) 14 15 while True: 16 response = await websocket.recv() 17 data = json.loads(response) 18 if "channel" in data and data["channel"] == "orderbook": 19 # 板情報の処理 20 print("板情報:", data) 21 22async def main(): 23 await subscribe_to_orderbook() 24 25if __name__ == "__main__": 26 asyncio.run(main())

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

{'error': 'ERR-5106 Invalid request parameter. channel'}
パラメーターが不正な場合に返ってきます。
って返ってきます

補足

特になし

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

apiの説明書は読みましたか?

https://api.coin.z.com/docs/#ws-orderbooks

板情報を取得する場合、channel は、「orderbooks」 を指定する必要があるようです。

import asyncio import json import websockets async def subscribe_to_orderbook(): uri = "wss://api.coin.z.com/ws/public/v1" async with websockets.connect(uri) as websocket: subscribe_msg = { "command": "subscribe", "channel": "orderbooks", "symbol": "BTC_JPY" } await websocket.send(json.dumps(subscribe_msg)) while True: response = await websocket.recv() data = json.loads(response) if "channel" in data and data["channel"] == "orderbooks": # 板情報の処理 print("板情報:", data) async def main(): await subscribe_to_orderbook() if __name__ == "__main__": asyncio.run(main())

投稿2024/04/30 01:07

編集2024/04/30 01:48
patapi

総合スコア781

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nao4a0

2024/04/30 01:20

https://api.coin.z.com/docs/#ws-orderbooks 今接続しようと思ってるのがGMOコインのwebsocketsなんですが GMOコインでは message = { "command": "subscribe", "channel": "orderbooks", "symbol": "BTC" } ws.send(json.dumps(message)) このように指定されてて同じようにしてるんですけど パラメーターが不正な場合に返ってきます と返ってきます
patapi

2024/04/30 02:39 編集

回答を修正しました。 ・質問のコードは「orderbook」となっている。 ・しかし、GMOのAPI説明書では、「orderbooks」となっている。 ・またAPIから戻ってくるデータに含まれている文字列も「orderbook」ではなく「orderbooks」なので、質問のコードのように if "channel" in data and data["channel"] == "orderbook": としているとと、捕まえられない。
nao4a0

2024/04/30 06:45

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問