| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- using System.Text.Json;
- using economy.Helpers;
- namespace economy.Models.Price.Domestic
- {
- public class DomesticModel
- {
- private readonly DataGoKR? _dataGoKR;
- private readonly FlowerAtOrKR? _flowerAtOrKR;
- public DomesticModel(DataGoKR? dataGoKR, FlowerAtOrKR? flowerAtOrKR)
- {
- _dataGoKR = dataGoKR;
- _flowerAtOrKR = flowerAtOrKR;
- }
- // 금 시세 조회
- public async Task<Gold.Response> GetGoldPriceInfo(Gold.Request request)
- {
- Gold.Response parseData = new();
- try
- {
- var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
- {
- Path = "/1160100/service/GetGeneralProductInfoService/getGoldPriceInfo",
- Query = $"serviceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&beginBasDt={request.StartDate:yyyyMMdd}&endBasDt={request.EndDate:yyyyMMdd}&resultType=json"
- };
- if (request.LikeSrtnCd is not null)
- {
- uriBuilder.Query += $"&likeSrtnCd={request.LikeSrtnCd}";
- }
- var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
- if (response.IsSuccessStatusCode)
- {
- var jsonString = await response.Content.ReadAsStringAsync();
- using (var document = JsonDocument.Parse(jsonString))
- {
- var resEle = document.RootElement.GetProperty("response");
- parseData = JsonSerializer.Deserialize<Gold.Response>(resEle.GetRawText());
- }
- if (parseData.Body is null)
- {
- return new Gold.Response();
- }
- }
- response.EnsureSuccessStatusCode();
- }
- catch (HttpRequestException e)
- {
- Console.WriteLine($"Request error: {e.Message}");
- }
- return parseData;
- }
- // 석유 시세 조회
- public async Task<Oil.Response> GetOilPriceInfo(Oil.Request request)
- {
- Oil.Response parseData = new();
- try
- {
- var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
- {
- Path = "/1160100/service/GetGeneralProductInfoService/getOilPriceInfo",
- Query = $"serviceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&beginBasDt={request.StartDate:yyyyMMdd}&endBasDt={request.EndDate:yyyyMMdd}&resultType=json"
- };
- var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
- if (response.IsSuccessStatusCode)
- {
- var jsonString = await response.Content.ReadAsStringAsync();
- using (var document = JsonDocument.Parse(jsonString))
- {
- var resEle = document.RootElement.GetProperty("response");
- parseData = JsonSerializer.Deserialize<Oil.Response>(resEle.GetRawText());
- }
- if (parseData.Body is null)
- {
- return new Oil.Response();
- }
- }
- response.EnsureSuccessStatusCode();
- }
- catch (HttpRequestException e)
- {
- Console.WriteLine($"Request error: {e.Message}");
- }
- return parseData;
- }
- // 배출권 시세 조회
- public async Task<Emission.Response> GetEmissionPriceInfo(Emission.Request request)
- {
- Emission.Response parseData = new();
- try
- {
- var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
- {
- Path = "/1160100/service/GetGeneralProductInfoService/getCertifiedEmissionReductionPriceInfo",
- Query = $"serviceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}&beginBasDt={request.StartDate:yyyyMMdd}&endBasDt={request.EndDate:yyyyMMdd}&resultType=json"
- };
- if (request.LikeSrtnCd is not null)
- {
- uriBuilder.Query += $"&likeSrtnCd={request.LikeSrtnCd}";
- }
- var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
- if (response.IsSuccessStatusCode)
- {
- var jsonString = await response.Content.ReadAsStringAsync();
- using (var document = JsonDocument.Parse(jsonString))
- {
- var resEle = document.RootElement.GetProperty("response");
- parseData = JsonSerializer.Deserialize<Emission.Response>(resEle.GetRawText());
- }
- if (parseData.Body is null)
- {
- return new Emission.Response();
- }
- }
- response.EnsureSuccessStatusCode();
- }
- catch (HttpRequestException e)
- {
- Console.WriteLine($"Request error: {e.Message}");
- }
- return parseData;
- }
- // 품목별 가격 목록 조회
- public async Task<Item.List.Response> GetPriceItemList(Item.List.Request request)
- {
- Item.List.Response parsedData = new();
- try
- {
- var response = await _dataGoKR.httpClient.GetAsync($"/1240000/bpp_openapi/getPriceItemList?ServiceKey={_dataGoKR.APIKey}&pageNo={request.PageNo}&numOfRows={request.NumOfRows}");
- if (response.IsSuccessStatusCode)
- {
- var xmlString = await response.Content.ReadAsStringAsync();
- parsedData = await Common.ParseXmlDataAsync<Item.List.Response >(xmlString);
- if (parsedData.Body is null)
- {
- return parsedData;
- }
- }
- response.EnsureSuccessStatusCode(); // 예외 발생시킴
- }
- catch (HttpRequestException e)
- {
- Console.WriteLine($"Request error: {e.Message}");
- }
- return parsedData;
- }
- // 품목 상세 정보 조회
- public async Task<Item.Detail.Response> GetPriceItemInfo(Item.Detail.Request request)
- {
- Item.Detail.Response parseData = new();
- try
- {
- var uriBuilder = new UriBuilder(_dataGoKR.APIUrl)
- {
- Path = "/1240000/bpp_openapi/getPriceInfo",
- 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}"
- };
- var response = await _dataGoKR.httpClient.GetAsync(uriBuilder.Uri);
- if (response.IsSuccessStatusCode)
- {
- var xmlString = await response.Content.ReadAsStringAsync();
- parseData = await Common.ParseXmlDataAsync<Item.Detail.Response>(xmlString);
- if (parseData.Body is null)
- {
- return new Item.Detail.Response();
- }
- }
- response.EnsureSuccessStatusCode();
- }
- catch (HttpRequestException e)
- {
- Console.WriteLine($"Request error: {e.Message}");
- }
- return parseData;
- }
- // 화훼 시세 조회
- public async Task<Flower.Response> GetFlowerPriceInfo(Flower.Request request)
- {
- Flower.Response parseData = new();
- try
- {
- var uriBuilder = new UriBuilder(_flowerAtOrKR.APIUrl)
- {
- Path = "/api/returnData.api",
- Query = $"kind=f001&serviceKey={_flowerAtOrKR.APIKey}¤tPage={request.PageNo}&countPerPage={request.NumOfRows}&baseDate={request.BaseDate:yyyy-MM-dd}&flowerGubn={(int)request.Type}&dataType=json"
- };
- if (request.PumName is not null)
- {
- uriBuilder.Query += $"&pumName={request.PumName}";
- }
- if (request.GoodName is not null)
- {
- uriBuilder.Query += $"&goodName={request.GoodName}";
- }
- var response = await _flowerAtOrKR.httpClient.GetAsync(uriBuilder.Uri);
- if (response.IsSuccessStatusCode)
- {
- var jsonString = await response.Content.ReadAsStringAsync();
- using (var document = JsonDocument.Parse(jsonString))
- {
- if (document.RootElement.TryGetProperty("response", out var resEle))
- {
- Console.WriteLine("Found 'response' property.");
- Console.WriteLine(resEle.GetRawText()); // response 내부 텍스트 출력
- parseData = JsonSerializer.Deserialize<Flower.Response>(resEle.GetRawText());
- }
- else
- {
- Console.WriteLine("'response' property not found in JSON.");
- }
- }
- if (parseData.Items is null)
- {
- return new Flower.Response();
- }
- }
- response.EnsureSuccessStatusCode();
- }
- catch (HttpRequestException e)
- {
- Console.WriteLine($"Request error: {e.Message}");
- }
- return parseData;
- }
- }
- }
|