[프로젝트] OpenSky REST API 호출하여 항공 데이터 수집

데이터 양과 데이터 생성 시간을 고려해서 최종 프로젝트로 전세계 공항이나 항공사의 포화 상태를 나타내는 대시보드를 만들기로 결정했습니다. 

 

데이터 수집을 위해 OpenSky에서 제공하는 API를 사용하기로 하였습니다. 

 

OpenSky API를 Python 라이브러리로 사용하기 위해 Github에서 직접 설치하거나, 수동으로 파일을 다운로드 받아서 설치하는 방법이 있고, 혹은 REST API를 직접 호출하여 HTTP 요청을 하는 방식이 있습니다.

 

저희 팀은 직접 라이브러리를 설치하기 보다는 REST API를 호출해서 사용하는 방법을 택하였습니다.

 

OpenSky Network 계정 생성 및 로그인

이를 위해서 우선 OpenSky Network에서 계정을 생성해 줍니다. 

 

The OpenSky Network - Free ADS-B and Mode S data for Research

 

opensky-network.org

OpenSky Network Register

회원가입을 하고 나면 계정 activation을 위한 메일이 발송되고 메일 내 url을 통해 로그인을 하면 됩니다. 

 

OpenSky REST API

python requests 라이브러리를 사용해서 OpenSky REST API를 호출해보았습니다. 

OpenSky REST API 중All State Vectors를 사용했습니다.

 

OpenSky REST API 공식 문서 를 참고하여 응답되는 값을 확인하면 아래와 같습니다. 

'time': 1735195739, # 시간 속성
'states': # 상태 속성
[['4b1818', # 0. ICAO 
'SWR1951 ', # 1. Callsign of the vehicle (8 chars) 예시) 제주항공(7C) : JEJU AIR
'Switzerland', # 2. 국가 이름
1735195739,  # 3. time_position(Unix timestamp (seconds) for the last position update)
1735195739, # 4. last_contact (Unix timestamp (seconds) for the last update in general)
6.8468, # 5. 경도
45.2125, # 6. 위도
10416.54, # 7. 미터
False, # 8. 위치가 표면 위치 보고서에서 검색되었는지 여부
199.61, # 9. 지면 위의 속도 (m/s)
23.06, # 10. 북쪽에서 시계 방향으로 십진수로 나타낸 실제 궤도(북쪽=0°).
-5.2, # 11. 수직 속도(m/s), 양수값은 비행기 상승, 음수값은 비행기 하강을 나타냄
None, # 12. 수신기의 ID
10675.62, # 13. 미터 단위의 기하학적 고도
'5325', # 14. Squawk, The transponder code
False, # 15. 비행 상태가 특수 목적 표시기인지 여부
0], # 16. 이 국가 위치의 기원. 0 = ADS-B1 = 아스테릭스2 = 표준3 = 불꽃

OpenSky REST API 사용시 제한 사항

API 크레딧은 /states/all API 엔드포인트에 사용됩니다. 

- OpenSky users get 4000 API credits per day 하루 4000개의 크레딧 제한

- all 요청시 4 크레딧 필요 /api/states/all

- 헤더 X-Rate-Limit-Remaing을 통해 남은 크레딧 확인 가능

- 크레딧이 소진되면 상태 코드 429 - Too Many Requests 리턴

- 헤더 X-Rate-Limit-Retry-After-Seconds 크레딧/요청이 다시 가능할 때 까지 걸리는 시간 반환(seconds)

 

공식문서 참고

참고

OpenSky REST API 공식 문서

 

OpenSky REST API — The OpenSky Network API 1.4.0 documentation

Retrieve flights for a certain airport which arrived within a given time interval [begin, end]. If no flights are found for the given period, HTTP stats 404 - Not found is returned with an empty response body. Note Similar to flights, arrivals are updated

openskynetwork.github.io