본문 바로가기

Minding's Programming/Airflow

[Airflow] SimpleHttpOperator로 서울시 공공데이터 API 이용해보기

728x90
반응형

서울시 공공데이터 API를 이용하기에 앞서 서울시 데이터광장 (https://data.seoul.go.kr/)에서 로그인 후 api 인증키를 발급받아야 한다.

나는 좌측 아래 '일반 인증키'를 신청했다.

 

그리고 원하는 데이터 페이지에 들어가 OpenAPI 탭에 들어가보면 아래와 같은 정보를 확인할 수 있다.

샘플 URL을 참고해서 원하는 데이터 파일 형식과 행 수를 설정해 데이터를 다운로드 받아보자.

 

나는 최근 장마로 인해 동남아의 '스콜'처럼 비가 내리는 것을 보고 서울시의 강수량 데이터가 궁금해 해당 데이터를 API로 받아보고자 한다.

 

Airflow에서는 이와 같이 API 호출을 통해 데이터를 받기 위해서 SimpleHttpOperator를 사용한다. 말그대로 간단한 http 요청을 하는 오퍼레이터인데, 결과를 text값으로 받으며, 리턴 값은 XCom에 저장된다.

 

HTTP로 RestAPI를 호출해 API를 처리해 데이터를 받을 수 있다. 코드를 확인해보자.

) as dag:

    '''서울시 강우량 정보'''
    tb_cycle_station_info = SimpleHttpOperator(
        task_id='amount_of_rain_fall',
        http_conn_id='openapi.seoul.go.kr', # 등록한 conn_id
        endpoint='{{var.value.apikey_openapi_seoul_go_kr}}/json/ListRainfallService/1/10/', # api key를 전역변수에 등록해 사용했음
        method='GET',
        headers={'Content-Type': 'application/json',
                        'charset': 'utf-8',
                        'Accept': '*/*'
                        }
    )

SimpleHttpOperator의 파라미터 정보는 아래와 같다.

http_conn_id 요청할 서버의 URL
endpoint 요청할 데이터의 정보가 있는 상세주소 (아래 부분에 해당한다.)
{{인증키}}/json/ListRainfallService/1/10/
method HTTP 요청 방식 (위 코드에서는 데이터를 받는 것이므로 'GET'을 선택)
headers GET 요청을 할 때 세부 사항 설정

 

또한 오퍼레이터를 실행시키기 전에, Airflow Webserver를 통해서 Connection을 등록해주어야 한다.

Admin 메뉴의 Connections 항목으로 진입해준다.

이후 Connection id(중복X), Connection Type, Host, Port를 위와 같이 작성해주면 끝이다.

 

Host와 Port는 서울시 공공데이터 명세를 확인했을 때 이 부분을 작성해주면 된다.

 ex) http://openAPI.seoul.go.kr(호스트):8088(포트)/(인증키)/xml/ListRainfallService/1/5/

 

위 코드를 이용해 데이터를 불러와 pprint를 통해 불러온 데이터를 xcom으로 불러와 출력하는 DAG을 만들어 실행시켜 보았다. 로그를 확인해 보니 아래와 같이 출력되었다.

내가 살고 있는 구로구에는 7월 25일 16시 49분 현재 비가 내리고 있지 않기 때문에 10분 강우량이 0으로 측정된 것을 알 수 있다. 이처럼 SimpleHttpOperator를 통해 API로부터 데이터를 불러와 서비스를 제작할 수 있다는 것을 배울 수 있었다.

 

728x90