まだまだ続く入門編。
APIの動きを理解したので、今度は、HTTPリクエストを実現するためのプログラミングについてです。
PHPを使った方法を説明します(私がPHPしかわからないからですが…)。
メインは、暗号化したデータをどうやって、HTTPリクエストするかという部分です。
PHPには、HTTPリクエストをするための「cURL(カール)」という関数が用意されています。
cURLは下記の順番で実行します。
//cURL セッションを初期化する resource curl_init ([ string $url = NULL ] ); //cURL 転送用オプションを設定する bool curl_setopt ( resource $ch , int $option , mixed $value ); //cURL セッションを実行する mixed curl_exec ( resource $ch ); //cURL セッションを閉じる void curl_close ( resource $ch );
curl_setoptには、たくさんのオプションがあり、これで何を設定したらよいのか迷ってしまいます。
今回は、アカウント情報取得のZaif(ザイフ)取引APIを使って説明します。
設定できるオプションは、こちらにあるので確認できます。
//API_KEY と API_SECRET_KEY $API_KEY = 'zzzzzz-zzzzzz-zzzzzz-zzzzzz-zzzzzz'; $API_SECRET_KEY = 'aaaaaaa-aaaaaaa-aaaaaaa-aaaaaaa-aaaaaaa'; //zaif 取引API url $zaif_api_url = "https://api.zaif.jp/tapi"; // アカウント情報取得 method名 $method = "get_info"; //ナンス $nonce = microtime(true); //リクエストボディ $body = http_build_query( array( "nonce"=>$nonce, "method"=>$method ) ); //HMAC署名 $signature = hash_hmac("sha512", $body, $API_SECRET_KEY); $headers = array( "Sign: {$signature}", "Key: {$API_KEY}" ); //cURL セッションを初期化 $curl = curl_init(); if ($curl == FALSE) { printf('<div>[ERR] curl_init(): ' . curl_error($curl) . '</div><div><a href="order.php">戻る</a></div>'); die(1); } //curl set options設定 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_URL, $zaif_api_url); curl_setopt($curl, CURLOPT_POST, TRUE); //ヘッダーに署名とボディに平文を設定 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); //cURL セッションを実行する $response = curl_exec($curl); //レスポンスをjson decode $json_decode = json_decode($response, true); if ($json_decode == NULL) { printf('<div>[ERR] json_decode: ' . curl_error($curl) . '</div><div><a href="order.php">戻る</a></div>'); die(1); } cURL セッションを閉じる curl_close($curl); var_dump($json_decode);
リクエスト送信の流れは、下記のような感じになります。
- $API_KEYと$API_SECRET_KEYは、Zaifの自分のアカウントから取得します。
- エンドポイントやリクエストに必要な情報等は、Zaif api document v1.1.1 ドキュメント 現物取引APIから確認します。
- 情報取得のmethodは、get_infoです。
- リクエストボディを作成して、HMAC署名を行います。
- cURL セッションを初期化
- POSTでリクエストするので、CURLOPT_POSTを設定。
CURLOPT_HTTPHEADERに署名を設定。
CURLOPT_POSTFIELDSに署名前のリクエストデータを設定。 - cURL セッションを実行
- サーバーから帰ってきたレスポンスをjsonデコード。
- cURL セッションを閉じる。
- var_dumpで情報確認。
今回は、情報取得のmethodですが、methodが注文にかわれば、リクエストボディも注文用に変更になります。設定する内容は、APIドキュメントを見て確認する必要があります。
取引ロジックを考えれば自動売買もできるようになります。が、Zaifのサーバーが貧弱なのが問題です。