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

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

ただいまの
回答率

91.37%

  • Python 3.x

    2421questions

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

  • Bitcoin

    28questions

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

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

解決済

回答 2

投稿 2017/11/28 08:41

  • 評価
  • クリップ 0
  • VIEW 94

takizawasizuku

score 10

前提・実現したいこと

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を使って作っています。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

質問のコードにある

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

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

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

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

API_KEY = 'YOUR_API_KEY'
API_SECRET = 'YOUR_API_SECRET'


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

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

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


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

投稿 2017/11/28 09:05

編集 2017/11/28 09:15

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 09: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
    というエラーコードが出てしまいました…

    キャンセル

  • 2017/11/28 09:19 編集

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

    キャンセル

  • 2017/11/28 09:23

    はい、同じ結果でした…

    キャンセル

  • 2017/11/28 10:02

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

    キャンセル

  • 2017/11/28 10: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

    となりました…

    キャンセル

  • 2017/11/28 10:29

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

    キャンセル

  • 2017/11/28 10:58

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

    キャンセル

0

os.environ[キー]

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

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

API_KEY = os.environ['himitsu']

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

投稿 2017/11/28 09:00

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 09:05

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

    キャンセル

  • 2017/11/28 09:17

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

    キャンセル

  • 2017/11/28 09:24

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

    キャンセル

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

ただいまの回答率

91.37%

関連した質問

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

  • Python 3.x

    2421questions

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

  • Bitcoin

    28questions

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