】ツイートシェアはてブLINEPocketマッチョな男性ccxtの解説が多めだけど、ccxtを使わずにAPI認証やって好き勝手に発注かけてみたいそんな初心者に向けてPythonでAPI認証を行う方法について詳しく解説しました。ccxtは簡単で初心者は簡単に使えるようになっていますが裏で何をやっているのかよくわかりませんよね。ビットコインバーゲンでは、APIキーを用いなければ使えない残高の確認を行う流れを紹介し、順番に解説していきます。headers)pprint(res.json())今回解説するのは上のコードになります。上のコードを実行すると結果としてbitFlyerで現物保有している残高が返ってきます。'LSK'}]順番に解説していきます。headers)pprint(res.json())行いたい処理は、API(bitFlyerのサーバー)へ命令を送り欲しいデータ、ここでは残高データを送り返してもらうことです。データはJSON形式と呼ばれるものになり、残高データは個々人によるプライベートなものですのでAPIキーを使って本人確認ができればデータを取得することができます。そのために必要なライブラリです。requests」は、GETメソッド、POSTメソッド(後ほど解説)などを利用するためのライブラリのことです。datetime」は日付を取得するためのライブラリのことです。json」はJSON文字列(よく利用されるデータの並べ方の規格)を扱うためのライブラリのことです。pprint」はターミナル(コマンドプロント)に出力されるデータをいい感じに開業させてくれるライブラリです。(”from”はpprintライブラリの中にさらに入っているオブジェクトを指定するコードです。hmacこれら二つのライブラリはAPIキー(APIシークレットキー)を暗号化して盗聴されないようにするためのライブラリです。ここでの盗聴とは誰かがどのサーバー(Webサイト)へ命令を送る(ページの移動とか)をしたのかを追跡することです。ccxtなどの便利なライブラリを利用していると勝手にやってくれていますがセキュリティ上はとても大切なことを行うライブラリになります。草猫店長ちなみにライブラリとは再利用可能なモジュール(処理のひとまとまり)をライブラリと呼ぶにゃあ。どちらでも指すものは同じだけどライブラリはモジュールから分類されるものとも言えるにゃあ。コネ人によって呼び方が違うので混乱しますねえ。headers)pprint(res.json())当然ですがAPIキーは必須です。API系(URLにデータが入っているAPI)のものになるのでURLも指定しないといけません。“GET”とはそのまま日本語とほぼ変わらない意味です。「データを取得します」というAPIサーバーへ送る命令です。認証するためにはいつ何時何分に認証したのかを知らせる必要があるためタイムスタンプ(時刻)も用意しておきます。時刻とデータを入れて欲しいURLを組み合わせたmessage変数も準備しておきます。message変数だけでは誰の命令か分からないので、APIキーをセットにかつ、盗聴されないために暗号化して送信する必要があります。そのための変数「signature」も準備しましょう。APIキー、ここに自分のAPIキー(シークレットキー)も入力しましょう。"あなたのAPIシークレットキー"次にURL(URLの中にデータが入っているため)を指定します。“/v1/me/◯◯”と書かれているけど、この◯◯の部分を自由に変えると取得できるデータも変わるということだにゃあ。初心者に難しいと思われるのはsignature変数の内容だと思います。).hexdigest()hamcはライブラリとしてimportしたものでした。そのhmacをhmac.new()という形で中に変数を入れて使います。Code)とは、ハッシュ関数と呼ばれる暗号処理を使ってメッセージを暗号化したコードの略称です。hmacを使うことで、APIキーや、メッセージ(ここでは欲しいデータを受け取るURLとタイムスタンプ)を送信時に誰かに盗聴されないようにしつつ暗号化してくれます。最近のWebAPIではスタンダードの一つとなっています。試しにsignatureの中のデータをprint()で出力してみます。).hexdigest()print(signature)すると結果として以下のようなハッシュ値(ハッシュ関数を通した後の結果)が取得できます。Pythone81720cb8ebb85474bd4acfebfed4f7156e3bd4ff404d1de25fdedc7c1a11b9a1e81720cb8ebb85474bd4acfebfed4f7156e3bd4ff404d1de25fdedc7c1a11b9ahmacの中ではSHA256と呼ばれるハッシュ関数を使って暗号化します(hashlib.sha256の部分)。ブロックチェーンについて調べた人であれば聞いたことがあるハッシュ関数だと思います。中のデータが1文字でも異なると全く違うハッシュ値が生成されるのがハッシュ関数の特徴です。途中のbytearray()はコンピューターが読める文字(バイナリデータ)に変換する処理です。終わりのhexdigest()ではデータの連結を行なっています。headers)pprint(res.json())ヘッダー情報とは、サーバー側が読み込むための情報になります。人間のための情報というよりもサーバー側が正しくブラウザを表示するために必要となる情報です。先ほど準備した変数を設定してあげます。'application/json'}全てのWebページのサーバー操作にヘッダー情報がマストな訳ではなく、ある程度は自動でサーバー側が処理してくれますがそれで正しくブラウザ側が表示される保証はありません。APIを使った操作に関してはheader情報はマストです。‘application/json’となっていますが、これはJSON文字列のことですね。headers)pprint(res.json())最後に、ここまで準備した変数とヘッダー情報をAPIサーバーへ送ってあげましょう。headers)で取得して、結果をres変数に代入します。pprint()を使っていい感じに改行しながら出力させます。res.json()と書かれていますが、res変数をJSON形式で出力しますという意味ですね。GETとPOSTの違いを知っておこう今回は説明をカンタンにするためにGETでデータを取得しました。"GET"ですが実際に自動売買を行う際に頻繁に利用するのはPOSTの方になります。POSTを説明する前にこのGETやらPOSTってそもそも一体何かと言えば、サーバーとのやり取りを行うための規格、HTTP(HTTPメソッド)の一種になります。POSTとGETはサーバーへの呼びかけ方(命令)が異なりますGET→データをちょうだい〜POST→データを送るよ〜この違いだけです。GETはシンプルなので、データをAPIサーバーへ要求するだけで済みます。POSTはデータを送るため、当たり前ですがこちら側でデータを準備しないといけません。次の項でparams変数にデータを入れて実際にPOSTして見ましょう。headers)print(res.json())変化・追記のあるところだけハイライトにしました。注文を行うためにpath変数のURLを変え、APIサーバーへ送るデータとしてparam変数を用意しました。json.dumpsはparam変数をサーバーが読み取れるJSON形式へ変換(エンコード)しています。body」が追記されています。POSTに送りたいデータをdata変数に格納しているという意味ですね。'JRF20190709-133449-183882'}実行してみると指値注文ができたことがわかります。最初はbitFlyerライトニングのページを見ながら発注して見てください。数秒後に反映されるはずです。まとめAPI認証はややこしいものが多いです。WebサービスのAPIを使っていくのであればなんどもぶつかると思われるので少しでも理解できれば今後にも応用できます。Pythonを使って仮想通貨(ビットコイン)で売買注文する方法を読んでみてください。】を読んでみてください。関連する記事の一覧こちらの記事も読まれています。しない仮想通貨」をテーマに1万円から始める方法をブロードキャストするブログ、ビットコインバーゲン運営者。少額botトレードの組み合わせ投資の提唱者です。バイヤー時代の目利き力でお得な情報をまとめています。金融としても技術としてもブロックチェーンは好きで、ブロックチェーン先進国エストニアにも訪問済み。フロントエンドから簡易的なDAppを作れるようにミニWebサービス開発もやってます。