개발 블로그

[CODELION 강의] [심화] 같이 푸는 PYTHON - 오늘의 날씨 본문

Programming Language/Python

[CODELION 강의] [심화] 같이 푸는 PYTHON - 오늘의 날씨

draidev 2022. 3. 18. 22:43

  1. BeautifulSoup를 이용한 Crawling
  2. API로 날씨 정보를 가져와서 오늘의 날씨 프로그램
  3. googletrans라이브러리를 활용한 번역기 프로그램
  4. SMTP를 활용한 메일 보내기 프로그램

이번엔 두 번째 '오늘의 날씨 프로그램'에 대해 정리해보겠습니다.

날씨 정보를 얻기 위해 OpenWeather라는 사이트의 API를 사용하였습니다.

https://openweathermap.org/

목차>

더보기

목차

    01_01 API란?

    'API(Application Programming Interface) 는 프로그램과 프로그램을 연결해주는 인터페이스'라고 쉽게 설명할 수 있습니다.

    우선 requests모듈을 추가해주고 사이트에서 발급받은 apikey를 복사해서 붙여넣기 해줍니다.

    import requests
    
    city = "Seoul"
    apikey = "################################"
    api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"

    02_01 fstring

    fstring은 문자열안에 우리가 원하는 변수를 넣어줄 수 있게 해줍니다.
    문자열안에 변수를 사용하고 싶다면 {}중괄호를 사용해야 합니다.

    그리고 문자열 앞에 f만 추가해주면 됩니다.

    api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"

    import requests
    
    city = "Seoul"
    apikey = "################################"
    api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"
    
    print(api)
    result = requests.get(api)
    print(result.text)

    잘 연결되었다면 print(api)로 아래와 같이 출력됩니다.

    api 출력

    그리고 result.text로 API로 받아온 내용을 확인할 수 있습니다.

    result.text 출력

    01_03 JSON

    JSON(JavaScript Object Notation) : Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용합니다(서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우).

    import requests
    import json
    
    city = "Seoul"
    apikey = "################################"
    api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"
    
    result = requests.get(api)  # api를 통해 홈페이지에 데이터 요청
    
    data = json.loads(result.text)   # 문자열을 json모듈을 통해 딕셔너리 타입으로 변환
    print(type(result.text))
    print(type(data))

    json.loads()함수에 매개변수로 api의 text데이터를 전달하고 데이터 타입을 출력한 결과를 보면 문자열 자료형(str)에서 딕셔너리 자료형(dict)로 바뀐 것을 확인 할 수 있습니다.

    (JSON에 대해서 알고 싶다면 다음 게시물을 참고 해주세요 : JSON이란?)

    json.loads()로 변환한 데이터 타입 출력

    01_04 언어, 단위 설정

    언어를 한국어로 받아오고 섭씨로 표시된 온도를 화씨로 변환하기 위한 방법을 보겠습니다.

    api변수의 뒤쪽에 &을 붙이고 lang={lang}, units={units}을 추가해 주시면 됩니다.

    lang = "kr"  #날씨 정보를 한국어로 받아오기 위해 api에 추가해준다
    units = "metric"  #날씨 단위를 화씨로 받아오기 위해 api에 추가해준다.
    
    api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}&lang={lang}&units={units}"

    앞에서 본 result.text의 딕셔너리 내용을 보고 key값을 통해 value를 얻어 낼 수 있습니다.

    print(data["name"],"의 날씨입니다.")
    print("날씨는 ", data["weather"][0]["description"],"입니다.")
    print("현재 온도는 ",data["main"]["temp"],"입니다.")
    print("하지만 체감 온도는 ",data["main"]["feels_like"],"입니다.")
    print("최저 기온은 ",data["main"]["temp_min"],"입니다.")
    print("최고 기온은 ",data["main"]["temp_max"],"입니다.")
    print("습도는 ",data["main"]["humidity"],"입니다.")
    print("기압은 ",data["main"]["pressure"],"입니다.")
    print("풍향은 ",data["wind"]["deg"],"입니다.")
    print("풍속은 ",data["wind"]["speed"],"입니다.")

    날씨 출력

    Comments