つまずきCCXT[config.jsonファイルエラー対応]

本記事では非エンジニアの筆者(大学の講義で2単位だけC言語を履修)が儲かるか爆損するかわからない仮想通貨bot開発のため主にネット情報をもとに日々悪戦苦闘、のたうち回る記録である。コードはPythonを使用。  Pythonは社会人になってから超入門本と入門本2冊で独学し、簡単な文法程度は使える程度。自分の備忘録用としての色が強いのであまり他人が読むのに適した文章ではないかもしれない。
 基礎がおろそかなままBotプログラミングにチャレンジしておりますので、今後の成長のためにお気づきの点があればご指摘・ご指導お待ちしております。

本文


 Botter御用達ライブラリ CCXTでは、コード初めに各取引所へのアクセス準備?(初心者の私はおまじないみたいなものと認識している。)としてexchange classをインスタンス化する必要がある。その際、注文などのPrivate APIを操作するためには引数としてapiKeyやsecretなどのCredentials情報を渡さなくてはならないが(引数として渡さない方法もあるがなんかめんどくさそう…)、このCredentials情報を平文で書き込むとセキュリティリスクが高い(なぜかは詳しくは理解していない)。そのためCCXT公式ドキュメントでも推奨されていない。
以下は具体的に平文でCredentials情報を渡してインスタンス化している例(ccxt公式ドキュメントより)

import ccxt

# any time
bitfinex = ccxt.bitfinex ()
bitfinex.apiKey = 'YOUR_BFX_API_KEY'
bitfinex.secret = 'YOUR_BFX_SECRET'

# upon instantiation
hitbtc = ccxt.hitbtc ({
    'apiKey': 'YOUR_HITBTC_API_KEY',
    'secret': 'YOUR_HITBTC_SECRET_KEY',
})

# from variable id
exchange_id = 'binance'
exchange_class = getattr(ccxt, exchange_id)
exchange = exchange_class({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
})

この問題に対処するため、別ファイルとしてconfig.jsonファイルを用意し、その中にCredentials情報を書き込み管理すると共にメインコード中でconfig.jsonを呼び出すことにした。このやり方については他に様々な方法があるらしいが唯一自力で理解できたやり方がこれだ。環境変数を使うやり方や .iniを使う方法もあるらしい。

import ccxt
import json

config = json.load(open('config.json', 'r'))

exchange = ccxt.binance(config['binance'])
#config.json

{
    "binance":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    },
    "okex":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    },
    "bybit":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    },
    "kucoin":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    },
    "kucoinfutures":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    },
    "bitget":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    },
   "mexc":{
        "apiKey":"YOUR_HITBTC_API_KEY",
        "secret":"YOUR_HITBTC_SECRET_KEY",
        "password":""
    }
}

ここからが本題だが、このconfig.jsonファイルの読み込みに際して何度かエラーがでたので備忘録として残したい。

#config.jsonファイルの読み込み部分

config = json.load(open('config.json', 'r'))

まずはこちらのエラー。

Expecting value: line 30 column 20 (char 1024)

該当行の line 30 column 20 には以下がある。

#line 30 column 20

"password":'xxxxxxxx'

こちらはよく見るとシングルクォーテーション「'」が使われてる。これをダブルに修正するとエラーは起きなかった。どうやらコピペの際にシングルがまぎれたようだ。Python記事ではところどころシングルが使われているからか。
 続いてこちらのエラー。

Expecting property name enclosed in double quotes: line 11 column 5 (char 379)

該当行周辺は以下がある。

#line 11 column 5

    "okex":{
        "apiKey":"xxxxxxxxx",
        "secret":"yyyyyyyyy",
        "password":"zzzzzzzzz",
    },

よく見ると辞書データの最後の"password"行によけいなコンマ「,」があり、これが原因であった。削除するとエラーは消えた。
 空白文字や空白行がjsonファイル内に紛れていても実験したうえでは特にエラーは出なかった。しかしエラーが出たという報告っぽいものもあるので念のため注意しよう.。

今回は以上。

この記事が気に入ったらサポートをしてみませんか?