[.Net] ๊ณต๊ณต๋ฐ์ดํฐํฌํธ API ์ฌ์ฉํ์ฌ C#์์ ์ค์๊ฐ ๋ฒ์ค ์์น ์กฐํํ๊ธฐ(์์ ํฌํจ)
๊ณต๊ณต๋ฐ์ดํฐํฌํธ API๋?
์ฐ์ ๊ณต๊ณต๋ฐ์ดํฐ์ ๋ํ ์ ์๋ถํฐ ์์๋ณด๊ฒ ์ต๋๋ค.
๊ณต๊ณต๋ฐ์ดํฐ๋ ๊ณต๊ณต๊ธฐ๊ด์ด ๋ง๋ค์ด๋ด๋ ๋ชจ๋ ์๋ฃ๋ ์ ๋ณด, ๊ตญ๋ฏผ ๋ชจ๋์ ์ํต๊ณผ ํ๋ ฅ์ ์ด๋์ด๋ด๋ ๊ณต์ ์ธ ์ ๋ณด๋ฅผ ๋งํฉ๋๋ค. ๊ฐ ๊ณต๊ณต๊ธฐ๊ด์ด ๋ณด์ ํ ๊ณต๊ณต๋ฐ์ดํฐ ๋ชฉ๋ก๊ณผ ๊ตญ๋ฏผ์๊ฒ ๊ฐ๋ฐฉํ ์ ์๋ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ํฌํธ์ ๋ฑ๋กํ๋ฉด ๋ชจ๋๊ฐ ๊ณต์ ํ ์ ์๋ ์์ง์ ๊ณต๊ณต๋ฐ์ดํฐ๋ก ์ฌํ์ํ๊ฒ ๋ฉ๋๋ค. -์ถ์ฒ: ๊ณต๊ณต๋ฐ์ดํฐํฌํธ
๊ทธ๋ฆฌ๊ณ ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ณต๊ณต๋ฐ์ดํฐํฌํธ์ ๊ณต๊ณต๊ธฐ๊ด์ด ์์ฑ ๋๋ ์ทจ๋ํ์ฌ ๊ด๋ฆฌํ๊ณ ์๋ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์์ ์ ๊ณตํ๋ ํตํฉ ์ฐฝ๊ตฌ์ ๋๋ค. ํฌํธ์์๋ ๊ตญ๋ฏผ์ด ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ ์๋๋ก ํ์ผ ๋ฐ์ดํฐ, ์คํ API, ์๊ฐํ ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, ๋๊ตฌ๋ผ๋ ์ฝ๊ณ ํธ๋ฆฌํ ๊ฒ์์ ํตํด ์ํ๋ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. -์ถ์ฒ: ๊ณต๊ณต๋ฐ์ดํฐํฌํธ
์ฆ, ๋ํ๋ฏผ๊ตญ ๊ตญ๋ฏผ์ด๋ผ๋ฉด ๊ณต๊ณต๋ฐ์ดํฌํธ์ ํตํด ๊ณต๊ฐ๋์ด์๋ ๋ชจ๋ ์๋ฃ์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ API ์ฌ์ฉ ์ ์ฒญ ํ๊ฐ๋ฅผ ๋ฐ์๋ค๋ฉด, ์คํ API๋ฅผ ํตํด ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
๊ณต๊ณต๋ฐ์ดํฐํฌํธ ์คํ API ์ ์ฒญํ๊ธฐ
๊ณต๊ณต๋ฐ์ดํฐํฌํธ ํํ์ด์ง์ ์ ์ํ์ฌ ํ์๊ฐ์ ๋ถํฐ ์งํํฉ๋๋ค.
ํํ์ด์ง: www.data.go.kr/index.do
ํ์๊ฐ์ ํ ๋ฐ์ดํฐ ์ฐพ๊ธฐ ๋ฉ๋ด์ ๋ฐ์ดํฐ ๋ชฉ๋ก ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฒ์๋์ ๋ฒ์ค ์์น๋ฅผ ๊ฒ์ํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ ํ๋ฉด์ ๋ฒ์ค ์์น ํค์๋์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ, 4,993๊ฑด์ ์คํ API ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํฉ๋๋ค.
์ ๋ ํ ์คํธ๋ก ๊ฒฝ๊ธฐ๋์์ ์ ๊ณตํ๋ ๋ฒ์ค ์์น ์ ๋ณด ์กฐํ ์๋น์ค๋ฅผ ์ ํํ์ต๋๋ค. ์คํ API๋ฅผ ์ ์ฒญํ๋ ค๋ฉด, ์๋์ ๊ฐ์ ํ๋ฉด์์ ์ฐ์ธก ์๋จ์ ํ์ฉ ์ ์ฒญ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์คํ API๋ฅผ ์ ์ฒญํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ํ์์ผ๋ก ํ์ฉ ๋ชฉ์ ์ ์์ฑํด์ผ ํฉ๋๋ค.
์ ์ฒญ์ด ์๋ฃ๋๋ฉด ์๋์ ๊ฐ์ ํ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
์ ์ฒญ ์๋ฃ ํ ์ธ์ฆ์ด ๊ฐ๋ฅํด์ง๋ฉด, ๋ง์ดํ์ด์ง์์ ์๋์ ๊ฐ์ด ์๋น์ค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์๋น์ค๋ฅผ ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ด ์๋น์ค ์ ํ๊ณผ ์ธ์ฆํค ๊ทธ๋ฆฌ๊ณ ์ฐธ๊ณ ๋ฌธ์๊ฐ ํ์๋ฉ๋๋ค.
์ฐธ๊ณ ๋ฌธ์์๋ ์๋์ ๊ฐ์ด ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ์์ธํ ๋ด์ฉ์ด ์์ฑ๋์ด ์์ต๋๋ค.
์คํ API ์์ฒญ ๋ฐ ๊ฒฐ๊ณผ ๋ถ์ ๋ฐฉ๋ฒ
ํด๋น ์๋น์ค ํ์ด์ง์ ์๋์ ๊ฐ์ ๋ด์ฉ์ด ์์ต๋๋ค.
์์ฒญ ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํญ๋ชฉ๋ช | ํญ๋ชฉ๋ช | ํญ๋ชฉ๊ตฌ๋ถ | ์ํ ๋ฐ์ดํฐ | ํญ๋ชฉ ์ค๋ช |
์ธ์ฆํค | serviceKey | ํ์ | ๋ง์ด ํ์ด์ง์์ ํ์ธ | ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์์ ๋ฐ๊ธ ๋ฐ์ ์ธ์ฆํค |
๋ ธ์ ์์ด๋ | routeId | ํ์ | 233000031 | ๋ ธ์ ID |
์ธ์ฆํค๋ ๋ง์ด ํ์ด์ง์์ ํ์ฉ ์ ์ฒญํ ์๋น์ค์์ ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ ธ์ ์์ด๋์ ๊ฒฝ์ฐ ์ํ๋ก 233000031์ด ์ ๊ณต๋๋๋ฐ์. ์ด ๋ ธ์ ID๋ ๋ค๋ฅธ ์์ฒญ์ผ๋ก ์ป์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ดํ์ง์ญ๋ณ ๋ ธ์ ๋ฒํธ ๋ชฉ๋ก์ ์กฐํํ๋ฉด ๋ ธ์ ๋ฒํธ ๋ชฉ๋ก๊ณผ ๋ ธ์ ID๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ํ์ด์ง์์ ํ์ธํ์ธ์.
www.gbis.go.kr/gbis2014/publicService.action?cmd=mBusRouteArea
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํญ๋ชฉ๋ช | ํญ๋ชฉ๋ช | ํญ๋ชฉ ๊ตฌ๋ถ | ํญ๋ชฉ ์ค๋ช |
msgBody | |||
๋ฒ์ค ์์น ์ ๋ณด ๋ชฉ๋ก | busLocationList | 0..n | ๋ฒ์ค ์์น ์ ๋ณด ๋ชฉ๋ก |
๋ ธ์ ์์ด๋ | routeId | ํ์ | ๋ ธ์ ์์ด๋ |
์ ๋ฅ์ ์์ด๋ | stationId | ํ์ | ์ ๋ฅ์ ์์ด๋ |
์ ๋ฅ์ ์๋ฒ | stationSeq | ํ์ | ๋ ธ์ ์ ์ ๋ฅ์ ์๋ฒ |
๋ง์ฐจ ์ฌ๋ถ | endBus | ํ์ | ๋ง์ฐจ ์ฌ๋ถ(0:์ผ๋ฐ, 1:๋ง์ฐจ) |
์ ์ ๋ฒ์ค ์ฌ๋ถ | lowPlate | ํ์ | ์ ์ ๋ฒ์ค ์ฌ๋ถ(0:์ผ๋ฐ, 1:์ ์) |
์ฐจ๋ ๋ฒํธ | plateNo | ํ์ | ์ฐจ๋ ๋ฒํธ |
์ฐจ์ข | plateType | ํ์ | ์ฐจ๋ ์ข ๋ฅ(0:์ ๋ณด ์์, 1:์ํ ์นํฉ์ฐจ, 2: ์คํ ์นํฉ์ฐจ, 3:๋ํ ์นํฉ์ฐจ, 4:2์ธต ๋ฒ์ค) |
์ฐจ๋ ๋น์๋ฆฌ ์ | remainSeatCnt | ํ์ | ๋น์๋ฆฌ์(-1:์ ๋ณด์์, 0~:๋น์๋ฆฌ ์) |
์์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<endBus>0</endBus>
<lowPlate>0</lowPlate>
<plateNo>๊ฒฝ๊ธฐ70์ฌ1143</plateNo>
<plateType>3</plateType>
<remainSeatCnt>45</remainSeatCnt>
<routeId>233000031</routeId>
<stationId>120000059</stationId>
<stationSeq>32</stationSeq>
์ ์ถ๋ ฅ ๊ฒฐ๊ณผํ์ ๋น๊ตํด ๋ณด๋ฉด ์ฝ๊ฒ ํด์ํ ์ ์๊ฒ ์ฃ ?
C#์ผ๋ก ์ค์๊ฐ ๋ฒ์ค ์์น ์กฐํํ๊ธฐ
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ExamBusLocation
์ด๋ฆ์ Windows Forms ์ฑ ํ๋ก์ ํธ
๋ฅผ ์์ฑํฉ๋๋ค.
UI๋ ์๋์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ListView
์ Button
์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
์คํ API๋ฅผ ์์ฒญํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
using System.Net;
using System.IO;
using System.Xml;
namespace ExamBusLocation
{
public partial class Form1 : Form
{
const string targetURL = "http://openapi.gbis.go.kr/ws/rest/buslocationservice";
const string serviceKey = ""; //๋ง์ด ํ์ด์ง์์ ์์ ์ ์ธ์ฆํค ์
๋ ฅ.
const string routeid = "233000031"; //๋ฒ์ค ๋
ธ์ ID
//...
public static string getResults()
{
string result = string.Empty;
try
{
WebClient client = new WebClient();
string url = string.Format(@"{0}?serviceKey={1}&routeId={2}", targetURL, serviceKey, routeid);
using (Stream data = client.OpenRead(url))
{
using (StreamReader reader = new StreamReader(data))
{
string s = reader.ReadToEnd();
result = s;
reader.Close();
data.Close();
}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
return result;
}
//...
}
}
์ฝ๋๊ฐ ๋๋ฌด ๊ฐ๋จํ์ฃ ? ๋ฑํ ์ค๋ช ํ ๋ด์ฉ๋ ์์ด ๋ณด์ ๋๋ค. ๋ง์ง๋ง์ผ๋ก ListView์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋์ ๋๋ค.
private void buttonRefresh_Click(object sender, EventArgs e)
{
string result = getResults();
XmlDocument xml = new XmlDocument();
xml.LoadXml(result);
XmlNodeList list = xml.GetElementsByTagName("busLocationList");
listViewResults.Items.Clear();
int idx = 0;
foreach (XmlNode bus in list)
{
ListViewItem item = new ListViewItem((idx++).ToString());
item.SubItems.Add(bus["plateNo"].InnerText);
string endBus = "N";
if (bus["endBus"].InnerText == "1")
endBus = "Y";
item.SubItems.Add(endBus);
item.SubItems.Add(bus["remainSeatCnt"].InnerText);
listViewResults.Items.Add(item);
}
}
XML ๋ฐ์ดํฐ์์ busLocationList
๋ฅผ ์ป์ ํ ๊ฐ ๋ฒ์ค ๋ชฉ๋ก์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ฉด ๋๊ฒ ์ต๋๋ค. ์ฝ๋ ์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋ ์ํ ์ฝ๋๋ฅผ ์ฒจ๋ถํ์ต๋๋ค. ์์ธํ ์ฝ๋ ์ฌ์ฉ์ ์๋ ํ์ผ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
[.Net] C#์ผ๋ก ๋์ ์ฆ๊ถ ์ฃผ์ ์๋ ๋งค๋งค ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
2021.04.09 -
[.Net] C#์์ ์นด์นด์คํก ์คํAPI/REST API๋ก ๋์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
[.Net] C#์์ ์นด์นด์คํก ์คํAPI/REST API๋ก ๋์๊ฒ ๋ฉ์์ง ๋ณด๋ด๊ธฐ (์์ ํฌํจ)
2021.03.23 -
[.Net] C#์์ ๋ค์ด๋ฒ ๋ด์ค REST API๋ก ์ํ๋ ๋ด์ค๋ง ์์งํ๊ธฐ (์์ ํฌํจ)
[.Net] C#์์ ๋ค์ด๋ฒ ๋ด์ค REST API๋ก ์ํ๋ ๋ด์ค๋ง ์์งํ๊ธฐ (์์ ํฌํจ)
2021.03.18 -
[.Net] C# ํ๊ธ๊ณผ ์ปดํจํฐ HwpCtrl ์ ๊ทผ ํ์ฉ ์ค๋ฅ ํด๊ฒฐํ๊ธฐ
[.Net] C# ํ๊ธ๊ณผ ์ปดํจํฐ HwpCtrl ์ ๊ทผ ํ์ฉ ์ค๋ฅ ํด๊ฒฐํ๊ธฐ
2021.03.16