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

회원가입을 하고 나면 계정 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 — 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
'데브코스 데이터엔지니어링' 카테고리의 다른 글
| [Airflow] Airflow DAG란 (0) | 2024.12.27 |
|---|---|
| [Airflow] Apache 에어플로우 아키텍처 (1) | 2024.12.27 |
| [웹크롤링] BeautifulSoup 웹스크래핑 attribute 속성 참조 (1) | 2024.12.26 |
| [웹크롤링] BeautifulSoup로 페이지네이션(pagination) 구현 (1) | 2024.12.26 |
| [웹크롤링] HTML의 Locator로 웹스크래핑(Web Scraping) (2) | 2024.12.26 |