공공데이터 포털 API 이용 클라이언트 구현 Part 1
공공데이터 포탈 회원 가입 및 요청
아파트 실거래 API 승인이 완료되면 서비스 정보를 제공해주며 해당 정보를 이용해 API를 호출하여 이용할 수 있습니다.
|
API 서비스 정보 |
|
API 응답 결과 |
응답 데이터
아파트 실거래 API는 응답 결과를 XML 형식으로 전달 합니다. ListView 컨트롤에 바인딩하기 위해 응답 결과 XML 데이터를 사용자 정의 객체 컬렉션으로 변환하는 작업이 필요합니다.
TradeApt 객체
1: public class TradeApt
2: {
3: // 거래금액
4: public string TradeMoney { get; set; }
5: // 건축년도
6: public string YearOfConstruction { get; set; }
7: // 년
8: public string Year { get; set; }
9: // 도로명
10: public string RoadName { get; set; }
11: // 도로명건물본번호코드
12: public string RoadBuildingBonBun { get; set; }
13: // 도로명건물부번호코드
14: public string RoadBuildingBuBun { get; set; }
15: // 도로명시군구코드
16: public string RoadSiGunGuCode { get; set; }
17: // 도로명일련번호코드
18: public string RoadSerialNumber { get; set; }
19: // 도로명지상지하코드
20: public string RoadGroundCode { get; set; }
21: // 도로명코드
22: public string RoadCode { get; set; }
23: // 법정동
24: public string DongName { get; set; }
25: // 법정동본번코드
26: public string DongBonBun { get; set; }
27: // 법정동부번코드
28: public string DongBuBun { get; set; }
29: // 법정동시군구코드
30: public string DongSiGunGuCode { get; set; }
31: // 법정동읍면동코드
32: public string DongCode { get; set; }
33: // 법정동지번코드
34: public string DongJiBunCode { get; set; }
35: // 아파트
36: public string ApartName { get; set; }
37: // 월
38: public string TradeMonth { get; set; }
39: // 일
40: public string TradeDay { get; set; }
41: // 일련번호
42: public string SerialNumber { get; set; }
43: // 전용면적
44: public string ExclusiveArea { get; set; }
45: // 지번
46: public string JiBun { get; set; }
47: // 지역코드
48: public string RegionCode { get; set; }
49: // 층
50: public string Floor { get; set; }
51: }
응답 결과 객체
1: public class TradeAptResult
2: {
3: public string ResultCode { get; set; }
4: public string ResultMsg { get; set; }
5: public List<TradeApt> Items { get; set; }
6: public int NumOfRows { get; set; }
7: public int PageNo { get; set; }
8: public int TotalCount { get; set; }
9: public TradeAptResult()
10: {
11: Items = new List<TradeApt>();
12: }
13: }
응답 데이터 변환
1: public class AptTradeAPI
2: {
3: #region Member
4: // 결과코드 유무
5: private bool _inResultCode;
6: // 결과메시지 유무
7: private bool _inResultMsg;
8: // 페이지 별 개수 유무
9: private bool _inNumOfRows;
10: // 페이지 번호 유무
11: private bool _inPageNo;
12: // 전체 개수
13: private bool _inTotalCount;
14: // 거래금액 유무
15: private bool _inTradeMoney;
16: // 건축년도 유무
17: private bool _inYearOfConstruction;
18: // 년 유무
19: private bool _inYear;
20: // 도로명 유무
21: private bool _inRoadName;
22: // 도로명건물본번호코드 유무
23: private bool _inRoadBuildingBonBun;
24: // 도로명건물부번호코드 유무
25: private bool _inRoadBuildingBuBun;
26: // 도로명시군구코드 유무
27: private bool _inRoadSiGunGuCode;
28: // 도로명일련번호코드 유무
29: private bool _inRoadSerialNumber;
30: // 도로명지상지하코드 유무
31: private bool _inRoadGroundCode;
32: // 도로명코드 유무
33: private bool _inRoadCode;
34: // 법정동 유무
35: private bool _inDongName;
36: // 법정동본번코드 유무
37: private bool _inDongBonBun;
38: // 법정동부번코드 유무
39: private bool _inDongBuBun;
40: // 법정동시군구코드 유무
41: private bool _inDongSiGunGuCode;
42: // 법정동읍면동코드 유무
43: private bool _inDongCode;
44: // 법정동지번코드 유무
45: private bool _inDongJiBunCode;
46: // 아파트 유무
47: private bool _inApartName;
48: // 월 유무
49: private bool _inTradeMonth;
50: // 일 유무
51: private bool _inTradeDay;
52: // 일련번호 유무
53: private bool _inSerialNumber;
54: // 전용면적 유무
55: private bool _inExclusiveArea;
56: // 지번 유무
57: private bool _inJiBun;
58: // 지역코드 유무
59: private bool _inRegionCode;
60: // 층 유무
61: private bool _inFloor;
62: // -----------------------------------
63: // 결과코드
64: private string _resultCode;
65: // 결과메시지
66: private string _resultMsg;
67: // 페이지 별 개수 유무
68: private int _numOfRows;
69: // 페이지 번호 유무
70: private int _pageNo;
71: // 전체 개수
72: private int _totalCount;
73: // 거래금액
74: private string _tradeMoney;
75: // 건축년도
76: private string _yearOfConstruction;
77: // 년
78: private string _year;
79: // 도로명
80: private string _roadName;
81: // 도로명건물본번호코드
82: private string _roadBuildingBonBun;
83: // 도로명건물부번호코드
84: private string _roadBuildingBuBun;
85: // 도로명시군구코드
86: private string _roadSiGunGuCode;
87: // 도로명일련번호코드
88: private string _roadSerialNumber;
89: // 도로명지상지하코드
90: private string _roadGroundCode;
91: // 도로명코드
92: private string _roadCode;
93: // 법정동
94: private string _dongName;
95: // 법정동본번코드
96: private string _dongBonBun;
97: // 법정동부번코드
98: private string _dongBuBun;
99: // 법정동시군구코드
100: private string _dongSiGunGuCode;
101: // 법정동읍면동코드
102: private string _dongCode;
103: // 법정동지번코드
104: private string _dongJiBunCode;
105: // 아파트
106: private string _apartName;
107: // 월
108: private string _tradeMonth;
109: // 일
110: private string _tradeDay;
111: // 일련번호
112: private string _serialNumber;
113: // 전용면적
114: private string _exclusiveArea;
115: // 지번
116: private string _jiBun;
117: // 지역코드
118: private string _regionCode;
119: // 층
120: private string _floor;
121: #endregion
122: public TradeAptResult GetXmlData(string url)
123: {
124: TradeAptResult result = new TradeAptResult();
125: XmlTextReader reader = new XmlTextReader(url);
126: #region Read()
127: while (reader.Read())
128: {
129: switch (reader.NodeType)
130: {
131: case XmlNodeType.Element:
132: if (reader.Name.Equals("resultCode")) _inResultCode = true;
133: if (reader.Name.Equals("resultMsg")) _inResultMsg = true;
134: if (reader.Name.Equals("numOfRows")) _inNumOfRows = true;
135: if (reader.Name.Equals("pageNo")) _inPageNo = true;
136: if (reader.Name.Equals("totalCount")) _inTotalCount = true;
137: if (reader.Name.Equals("거래금액")) _inTradeMoney = true;
138: if (reader.Name.Equals("건축년도")) _inYearOfConstruction = true;
139: if (reader.Name.Equals("년")) _inYear = true;
140: if (reader.Name.Equals("도로명")) _inRoadName = true;
141: if (reader.Name.Equals("도로명건물본번호코드")) _inRoadBuildingBonBun = true;
142: if (reader.Name.Equals("도로명건물부번호코드")) _inRoadBuildingBuBun = true;
143: if (reader.Name.Equals("도로명시군구코드")) _inRoadSiGunGuCode = true;
144: if (reader.Name.Equals("도로명일련번호코드")) _inRoadSerialNumber = true;
145: if (reader.Name.Equals("도로명지상지하코드")) _inRoadGroundCode = true;
146: if (reader.Name.Equals("도로명코드")) _inRoadCode = true;
147: if (reader.Name.Equals("법정동")) _inDongName = true;
148: if (reader.Name.Equals("법정동본번코드")) _inDongBonBun = true;
149: if (reader.Name.Equals("법정동부번코드")) _inDongBuBun = true;
150: if (reader.Name.Equals("법정동시군구코드")) _inDongSiGunGuCode = true;
151: if (reader.Name.Equals("법정동읍면동코드")) _inDongCode = true;
152: if (reader.Name.Equals("법정동지번코드")) _inDongJiBunCode = true;
153: if (reader.Name.Equals("아파트")) _inApartName = true;
154: if (reader.Name.Equals("월")) _inTradeMonth = true;
155: if (reader.Name.Equals("일")) _inTradeDay = true;
156: if (reader.Name.Equals("일련번호")) _inSerialNumber = true;
157: if (reader.Name.Equals("전용면적")) _inExclusiveArea = true;
158: if (reader.Name.Equals("지번")) _inJiBun = true;
159: if (reader.Name.Equals("지역코드")) _inRegionCode = true;
160: if (reader.Name.Equals("층")) _inFloor = true;
161: break;
162: case XmlNodeType.Text:
163: if (_inResultCode)
164: {
165: _resultCode = reader.Value;
166: _inResultCode = false;
167: }
168: if (_inResultMsg)
169: {
170: _resultMsg = reader.Value;
171: _inResultMsg = false;
172: }
173: if (_inNumOfRows)
174: {
175: _numOfRows = Convert.ToInt32(reader.Value);
176: _inNumOfRows = false;
177: }
178: if (_inPageNo)
179: {
180: _pageNo = Convert.ToInt32(reader.Value);
181: _inPageNo = false;
182: }
183: if (_inTotalCount)
184: {
185: _totalCount = Convert.ToInt32(reader.Value);
186: _inTotalCount = false;
187: }
188: if (_inTradeMoney)
189: {
190: _tradeMoney = reader.Value;
191: _inTradeMoney = false;
192: }
193: if (_inYearOfConstruction)
194: {
195: _yearOfConstruction = reader.Value;
196: _inYearOfConstruction = false;
197: }
198: if (_inYear)
199: {
200: _year = reader.Value;
201: _inYear = false;
202: }
203: if (_inRoadName)
204: {
205: _roadName = reader.Value;
206: _inRoadName = false;
207: }
208: if (_inRoadBuildingBonBun)
209: {
210: _roadBuildingBonBun = reader.Value;
211: _inRoadBuildingBonBun = false;
212: }
213: if (_inRoadBuildingBuBun)
214: {
215: _roadBuildingBuBun = reader.Value;
216: _inRoadBuildingBuBun = false;
217: }
218: if (_inRoadSiGunGuCode)
219: {
220: _roadSiGunGuCode = reader.Value;
221: _inRoadSiGunGuCode = false;
222: }
223: if (_inRoadSerialNumber)
224: {
225: _roadSerialNumber = reader.Value;
226: _inRoadSerialNumber = false;
227: }
228: if (_inRoadGroundCode)
229: {
230: _roadGroundCode = reader.Value;
231: _inRoadGroundCode = false;
232: }
233: if (_inRoadCode)
234: {
235: _roadCode = reader.Value;
236: _inRoadCode = false;
237: }
238: if (_inDongName)
239: {
240: _dongName = reader.Value;
241: _inDongName = false;
242: }
243: if (_inDongBonBun)
244: {
245: _dongBonBun = reader.Value;
246: _inDongBonBun = false;
247: }
248: if (_inDongBuBun)
249: {
250: _dongBuBun = reader.Value;
251: _inDongBuBun = false;
252: }
253: if (_inDongSiGunGuCode)
254: {
255: _dongSiGunGuCode = reader.Value;
256: _inDongSiGunGuCode = false;
257: }
258: if (_inDongCode)
259: {
260: _dongCode = reader.Value;
261: _inDongCode = false;
262: }
263: if (_inDongJiBunCode)
264: {
265: _dongJiBunCode = reader.Value;
266: _inDongJiBunCode = false;
267: }
268: if (_inApartName)
269: {
270: _apartName = reader.Value;
271: _inApartName = false;
272: }
273: if (_inTradeMonth)
274: {
275: _tradeMonth = reader.Value;
276: _inTradeMonth = false;
277: }
278: if (_inTradeDay)
279: {
280: _tradeDay = reader.Value;
281: _inTradeDay = false;
282: }
283: if (_inSerialNumber)
284: {
285: _serialNumber = reader.Value;
286: _inSerialNumber = false;
287: }
288: if (_inExclusiveArea)
289: {
290: _exclusiveArea = reader.Value;
291: _inExclusiveArea = false;
292: }
293: if (_inJiBun)
294: {
295: _jiBun = reader.Value;
296: _inJiBun = false;
297: }
298: if (_inRegionCode)
299: {
300: _regionCode = reader.Value;
301: _inRegionCode = false;
302: }
303: if (_inFloor)
304: {
305: _floor = reader.Value;
306: _inFloor = false;
307: }
308: break;
309: case XmlNodeType.EndElement:
310: if (reader.Name.Equals("resultCode")) result.ResultCode = _resultCode;
311: if (reader.Name.Equals("resultMsg")) result.ResultMsg = _resultMsg;
312: if (reader.Name.Equals("numOfRows")) result.NumOfRows = _numOfRows;
313: if (reader.Name.Equals("pageNo")) result.PageNo = _pageNo;
314: if (reader.Name.Equals("totalCount")) result.TotalCount = _totalCount;
315: if (reader.Name.Equals("item"))
316: {
317: result.Items.Add(new TradeApt
318: {
319: TradeMoney = _tradeMoney,
320: YearOfConstruction = _yearOfConstruction,
321: Year = _year,
322: RoadName = _roadName,
323: RoadBuildingBonBun = _roadBuildingBonBun,
324: RoadBuildingBuBun = _roadBuildingBuBun,
325: RoadSiGunGuCode = _roadSiGunGuCode,
326: RoadSerialNumber = _roadSerialNumber,
327: RoadGroundCode = _roadGroundCode,
328: RoadCode = _roadCode,
329: DongName = _dongName,
330: DongBonBun = _dongBonBun,
331: DongBuBun = _dongBuBun,
332: DongSiGunGuCode = _dongSiGunGuCode,
333: DongCode = _dongCode,
334: DongJiBunCode = _dongJiBunCode,
335: ApartName = _apartName,
336: TradeMonth = _tradeMonth,
337: TradeDay = _tradeDay,
338: SerialNumber = _serialNumber,
339: ExclusiveArea = _exclusiveArea,
340: JiBun = _jiBun,
341: RegionCode = _regionCode,
342: Floor = _floor
343: });
344: }
345: break;
346: }
347: }
348: #endregion
349: return result;
350: }
351: }
API 조회 및 출력
AptTradeAPI 클래스를 이용해 API를 호출하여 XML 데이터를 사용자 정의 객체로 변환 합니다. 결과 확인을 위해 간단하게 Console에 출력을 해봅니다.
1: string requestUri = CreateRequestUrl(serviceKey, pageNo, numOfRows, LAWD_CD, DEAL_YMD);
2: AptTradeAPI aptTradeApi = new AptTradeAPI();
3: TradeAptResult result = aptTradeApi.GetXmlData(requestUri);
4: foreach (var item in result.Items)
5: {
6: Console.WriteLine($"아파트명: {item.ApartName}, 거래가격: {item.TradeMoney}");
7: }
댓글
댓글 쓰기