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

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

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

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

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

Q&A

1回答

641閲覧

APIレスポンスの'id'キーについて

madaishi

総合スコア0

Python

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

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

0グッド

0クリップ

投稿2023/04/25 02:41

編集2023/04/25 04:55

実現したいこと

エラーを解消したい
APIレスポンスに含まれるキーを知りたい
'id'キーに代用できるキーを知りたい

前提

暗号資産の自動売買botをpythonで作成している中で、
売りの指値注文をするコードに
last_sell_order_id = r['id']
というコード書いているのですが、エラーが発生してしまいます。
このエラーを解消したい

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

Traceback (most recent call last): File "C:\Users\○○\Desktop\○○\○○.py", line 82, in <module> last_sell_order_id = r['id'] KeyError: 'id'

該当のソースコード

def order(self, params): endpoint = self.url + '/api/exchange/orders' return self._request(endpoint=endpoint, params=params, method='POST') else: # 買い注文価格、売り注文価格を計算 sell_price = int(ask - SPREAD_THRESHOLD / 6) buy_price = int(bid + SPREAD_THRESHOLD / 6) # 注文価格の差がマイナスになる場合は注文を入れない if sell_price - buy_price > 0: # 指値売り注文 params = { 'pair': 'btc_jpy', 'order_type': 'sell', 'amount': AMOUNT, 'rate': sell_price } r = coincheck.order(params) send_message_to_line(f'Sell Order: {r}') last_sell_order_id = r['id'] latest_trade_time = time.time()

試したこと

rをptintした結果
{'success': False, 'error': 'Amount BTC の所持金額が足りません'}

chatGPTでエラー解消を試みたが、
エラーが発生したことをメッセージで送る、などの対処法のみで、
根本的な解決ではなかった

補足情報(FW/ツールのバージョンなど)

コインチェックAPIを使用
python 3.9.x
初心者のため必要な情報等ございましたら、ご連絡いただければ幸いです。

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

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

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

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

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

AbeTakashi

2023/04/25 04:02 編集

何を根拠に'id'が含まれてると思ったのか? どういうAPIを叩いてるのか? 質問文の内容やソースコードが断片的すぎて第三者には回答が出せないと思います。ソースコードを提示するにしても、もう少し前半から出さないと意味がないでしょうし、どういう目的でどういうAPIを叩いてるかなどの情報も合わせて必要になるかと思います。そもそもrの値の中身をpprint関数とかで覗いてみたりはしましたか?
quickquip

2023/04/25 04:22 編集

質問したいことは変わったのですか? メッセージに「Amount BTC の所持金額が足りません」と書いてあって、'success': False というデータも見えているなら解決策は明らかだと思うので、ここでいったい何を聞きたいのか伝わりません。
madaishi

2023/04/25 04:47

失礼いたしました。 お聞きしたかった内容は Traceback (most recent call last): File "C:\Users\○○\Desktop\○○\○○.py", line 82, in <module> last_sell_order_id = r['id'] KeyError: 'id' の部分でした。 先ほど考え直してみて、恐らくではありますが、 last_sell_order_id = r['id']は最後に売り指値をした注文のID番号を記録したいのですが、APIのレスポンスにID番号が含まれていなかったため、エラーになったのではないかと推測しています。 (呼び出すAPIが異なっていたためかと思います)
quickquip

2023/04/25 06:15 編集

> お聞きしたかった内容は > Traceback (most recent call last): > File "C:\Users\○○\Desktop\○○\○○.py", line 82, in <module> > last_sell_order_id = r['id'] > KeyError: 'id' > の部分でした。 だから、その部分の、どのあたりに不思議なことがあって、何がききたいんですか? ということが書かれてないですよ、という話をしています。 > 注文のID番号を記録したい 「Amount BTC の所持金額が足りません」という理由で失敗したなら"注文はされてない"ですよね。自分が持ってない額の注文を出しても"注文を受け付けるはずない"ですよね。 注文されなかった時の"注文ID"っていったいなんですか? そんなものが現実世界に存在しますか? "コンビニで何も買わずに出てきた時の支払い番号"みたいな謎の概念ですよね。 (正解はすでに回答がでているのでこの欄に書いちゃいましたが)
quickquip

2023/04/25 06:16

success という単語の意味が分かってない 'success': False の意味が分かってない Amount BTC の所持金額が足りません という文の意味が分かってない のどれかでしょうか
guest

回答1

0

last_sell_order_id = r['id']

まずは'id'キーが含まれてないことが分かったと思いますので、こちらの処理を全面的に変更する必要があると思います。'success'キーの値を検証して、成功なら〜をする、失敗なら〜をする、みたいな処理にすればいいと思います。都度都度どういう値になってるかをpprintで確認しながら処理を作っていけばよいのではないでしょうか? 何の根拠もなく「'id'キーは存在する」というような考えでコードを書いていくと上手くいきません。

投稿2023/04/25 04:13

AbeTakashi

総合スコア4556

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問