Bot

仮想通貨botの開発を本格的に始めてみる#3(23/9/2)

2023年9月2日

前回の記事に続いて、今回もbot開発の状況をまとめていきます。

今回は、こちらの記事を参考に「APIの使用」をテーマに進めていきます。

内容が長くなりそうなので、記事を小分けにして進めていきます。

APIとは

APIとはApplication Programming Interface(アプリケーションをプログラミングするためのインターフェース)の略。

アプリケーションやソフトウェアとプログラムをつなぐという働きをしますが、発信する人や立場によって様々な言い方をすることができます。

APIというものの理解についてまとめておきます。

  • 外部サーバーに対してウェブ経由で何らかの指示を出すためのコマンド
  • 指定のデータを引っ張ってくるようなもの
  • 大抵の場合、外部サーバーが用意してくれている
  • サイトを閲覧することとほぼ同義だが、APIは人間の目で見るようにはできていない。あくまでマシン専用のもの。
  • 純然たるデータ

APIの見方を理解する近道は、公式サービスが出している仕様書を読み込むことです。

解説サイトの情報は歪んでいることが多い印象です。

API仕様書は複雑ですが、検索をかけてアタリをつけながら読んでいくと良いです。

また、APIの仕様書はブックマークをしておいて辞書的な使い方を心がけると良いですね。

なお、APIという用語の解説はこちらのサイトが参考になりました。

取引所のAPIを使ってみる

APIには、プライベートAPIパブリックAPIがあります。

プライベートAPIは取引所のアカウントを持っている人が使えるものです。具体的には売買の注文に関係あるコマンドに関わるものです。

一方、パブリックAPIは価格などの公開情報を知るためのものです。こちらは誰でも使うことができるので、まずはそちらから触ってみます。

正しく入力されていれば、価格データの取得ができます。

1文字でも間違えていると、エラーが出るので注意。文字の打ち間違いは修正が面倒くさいですので、コードの間違い探し用のツールが欲しいです。

それでも、なんとか各データの取得には成功しました。嬉しい。

そして、応用編で色々いじってみることに。

bit Flyer Lightnigの場合は、こちらのAPIドキュメントを参考に様々なデータを取得していくことができます。

実際にAPIの仕様書を見ながら、対応データを引き出す練習をするしかないですね。

触っているうちに慣れてくるもんです。

ただし、このままでは記号や数字の羅列なので、必要なものをピックアップしていく必要があります。

欲しい数字を自由に取り出す

JSONを理解する

まずは、JSON(JavaScript Object Notation)形式という言葉を理解するために、 JSONJavaScriptという言葉を理解する必要がありました。

JSON形式とは、プログラミングを行う方法の一つで、人間の目で見た時にわかりやすく編集しやすいという特徴があります。

以前はCSVやXMLが主流でしたがJSONの方が圧倒的に見やすく操作しやすいことから、現在のプログラミングではJSON形式が主流になっているようです。

また、JavaScriptは、Webサイトに複雑な動きを実装するためのプログラミング言語です。

たとえば、ページ内のボタンを押すと表示されるテキストが変わるようにしたり、画像を拡大したり次々に切り替わるように設定したりすることができます。

(詳しい解説はこちらを参考にしました)

JSON形式で操作を行うということは、JavaScriptに由来した表記方法で作業をするということです。

そして、今回使用していくPythonというプログラミング言語にもJSONが使用されているのです。

要するに、Pythonの仕様を理解する上でJSONの成り立ちや仕組みを知っておくと、これから行っていくことの全体構造を理解しやすくなるのかなと思います。

数字を取り出す前に、こんな部分でも調べごとが発生するのですね。

それでは、次に進みましょう。

配列値とオブジェクト値

JSONでは、データのまとまりを表記するときに2種類の方法を使い分けています。

配列値→[]で囲まれたデータ。単一の値のまとまりを記述する。たとえば、[ 12320 , 12342 , 12246 , 12254]のように記述される。ここからデータを取得する場合は、順番(左から数えて何番目か)を指定する。データの順番は0,1,23,...と数えるので注意。いちばん初めのデータを指定するときは0番目を選ぶことになる。

オブジェクト値→{}で囲まれたデータ。2つの値(キー)をセットで記述する。たとえば、{ “btc”:1205314 , “eth”:102478 , “xrp”:89.45 , “xem”:48.42 }のように記述される。キー(左側)を指定すると(右側)が取り出される。

一般的には、この二つが入り混じって入れ子構造になっています。カッコの中にカッコがたくさん入っているイメージですね。

つまり、データの構造を見るには、いちばん内側にあるカッコを見つけるようにすれば良いのです。

そして、外側にあるカッコを見ていくことになります。

以上のことを踏まえて、bitFlyerからビットコインの買い気配値を取得するコードを書いてみました。

しかし、買い気配値を求める際に「best_bid」をどこから拾ってきたのかが分からないため、今度はそれを調べるハメになりました。

その結果、現在のティッカー情報を取得するAPI

https://api.bitflyer.jp/v1/ticker/

から得られる文字列の中にあることが分かりました。

{"product_code":"BTC_JPY","timestamp":"2018-03-12T13:46:52.657","tick_id":2658019,"best_bid":1053564.0,"best_ask":1053565.0,"best_bid_size":0.06,"best_ask_size":0.01,"total_bid_depth":2960.87621693,"total_ask_depth":3323.14800491,"ltp":1053575.0,"volume":273330.16902808,"volume_by_product":25246.19923669}

bitFlyerのAPIのページも同時に調べてみましたが、best_bidに関する補足が見当たらないので、完全に納得のいく説明にはなりませんね。

とりあえずここまでで一区切りとします。

-Bot