DomesticModel.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. using System.Text.Json;
  2. using economy.Helpers;
  3. namespace economy.Models.Price.Domestic
  4. {
  5. public class DomesticModel
  6. {
  7. private readonly DataGoKR? _dataGoKR;
  8. private readonly FlowerAtOrKR? _flowerAtOrKR;
  9. public DomesticModel(DataGoKR? dataGoKR, FlowerAtOrKR? flowerAtOrKR)
  10. {
  11. _dataGoKR = dataGoKR;
  12. _flowerAtOrKR = flowerAtOrKR;
  13. }
  14. // 금 시세 조회
  15. public async Task<Gold.Response> GetGoldPriceInfo(Gold.Request request)
  16. {
  17. Gold.Response parseData = new();
  18. try
  19. {
  20. var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
  21. {
  22. Path = "/1160100/service/GetGeneralProductInfoService/getGoldPriceInfo",
  23. Query = $"serviceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&beginBasDt={request.StartDate:yyyyMMdd}&endBasDt={request.EndDate:yyyyMMdd}&resultType=json"
  24. };
  25. if (request.LikeSrtnCd is not null)
  26. {
  27. uriBuilder.Query += $"&likeSrtnCd={request.LikeSrtnCd}";
  28. }
  29. var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
  30. if (response.IsSuccessStatusCode)
  31. {
  32. var jsonString = await response.Content.ReadAsStringAsync();
  33. using (var document = JsonDocument.Parse(jsonString))
  34. {
  35. var resEle = document.RootElement.GetProperty("response");
  36. parseData = JsonSerializer.Deserialize<Gold.Response>(resEle.GetRawText());
  37. }
  38. if (parseData.Body is null)
  39. {
  40. return new Gold.Response();
  41. }
  42. }
  43. response.EnsureSuccessStatusCode();
  44. }
  45. catch (HttpRequestException e)
  46. {
  47. Console.WriteLine($"Request error: {e.Message}");
  48. }
  49. return parseData;
  50. }
  51. // 석유 시세 조회
  52. public async Task<Oil.Response> GetOilPriceInfo(Oil.Request request)
  53. {
  54. Oil.Response parseData = new();
  55. try
  56. {
  57. var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
  58. {
  59. Path = "/1160100/service/GetGeneralProductInfoService/getOilPriceInfo",
  60. Query = $"serviceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&beginBasDt={request.StartDate:yyyyMMdd}&endBasDt={request.EndDate:yyyyMMdd}&resultType=json"
  61. };
  62. var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
  63. if (response.IsSuccessStatusCode)
  64. {
  65. var jsonString = await response.Content.ReadAsStringAsync();
  66. using (var document = JsonDocument.Parse(jsonString))
  67. {
  68. var resEle = document.RootElement.GetProperty("response");
  69. parseData = JsonSerializer.Deserialize<Oil.Response>(resEle.GetRawText());
  70. }
  71. if (parseData.Body is null)
  72. {
  73. return new Oil.Response();
  74. }
  75. }
  76. response.EnsureSuccessStatusCode();
  77. }
  78. catch (HttpRequestException e)
  79. {
  80. Console.WriteLine($"Request error: {e.Message}");
  81. }
  82. return parseData;
  83. }
  84. // 배출권 시세 조회
  85. public async Task<Emission.Response> GetEmissionPriceInfo(Emission.Request request)
  86. {
  87. Emission.Response parseData = new();
  88. try
  89. {
  90. var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
  91. {
  92. Path = "/1160100/service/GetGeneralProductInfoService/getCertifiedEmissionReductionPriceInfo",
  93. Query = $"serviceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&beginBasDt={request.StartDate:yyyyMMdd}&endBasDt={request.EndDate:yyyyMMdd}&resultType=json"
  94. };
  95. if (request.LikeSrtnCd is not null)
  96. {
  97. uriBuilder.Query += $"&likeSrtnCd={request.LikeSrtnCd}";
  98. }
  99. var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
  100. if (response.IsSuccessStatusCode)
  101. {
  102. var jsonString = await response.Content.ReadAsStringAsync();
  103. using (var document = JsonDocument.Parse(jsonString))
  104. {
  105. var resEle = document.RootElement.GetProperty("response");
  106. parseData = JsonSerializer.Deserialize<Emission.Response>(resEle.GetRawText());
  107. }
  108. if (parseData.Body is null)
  109. {
  110. return new Emission.Response();
  111. }
  112. }
  113. response.EnsureSuccessStatusCode();
  114. }
  115. catch (HttpRequestException e)
  116. {
  117. Console.WriteLine($"Request error: {e.Message}");
  118. }
  119. return parseData;
  120. }
  121. // 품목별 가격 목록 조회
  122. public async Task<Item.List.Response> GetPriceItemList(Item.List.Request request)
  123. {
  124. Item.List.Response parsedData = new();
  125. try
  126. {
  127. var response = await _dataGoKR.httpClient.GetAsync($"/1240000/bpp_openapi/getPriceItemList?ServiceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}");
  128. if (response.IsSuccessStatusCode)
  129. {
  130. var xmlString = await response.Content.ReadAsStringAsync();
  131. parsedData = await Common.ParseXmlDataAsync<Item.List.Response >(xmlString);
  132. if (parsedData.Body is null)
  133. {
  134. return parsedData;
  135. }
  136. }
  137. response.EnsureSuccessStatusCode(); // 예외 발생시킴
  138. }
  139. catch (HttpRequestException e)
  140. {
  141. Console.WriteLine($"Request error: {e.Message}");
  142. }
  143. return parsedData;
  144. }
  145. // 품목 상세 정보 조회
  146. public async Task<Item.Detail.Response> GetPriceItemInfo(Item.Detail.Request request)
  147. {
  148. Item.Detail.Response parseData = new();
  149. try
  150. {
  151. var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
  152. {
  153. Path = "/1240000/bpp_openapi/getPriceInfo",
  154. Query = $"ServiceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&startDate={request.StartDate:yyyy-MM-dd}&endDate={request.EndDate:yyyy-MM-dd}&itemCode={request.ItemCode}"
  155. };
  156. var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
  157. if (response.IsSuccessStatusCode)
  158. {
  159. var xmlString = await response.Content.ReadAsStringAsync();
  160. parseData = await Common.ParseXmlDataAsync<Item.Detail.Response>(xmlString);
  161. if (parseData.Body is null)
  162. {
  163. return new Item.Detail.Response();
  164. }
  165. }
  166. response.EnsureSuccessStatusCode();
  167. }
  168. catch (HttpRequestException e)
  169. {
  170. Console.WriteLine($"Request error: {e.Message}");
  171. }
  172. return parseData;
  173. }
  174. // 화훼 시세 조회
  175. public async Task<Flower.Response> GetFlowerPriceInfo(Flower.Request request)
  176. {
  177. Flower.Response parseData = new();
  178. try
  179. {
  180. var uriBuilder = new UriBuilder(_flowerAtOrKR.APIUrl)
  181. {
  182. Path = "/api/returnData.api",
  183. Query = $"kind=f001&serviceKey={_flowerAtOrKR.APIKey}&currentPage={request.PageNo}&countPerPage={request.NumOfRows}&baseDate={request.BaseDate:yyyy-MM-dd}&flowerGubn={(int)request.Type}&dataType=json"
  184. };
  185. if (request.PumName is not null)
  186. {
  187. uriBuilder.Query += $"&pumName={request.PumName}";
  188. }
  189. if (request.GoodName is not null)
  190. {
  191. uriBuilder.Query += $"&goodName={request.GoodName}";
  192. }
  193. var response = await _flowerAtOrKR.httpClient.GetAsync(uriBuilder.Uri);
  194. if (response.IsSuccessStatusCode)
  195. {
  196. var jsonString = await response.Content.ReadAsStringAsync();
  197. using (var document = JsonDocument.Parse(jsonString))
  198. {
  199. if (document.RootElement.TryGetProperty("response", out var resEle))
  200. {
  201. Console.WriteLine("Found 'response' property.");
  202. Console.WriteLine(resEle.GetRawText()); // response 내부 텍스트 출력
  203. parseData = JsonSerializer.Deserialize<Flower.Response>(resEle.GetRawText());
  204. }
  205. else
  206. {
  207. Console.WriteLine("'response' property not found in JSON.");
  208. }
  209. }
  210. if (parseData.Items is null)
  211. {
  212. return new Flower.Response();
  213. }
  214. }
  215. response.EnsureSuccessStatusCode();
  216. }
  217. catch (HttpRequestException e)
  218. {
  219. Console.WriteLine($"Request error: {e.Message}");
  220. }
  221. return parseData;
  222. }
  223. }
  224. }