書く前に、いくつかのタスクを設定しました。
- ライブラリ内のすべてのAPI機能を実装します。
- メソッドの名前と戻り値は、公式ドキュメントのメソッドと正確に一致する必要があります。
- 他の人による変更を含め、変更に便利にします。
- 戻り値はできるだけ使用できる状態にしておく必要があります。
- APIメソッドに基づいて追加機能を追加します。
- Andoidとの互換性を持たせます。
GitHubがホスティングに選択されました。記事の最後にリンクがあります。
これらすべてをどのようにまとめるかを考えると、次のクラス階層が生まれました。
![画像](https://habrastorage.org/files/315/687/8de/3156878dec4542b6a70d8a15ba7cbe5b.png)
クラスの2つの主要なグループは、PrivateBaseClassとPublicBaseClassで、それぞれプライベートAPIセクションとパブリックAPIセクション用です。 PrivateBaseClassは、反復可能な結果と反復不可能な結果を返すメソッドに分割されます。 それらはすべてに共通するものを含むCommonClassに基づいています。 プライベートネットワークは、3DESでの暗号化だけでなく、プライベートリクエストをデバイスに保存する際にキーを操作するために使用されます。 StringCrypterはこれを支援します。 そして、TradeApiクラスは構成を完了します。構成はすべての機能を吸収し、ユーザーとの対話のポイントとして機能します。 確かに、TickerやInfoなどの個別のクラスの使用を禁止しているのは、機能以外に他に何も必要ない場合です。
jsonを使用するために、Jacksonライブラリーが選択され、それ以外のすべてにはApache Commons Codecが選択されました。
そして今、例として、これらすべての原因
アルゴリズムはおよそ次のようになります。必要なメソッドを公式ドキュメントから選択し、パラメーターを設定し、実行し、結果を取得します。
あなたが望むかもしれない最初の事はあなたのお気に入りのペアの価格を見つけることです。 そして、これを行うのは非常に簡単です:
TradeApi tradeApi = new TradeApi(); tradeApi.ticker.addPair("btc_usd");// tradeApi.ticker.addPair("ltc_usd"); tradeApi.ticker.addPair("nmc_usd"); tradeApi.ticker.runMethod();// while (tradeApi.ticker.hasNextPair()) {// tradeApi.ticker.switchNextPair();// System.out.println(tradeApi.ticker.getCurrentLast());// }
結果は次のようになります。
368.98
4.216
1.02
次に、残高を受け取ります。アカウントでキーを取得できます(もちろん、これらは無効です)。
String aKey = "TK8HD88A-ENLZZBCW-P4L5JYVR-18K9NZZP-CYQ7WKKH";//API- String aSecret = "b7738a9f4d62da1b6ebdcd7ff2d7b5ddb93de88b71f017ae600b7ab3ed5b7015";//SECRET TradeApi tradeApi = new TradeApi(aKey,aSecret);// tradeApi.getInfo.runMethod();// , System.out.println(tradeApi.getInfo.getBalance("usd"));//
結果は次のようになります。
0.25
最終的な実装で毎回キーを入力したくないが、平文で保存したくない場合は、組み込みの暗号化を使用できます。 コードは、キーの転送を除いて同じです。 この場合、設計者は暗号化されたAPIキー、シークレット、およびパスワードを渡してそれらを復号化する必要があります。
String aKey = "TK8HD88A-ENLZZBCW-P4L5JYVR-18K9NZZP-CYQ7WKKH";//API- String aSecret = "b7738a9f4d62da1b6ebdcd7ff2d7b5ddb93de88b71f017ae600b7ab3ed5b7015";//SECRET String password = "12345";// String encryptedKey = tradeApi.encodeString(aKey, password);// String encryptedSecret = tradeApi.encodeString(aSecret, password);// tradeApi.setKeys(encryptedKey, encryptedSecret, password);// ,
パスワードが正しくない場合、例外がスローされます。 有効なキーとシークレットがインストールされているが、間違ったパスワードで暗号化されたキーをインストールしようとすると、例外もスローされますが、古いキーは引き続き機能します。
そして今、おそらく最も興味深いのは、公式APIを使用して作成された追加機能です。
貿易から始めましょう。 ドキュメントに記載されているネイティブのTradeメソッドに加えて、少しスマートなメソッドを追加しました。 TradeとInfoの2つのメソッドを同時に使用します。 エラーの原因を迅速に診断するために、価格を許容限度に自動的に切り上げ、異なるメッセージで例外をスローします。
String aKey = "TK8HD88A-ENLZZBCW-P4L5JYVR-18K9NZZP-CYQ7WKKH";//API- String aSecret = "b7738a9f4d62da1b6ebdcd7ff2d7b5ddb93de88b71f017ae600b7ab3ed5b7015";//SECRET TradeApi tradeApi = new TradeApi(aKey,aSecret);// Trade trade = tradeApi.extendedTrade("btc_usd", false, "600", "0.01");//false - , true - :) if (trade.isSuccess()){ System.out.println(trade.getReceived());// }
結果:0
つまり、執筆時点で600ビットで0.01ビットコインを販売することは不可能だったため、何も入手できませんでした。
すべての種類のアラームで使用するための次の快適な価格差の方法:
TradeApi tradeApi = new TradeApi(); for (int i = 0; i < 3; i++) { System.out.println(tradeApi.priceDifference("btc-usd", 600.0, 10000)); }
結果:
233.39
233.39
233.103
このメソッドは、ペアの名前と現在の価格を比較する価格境界、およびミリ秒単位の遅延時間を受け入れます。これは、アラームを作成するなど、メソッドがループで使用される場合に役立ちます。
そして最後に、tryMaximumBuy(String pairName、long再使用可能gegeMillis)とtryMaximumSell(String pairName)が残ります。 これら2つの中で最も興味深いのは、tryMaximumBuyメソッドです。 彼は、選択したペアの通貨を最大限に購入しようとしています。 2番目のパラメーターは、メソッドで使用されるデータが古いと見なされ、更新する必要があるまでの時間です。 残念ながら、仕事の例を示すことはできません。なぜなら、それは私にとって無料ではないからです。
もちろん、このライブラリの可能性はこれに限定されず、おそらく、選択した小数点以下の桁数に丸めるなど、自分にとって他の便利な小さなものを見つけることができます。購入時に数量と価格を扱うときに便利です。 ライブラリを使用すると、多くのメソッドを記述したJavadocをダウンロードすることもできます。
結論として、このライブラリがあなたにとって有用であり、暗号通貨コミュニティのさらなる発展に役立つとともに、Exchange APIを最新の状態に保つためにクラスのセットを維持する問題を取り除くことを願っています。 これをやります。
記事の冒頭で約束されたリンク
ライブラリを使用してリポジトリにリンクします: github.com/alexandersjn/btc_e_assist_api
APIプライベートドキュメントリンク: btc-e.com/tapi/docs#Trade
API公開ドキュメントリンク: btc-e.com/api/3/docs
また、使用例として、ライブラリリポジトリの説明にbtc-eのAndroidクライアントへのリンクがあります。 また、そのソースコードはリポジトリにあります。
ご清聴ありがとうございました。