[C#] DATA.go.kr 에서 미세먼지 정보를 얻어서 값을 출력하는 프로그램

2023. 5. 1. 21:46IT/C#

안녕하세요. 쿠루가이입니다. 

오늘은 C# 언어로 DATA.go.kr 에서 미세먼지 정보를 얻어서 값을 출력하는 프로그램을 소개해볼까 합니다.

JSON형식으로 데이터를 얻기 위해서는 인증키가 필요합니다. DATA.go.kr에 접속하셔서 인증키를 발급받은 신 후, 아래와 같은 코드를 사용하여  API를 호출할 수 있습니다.

using System;
using System.Collections.Generic;
using System.Net.Http;
using Newtonsoft.Json;

public class Body
{
    public int totalCount { get; set; }
    public List<Item> items { get; set; }
    public int pageNo { get; set; }
    public int numOfRows { get; set; }
}

public class Header
{
    public string resultMsg { get; set; }
    public string resultCode { get; set; }
}

public class Item
{
    public string so2Grade { get; set; }
    public object coFlag { get; set; }
    public string khaiValue { get; set; }
    public string so2Value { get; set; }
    public string coValue { get; set; }
    public object pm25Flag { get; set; }
    public object pm10Flag { get; set; }
    public string pm10Value { get; set; }
    public string o3Grade { get; set; }
    public string khaiGrade { get; set; }
    public string pm25Value { get; set; }
    public object no2Flag { get; set; }
    public string no2Grade { get; set; }
    public object o3Flag { get; set; }
    public string pm25Grade { get; set; }
    public object so2Flag { get; set; }
    public string dataTime { get; set; }
    public string coGrade { get; set; }
    public string no2Value { get; set; }
    public string pm10Grade { get; set; }
    public string o3Value { get; set; }
}

public class Response
{
    public Body body { get; set; }
    public Header header { get; set; }
}

public class Root
{
    public Response response { get; set; }
}



class Program
{
    static async System.Threading.Tasks.Task Main(string[] args)
    {
        string apiKey = "여기에_인증키를_입력하세요";
        string stationName = "측정소_이름";

        var httpClient = new HttpClient();
        var url = $"https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?serviceKey={apiKey}&returnType=json&numOfRows=1&pageNo=1&stationName={stationName}&dataTerm=DAILY&ver=1.0";
        var response = await httpClient.GetAsync(url);
        var responseBody = await response.Content.ReadAsStringAsync();

        var apiResponse = JsonConvert.DeserializeObject<Root>(responseBody);

        
        if (apiResponse?.response != null && apiResponse.response.body.items.Count > 0)
        {
            var fineDust = apiResponse.response.body.items[0];
            Console.WriteLine($"미세먼지 농도: {fineDust.pm10Value} μg/m³");
            Console.WriteLine($"초미세먼지 농도: {fineDust.pm25Value} μg/m³");

        }
        else
        {
            Console.WriteLine("API 응답이 올바르지 않습니다.");
        }
    }
}

위 코드에서 apiKey 변수에 발급받은 인증키를 입력하고, stationName 변수에는 원하는 측정소의 이름을 입력하면 됩니다. 코드를 실행하면 해당 측정소의 최신 미세먼지 농도 정보를 출력합니다. (2023-05-01 기준)

미세먼지 정보를 출력해준다


참고로, 이 코드를 실행하려면 Newtonsoft.Json NuGet 패키지가 필요합니다. NuGet 패키지 관리자에서 Newtonsoft.Json을 검색하여 설치하면 됩니다.

이걸 가지고 MQTT로 데이터를 보내면, HomeAssistant에서도 이용 가능할 것으로 생각이 됩니다만 오늘은 여기까지!^^