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

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

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

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

Bitcoin

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

Q&A

解決済

2回答

1210閲覧

python3.6で、api認証が上手くいかない

takizawasizuku

総合スコア24

Python 3.x

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

Bitcoin

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

0グッド

0クリップ

投稿2017/11/27 23:41

###前提・実現したいこと
python3.6でシステムを作っています。
https://github.com/bitbankinc/python-bitbankcc
上記のライブラリを用いて、bitbankという仮想通貨取引所のapiを使うためのプログラムを作成中です。
apiを用いて、取引所の注文を行いたいのですが、apiキーをうまく受け取ってくれません
どのようにすればエラーが解決できるでしょうか。
ご教授ください。
###エラーコード

#(himitsu)の部分は、本来のapikeyとapisecretの部分です。 C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\python.exe C:/monacoin/test.py Traceback (most recent call last): File "C:/monacoin/test.py", line 8, in <module> API_KEY = os.environ['himitsu'] File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__ raise KeyError(key) from None KeyError: 'himitsu'

###該当のソースコード

# -*- coding: utf-8 -*- from time import sleep from pprint import pprint # 表示用(jsonをきれいに表示してくれる) import math import python_bitbankcc import os,json pub = python_bitbankcc.public() API_KEY = os.environ['himitsu'] API_SECRET = os.environ['himitsu'] if __name__ == '__main__': prv = python_bitbankcc.private(API_KEY, API_SECRET) bitbankbuytrade = prv.order(pair='mona_jpy', price=300, amount=9, side='buy', order_type='limit') print(bitbankbuytrade)

###補足情報(言語/FW/ツール等のバージョンなど)
OSはwindows10,PyCharmを使って作っています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

質問のコードにある

API_KEY = os.environ['himitsu'] は 「himitsu」 という環境変数の値を読み出して API_KEY に設定するための処理です。

API_SECRET=os.environ['himitsu'] も同様

で、エラーの内容は himitsu と言う名前の環境変数が無いよとなっておりますので、たぶん無いのでしょう。

とりあえずは、この部分は

Python

1API_KEY = 'YOUR_API_KEY' 2API_SECRET = 'YOUR_API_SECRET'

と直接キーをコードに書き込んで動作を確認するとよいのではないでしょうか。

もしコードを公開する必要が生じており、このキーを直接書き込んだ箇所を隠蔽する必要がある場合は、リンク先のオリジナルのコードのように

Python

1API_KEY = os.environ['BITBANK_API_KEY'] 2API_SECRET = os.environ['BITBANK_API_SECRET']

として、環境変数を設定するほうが良いかもしれません。

投稿2017/11/28 00:05

編集2017/11/28 00:15
magichan

総合スコア15898

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

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

takizawasizuku

2017/11/28 00:09

ありがとうございます! 早速試してみたのですが、 C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\python.exe C:/monacoin/test.py Traceback (most recent call last): POST: {"pair": "mona_jpy", "price": 300, "amount": 9, "side": "buy", "type": "limit"} File "C:/monacoin/test.py", line 12, in <module> bitbankbuytrade = prv.order(pair='mona_jpy', price=300, amount=9, side='buy', order_type='limit') File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 93, in order 'type': order_type File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 68, in _post_query headers = make_header(data, self.api_key, self.api_secret) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 47, in make_header 'ACCESS-SIGNATURE': sign_request(api_secret, message) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 37, in sign_request h = hmac.new(key, query, sha256) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 144, in new return HMAC(key, msg, digestmod) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 42, in __init__ raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__) TypeError: key: expected bytes or bytearray, but got 'str' Process finished with exit code 1 というエラーコードが出てしまいました…
magichan

2017/11/28 00:19 編集

すみません。回答の一部にタイポがありました。 × API_SECRET = `YOUR_API_SECRET` ○ API_SECRET = 'YOUR_API_SECRET' これでも同じ結果ですか?
magichan

2017/11/28 01:02

ん? hmac() の第一引数として、bytearray型を要求しているのに対して str型を渡してエラーとなっているようです。 このAPIは、もしかしたら Py2用なのかもしれませんね。 試しに API_SECRET = b'YOUR_API_SECRET' としたらどうなりますか?
takizawasizuku

2017/11/28 01:09

POST: {"pair": "mona_jpy", "price": 300, "amount": 9, "side": "buy", "type": "limit"} Traceback (most recent call last): File "C:/monacoin/test.py", line 11, in <module> bitbankbuytrade = prv.order(pair='mona_jpy', price=300, amount=9, side='buy', order_type='limit') File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 93, in order 'type': order_type File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 68, in _post_query headers = make_header(data, self.api_key, self.api_secret) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 47, in make_header 'ACCESS-SIGNATURE': sign_request(api_secret, message) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\site-packages\python_bitbankcc\private_api.py", line 37, in sign_request h = hmac.new(key, query, sha256) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 144, in new return HMAC(key, msg, digestmod) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 84, in __init__ self.update(msg) File "C:\Users\hatanaka\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 93, in update self.inner.update(msg) TypeError: Unicode-objects must be encoded before hashing Process finished with exit code 1 となりました…
magichan

2017/11/28 01:29

このライブラリ(python-bitbankcc)はやはり py2 用かなと思い、githubを見てみたのですが、この部分は既に修正されれおりますね。 ということで、githubから 最新版(0.0.3) をインストールすると直るかと思います。(その際は、上で追加した "b"は削除してください)
takizawasizuku

2017/11/28 01:58

ありがとうございます!!!!!!!!!!!!! なぜか最新版がインストールされていなかったようで、0.0.3のものに書き換えたら無事orderできました!!! 本当に感謝しております!!!!
guest

0

os.environ[キー]

は、「キー」に定義されていない環境変数名を指定するとご質問のようなエラーになると思います。(ここでのキーは秘密鍵のキーではなく、dict的なインターフェースに指定するキーのことだと思います)

githubのpython_bitbankccにアクセスできなかったのでpublic()が何をしているかわからなかったのですが、それが影響しないと仮定すると・・・

API_KEY = os.environ['himitsu']

でこのエラーが出るなら環境変数himitsuが設定されてなかったことが原因だと思いました。

投稿2017/11/28 00:00

KSwordOfHaste

総合スコア18394

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

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

takizawasizuku

2017/11/28 00:05

ありがとうございます! public()は影響していないと思います。 環境変数とは具体的にどのように設定するのでしょうか? ライブラリを見よう見まねでやっているもので…
KSwordOfHaste

2017/11/28 00:17

Windowsだと色々やりかたがありすぎて・・・w; cmd(コマンドプロンプト)、power shell、その他のシェル(bash on Ubuntu, Git Bash, cygwin, etc.)それぞれにやりかたがあると思うので調べてみてください。なお、キーをプログラムコード上にハードコードするのは普通なら避けると思いますが、自分専用のコードで、PC外に決して持ち出さないのなら・・・ありなのかも知れません。誰かに見られたらその瞬間にOUTということはおわかりですよね?
takizawasizuku

2017/11/28 00:24

ありがとうございます。自分で調べてみます。 あくまで注文用のapiで、出金には使えない上に、二段階認証を設定してあるので大丈夫だと認識しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問