키움증권 REST API 시세조회 > 시분요청
이 프로그램 이전에 토큰을 받아야 되기 때문에 토큰 받는 프로그램은 아래를 참고하면 됩니다.
시세 조회 하는곳의 tr_id 값만 변경하면 다른것도 사용하는데는 문제 되지 않습니다.
$aAuth2Token = fn_au10001($aParams);
$accessToken = $aAuth2Token['token'];
sleep(1);
// print_r($accessToken);
// echo $accessToken . PHP_EOL;
// exit;
// 주식호가요청
function fn_stock_data($token, $data, $cont_yn = 'N', $next_key = '', $tr_id = '') {
// 1. 요청할 API URL
// $host = 'https://mockapi.kiwoom.com'; // 모의투자
$endpoint = '/api/dostk/mrkcond';
$url = $host . $endpoint;
// 2. header 데이터
$headers = [
'Content-Type: application/json;charset=UTF-8', // 컨텐츠타입
'authorization: Bearer ' . $token, // 접근토큰
'cont-yn: ' . $cont_yn, // 연속조회여부
'next-key: ' . $next_key, // 연속조회키
'api-id: ' . $tr_id, // TR명
];
// 3. http POST 요청
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$responseHeaders = substr($response, 0, $headerSize);
$responseBody = substr($response, $headerSize);
curl_close($ch);
// 4. 응답 상태 코드와 데이터 출력
$headerArray = [];
$headerLines = explode("\r\n", $responseHeaders);
foreach ($headerLines as $line) {
if (strpos($line, 'next-key:') === 0) {
$headerArray['next-key'] = trim(substr($line, 9));
} elseif (strpos($line, 'cont-yn:') === 0) {
$headerArray['cont-yn'] = trim(substr($line, 8));
} elseif (strpos($line, 'api-id:') === 0) {
$headerArray['api-id'] = trim(substr($line, 7));
}
}
echo 'Code: ' . $httpCode . "\n";
echo 'Header: ' . json_encode($headerArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
echo 'Body: ' . json_encode(json_decode($responseBody), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
}
// 실행 구간
// 1. 토큰 설정
$MY_ACCESS_TOKEN = $accessToken;
// 2. 요청 데이터
// 종목코드 거래소별 종목코드 (KRX:039490,NXT:039490_NX,SOR:039490_AL)
// ka10004 - 주식호가요청
$aParams = [
// 'stk_cd' => 'KRX:026040',
'stk_cd' => '026040',
];
$api_id = 'ka10004'; // 주식호가요청
$api_id = 'ka10006'; // 주식시분요청
// 3. API 실행
fn_stock_data($MY_ACCESS_TOKEN, $aParams, 'N', '', $api_id);
// next-key, cont-yn 값이 있을 경우
// fn_ka10004($MY_ACCESS_TOKEN, $aParams, 'Y', 'nextkey..');
stock_code는 1개씩만 요청이 가능하고 배열로 여러개 요청하는 것은 안되며 길이가 최대 20자인 이유는 KRX, NXT 구분을 위한 자릿 수 때문에 그렇습니다.
여러개 조회를 하고 싶다면 웹소켓을 이용해 실시간으로 받는 방법이 있는데 사용해보고 올릴 계획 입니다.
빠르게 해야 하는것이 아니라면 loop 돌면서 하나씩 조회 하면 됩니다.
한번에 여러개의 시세를 조회하려면 제가 찾은 것은 웹소켓을 이용한 실시간시세조회 인데 아래 링크 참고하세요.
▲ 주문
- 주문을 하기 위해선 위에 함수에서 $endpoint 부분을 변경해 주면 됩니다.
- 종목코드는 앞에 KRX: NXT: 같은것 붙이는것 아니며 그 뒤쪽에 있는 예를 보고 사용하면 됩니다. NXT 이면 026040_NX 이렇게 해주시면 됩니다.
● 같이보면 좋은 자료
- 키움증권 REST API 실시간시세조회 및 조건검색 > PHP
