일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Sheety
- 부트스트랩
- ndarray
- twilio
- 파싱
- 유데미
- API플랫폼
- 웹페이지
- 프로그램
- Endpoint
- HTML
- udemy
- 오류
- 상태코드
- 쉬티
- class
- HTTP
- Tequila
- phython
- 웹크롤링
- 게임
- SMTP
- Game
- Python
- 프로젝트
- Pygame
- 파이썬
- 계산기
- 최저가
- API
- Today
- Total
데이터 분석가
파이썬 국제 우주 정거장(ISS) 추적 프로그램 본문
안녕하세요!
국제 우주 정거장(ISS)는 하늘에서 가장 밝은 물체 중 하나라는 것을 알고 있나요??!
서울에서 국제 우주 정거장ISS를 관측해보자 !
이를 관측하는 프로그램을 만들기 위해 API와 ENDPOINT(URL)의 개념이 선행되어야 한다.
https://an-ju-seong-coding.tistory.com/31
국제우주정거장(ISS: International Space Station)은 지구 궤도를 도는 인공위성이다
ISS는 미국, 러시아, 유럽, 일본, 캐나다 5개국이 공동으로 개발하여 운영하고 있으며
지구의 고도 408km 상공에 위치해 있으며, 속도는 시속 약 28,000km로 지구를 단 90분 만에
한 바퀴를 도는 속도이다 !
이를 관측하기 위한 추적 프로그램을 만들어 볼 것인데 조건은 두 가지이다.
첫 번째, 서울에서 관측 가능한 범위의 위도, 경도에 위치해 있어야 한다.
두 번째, 관측 가능한 저녁이어야 한다.
위도 경도 사이트
국제 우주 정거장(ISS)의 위도 경도 API(URL)
http://api.open-notify.org/iss-now.json
필요한 정보들은 갖추어 졌으니 시작해봅시다
# 필요한 모듈을 가져옵니다
import requests
from datetime import datetime
import smtplib
import time
# 이메일 인증 정보와 현재 위치 좌표를 설정합니다
MY_EMAIL = "이메일아이디@gmail.com"
MY_PASSWORD = "앱 비밀번호"
MY_LAT = 37.566536 # 서울 위치 위도
MY_LONG = 126.977966 # 서울 위치 경도
파이썬 request 모듈은 HTTP 요청 메소드(GET, POST, PUT, DELETE 등) 기능을 지원한다
해당 필요한 모듈들을 가져오고, ISS 움직임에 대해 알림을 받을 이메일을 입력한다
# ISS가 현재 위치에서 +5 또는 -5도 범위 내에 있는지 확인합니다
def is_iss_overhead():
response = requests.get(url="http://api.open-notify.org/iss-now.json") # Open Notify API를 호출하여 ISS의 현재 위치를 가져옵니다
response.raise_for_status() # 응답 상태 코드가 200 OK가 아닌 경우 예외를 발생시킵니다
data = response.json() # 응답을 JSON 객체로 변환합니다
iss_latitude = float(data["iss_position"]["latitude"]) # JSON 데이터에서 ISS의 위도를 추출합니다
iss_longitude = float(data["iss_position"]["longitude"]) # JSON 데이터에서 ISS의 경도를 추출합니다
if MY_LAT-5 <= iss_latitude <= MY_LAT+5 and MY_LONG-5 <= iss_longitude <= MY_LONG+5:
# ISS의 위도와 경도가 현재 위치에서 +5 또는 -5도 범위 내에 있는 경우 True를 반환합니다
return True
def is_iss_overhead():
ISS의 움직임을 파악하여 서울 위 상공의 경도, 위도 +- 5 오차의 경우 알림을 줍니다!
ISS와 관련된 데이터를 제공하는 API를 GET 메소드로 URL(ENDPOINT)에서 필요한 정보를 가져옵니다.
data = response.json() 을 통해 ISS 현재 위치 데이터는 JSON 형식의 문자열(STR)이다
이를 다루기 쉬운 딕셔너리(dict) 형식으로 변환하여 추출한 JSON 데이터들을 딕셔너리 형식으로 저장한다
MY_LAT-5 <= iss_latitude <= MY_LAT+5 및 MY_LONG-5 <= iss_longitude <= MY_LONG+5인 경우:
관측할 수 있는 범위를 서울의 위도, 경도 +- 5도로 설정하여, True 값이 나오면
다음으로 def is_nighte() 함수로 넘어간다
# 현재 시간이 현재 위치에서 밤인지 확인합니다
def is_night():
parameters = {
"lat" : MY_LAT,
"lng" : MY_LONG,
"formatted" : 0 ,
}
response = requests.get("https://api.sunrise-sunset.org/json", params=parameters) # Sunrise Sunset API를 호출하여 현재 위치에서 일출 및 일몰 시간을 가져옵니다
response.raise_for_status() # 응답 상태 코드가 200 OK가 아닌 경우 예외를 발생시킵니다
data = response.json() # 응답을 JSON 객체로 변환합니다
sunrise = int(data["results"]["sunrise"].split("T")[1].split(":")[0]) # JSON 데이터에서 일출 시간의 시간 구성 요소를 추출합니다
sunset = int(data["results"]["sunset"].split("T")[1].split(":")[0]) # JSON 데이터에서 일몰 시간의 시간 구성 요소를 추출합니다
time_now = datetime.now().hour # 현재 시간의 시간 구성 요소를 가져옵니다
if time_now >= sunset or time_now <= sunrise:
# 현재 시간이 일몰 시간 이후 또는 일출 시간 이전인 경우 True를 반환합니다
return True
첫 번째 조건인 관측 가능한 범위에 위치했으니
두 번째 조건인 저녁 시간을 설정해보자
def is_night():
URL(ENDPOINT) 에서 lat, Ing, formatted를 매개변수를 통하여 서울의 일출 일몰 시간을 추출한다.
가져온 데이터를 딕셔너리로 저장시키고, 딕셔너리 형태의 results를 추출한다
if tiem_now >= sunset or time_now <= sunrise:
현재 시간이 일몰 시간 이후, 일출 시간 이전인 경우인데, 이는 해가 없는 저녁을 의미한다
# ISS가 현재 위치에서 위에 있고 밤인 경우 이메일을 보냅니다
while True:
time.sleep(60) # 스크립트를 60초 동안 일시 중지합니다
if is_iss_overhead() and is_night(): # ISS가 현재 위치에서 위에 있고 밤인 경우
connection = smtplib.SMTP
첫 번째, 서울에서 관측 가능한 범위의 위도, 경도에 위치해 있어야 한다.
두 번째, 관측 가능한 저녁이어야 한다.
두 번째 조건까지 만족하는 식을 만들었으므로
마지막으로, while True:
time.sleep(60) 60초마다 해당 반복문을 돌리고,
if is_iss_overhead() # ISS가 서울 위에 있을 경우 and is_night(): # 일몰 이후, 일출 이전 저녁인 경우
메일링을 도와주는 smtplib 모듈을 사용해
'smtplib.SMTP' 클래스는 SMTP 서버에 연결하고 메시지 전송
그렇다면, 앞서 설정한 이메일로 정해둔 문구의 메일이 보내질 겁니다 !
90분마다 지구 한 바퀴를 도는 ISS는 저녁 시간대에 하루에도 몇번이고 메일을 보내게 할겁니다 !
감사합니다 !
'파이썬(python) 프로젝트 모음' 카테고리의 다른 글
파이썬 최저가 항공권 티켓 알림 프로젝트 (0) | 2023.04.10 |
---|---|
파이썬 쉬티(Sheety) & 운동 추적(Nutritionix) 프로그램 (0) | 2023.04.07 |
파이썬(Python) 생일 축하 이메일 보내기(Smtp) (0) | 2023.04.04 |
파이썬 마일변환기 GUI 인터페이스 구현 프로젝트 (0) | 2023.04.03 |
파이썬 퐁 게임(PongGame) 프로젝트 (0) | 2023.03.30 |