#!/usr/bin/env dotnet-script // Real KRX Data Collection Test // 1개 심볼, 1일 실제 데이터 수집 #r "nuget: System.Net.Http, 4.3.4" using System; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; var httpClient = new HttpClient(); var ticker = "005930"; // 삼성전자 var date = "20240102"; // 2024-01-02 Console.WriteLine("=== KRX 실제 데이터 수집 테스트 ==="); Console.WriteLine($"Ticker: {ticker} (삼성전자)"); Console.WriteLine($"Date: {date}"); Console.WriteLine(""); try { // KRX OpenAPI 호출 var requestUri = "https://data.krx.co.kr/svc/sample/apis/idx/krx_dd_trd"; var payload = new { basDd = date }; var json = JsonSerializer.Serialize(payload); Console.WriteLine($"요청: POST {requestUri}"); Console.WriteLine($"본문: {json}"); Console.WriteLine(""); var request = new HttpRequestMessage(HttpMethod.Post, requestUri) { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") }; var response = await httpClient.SendAsync(request); var responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine($"상태: {response.StatusCode}"); Console.WriteLine(""); if (response.IsSuccessStatusCode) { Console.WriteLine("✅ KRX API 응답 성공!"); Console.WriteLine(""); Console.WriteLine("응답 데이터 (처음 500자):"); Console.WriteLine(responseContent.Substring(0, Math.Min(500, responseContent.Length))); // 데이터 행 수 세기 var lines = responseContent.Split('\n', StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(""); Console.WriteLine($"데이터 행: {lines.Length}"); // 첫 데이터 행 출력 if (lines.Length > 1) { Console.WriteLine($"첫 행: {lines[0].Substring(0, Math.Min(100, lines[0].Length))}"); } } else { Console.WriteLine($"❌ API 에러: {response.StatusCode}"); Console.WriteLine(responseContent); } } catch (Exception ex) { Console.WriteLine($"❌ 오류: {ex.Message}"); } Console.WriteLine(""); Console.WriteLine("테스트 완료.");