C#でBitflyerの板情報をAPIで取得してみよう(仮想通貨の自動売買ツール(bot)制作)

Pocket

 

 

 

 

 

今回からプログラムの説明に入ります。

 

まず最初は基本となる板情報を取得してみましょう。

 

今回はC#で板情報を取得してみたいと思います。

 

最低条件ですがPythonJavaはコンソール画面に

C#はtextbox(コンソールでもOK)に

「Hello World」が表示できるという初期レベルは必須です。

 

次回はC#で取得した情報を整形する記事の予定ですが

その次はPythonでの取得方法を書く予定です。

 

では実際に下記のクラスを作ってみましょう。

 

最初に作ったFormのクラスの中に作ってしまって大丈夫です。


    /// <summary>
    /// レートを取得するクラス
    /// </summary>
    public class API_CLASS
    {
        public async Task<string> GetRate()
        {
            //HTTP 要求クラス作成
            HttpClient http = new HttpClient();
            http.BaseAddress = new Uri(“https://api.bitflyer.jp”);

           //URLのクエリパラメータ
            var query = new Dictionary<string, string>
            {
                { “product_code”, “FX_BTC_JPY” },
            };

           //APIの通信URL
            Uri path = new Uri(“/v1/board”, UriKind.Relative);

           //jsonデータ取得
            string json = await GetSend(http, path, query);

           //解放
            http.Dispose();

            return json;

       }

       internal async Task<string> GetSend(HttpClient http, Uri path, Dictionary<string, string> query=null)
       {
           //クエリパラメータを整形
           if (query != null && query.Any())
           {
               var content = new FormUrlEncodedContent(query);
               string q = await content.ReadAsStringAsync();

               path = new Uri(path.ToString() + “?” + q, UriKind.Relative);
           }

           //GET送信
           HttpResponseMessage res = await http.GetAsync(path);

           //返答内容を取得
           string text = await res.Content.ReadAsStringAsync();

           //失敗した場合は何も返さない(API側のエラーコードは返す)
           if (!res.IsSuccessStatusCode)
           {
               return “”;
           }

           return text;
       }
}


 

これが板情報とレートを取得するソースコードです。

 

板情報を取得するのに特化しているので

URLなどを変数に入れずにそのまま書き込んでいますが

今回は最初の段階ですので、ここから行きましょう。

 

 

このクラス自体を呼びだす場合は


private async void Disp()
{
     API_CLASS api = new API_CLASS();

     //表示
     string dispstr = await api.GetRate();
}


 

このような感じで呼びだし側にセットすれば表示してくれると思います。

 

ここの部分


string dispstr = await api.GetRate();



richTextBox1.Text = await api.GetRate();


 

このようにすればテキストボックスに表示されます。

 

 

説明する前に

外部ファイルとしてNewtonsoft.Jsonが必要となってきますので

こちらだけ外部からダウンロードし、参照に追加してください。

その他のは基本的にはVisual Stadioに入っている参照で追加可能です。

 

 

 

説明ですが、今回はソースのコメントだけで説明が完成しているかと思います。

 

ここに長々と書いてしまっても同じような説明になってしまい読みづらくなってしまうので

理解するコツとしては1行ごとにコピー&ペーストして確認しながら作っていけば

今回のソースぐらいなら理解できると思います。

 

 

ただasync Task部分だけ簡単に説明したいと思います。

 

これは非同期処理しているという意味

「いろいろなプログラムが好き勝手にやっているよ」

という感じで覚えてください。

 

つまり他の「プログラム部分と同期していないよ」という非同期です。

 

今回だとあまり意味のない処理ではあるのですが

後々、この処理が必要となってくるので

最初から非同期処理として書いています。

 

その時になったら改めて説明したいと思いますので

今はそのような「おまじない」程度で覚えておいてください。

 

 

また、このソースコードは理解できなくても大丈夫です。

 

今回のソースコードで板情報などの

「Public API」は、ほとんど取得できます。

 

その為、そのまま使用しても問題ありません。

 

クエリパラメーターがあるかないか程度の違いなので

 


//jsonデータ取得
string json = await GetSend(http, path);


 

ここの部分を上記のように最後を消してしまえば

取得できると思います。

 


//HTTP 要求クラス作成
HttpClient http = new HttpClient();
http.BaseAddress = new Uri(“https://api.bitflyer.jp”);


 

この部分と

 


//APIの通信URL
Uri path = new Uri(“/v1/board”, UriKind.Relative);


 

この部分のURLに関しては

前に書いた記事を読んでもらえばわかると思います。

 

仮想通貨の自動売買ツール(bot)制作の「REST API」のURLは2つに分割される

 


http.BaseAddress = new Uri(“https://api.bitflyer.jp”);


 

こちらが「固定のURL部分」で

 


Uri path = new Uri(“/v1/board”, UriKind.Relative);


 

こちらが「変動するURL部分」です。

 

他の取引所でもこの2つの部分を変更するだけで取得は

ほとんど可能です。

 

 

 

 

では実際にbitflyerの板情報を取得するのを動かしてみると

 


{“mid_price”:716253.0,”bids”:[{“price”:716250.0,”size”:0.25},{“price”:716229.0,”size”:0.2},{“price”:716227.0,”size”:0.05},{“price”:716209.0,”size”:1.26754826},・・・・・


 

このような情報が取得できれば成功です。

試してみてください。

 

 

次回、これを情報として変換し、扱えるようにしてみましょう!

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です