[TECHIT] 실시간 날씨 정보 받기 - API, Requests, Json

Jaeyoung·2022년 10월 18일
0

🦁멋사 ai 7기 TIL

목록 보기
3/7

목표설정

  • API 이해하기
  • Requests, json 라이브러리를 이용해 실시간 날씨 정보 받아오기

Server

  • 웹 페이지를 Response의 Body에 담아서 보내주는 서버 (Web Server)
  • 요청을 처리하고 처리한 결과를 Response의 Body에 담아서 보내주는 서버 (API Server ~ Json 형식으로 Resoponse의 Body에 담아서 보냄)
  • 컴퓨터가 Web Server, API Server 역할을 모두 할 수 있으나, 실무에서는 확실한 역할분담, 트래픽 분산 등을 위해 서버를 따로 둔다.

API

API (Application Programming Interface) 는 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 매커니즘
요청을 보내는 애플리케이션을 클라이언트, 응답을 보내는 애플리케이션을 서버라고 함

예를 들어, 기상청의 날씨 데이터베이스는 서버이고 모바일앱은 클라이언트 이다.

Requests

Python 용 HTTP 라이브러리, requests 를 사용하면 HTTP 요청을 쉽게 보낼 수 있다.

  • 웹사이트를 읽어오기 위해 사용 함
  • HTTP 요청 method : 대표적으로 GET / POST

HTTP 요청 메서드

methodURL
GETQuery String
POSTForm Data

Method 확인하는 방법

HTTP 요청할 사이트에서 오른쪽 마우스 클릭 > 검사(Inspection) > Network > Request Headers > method 확인

📍 GET 방식

  • 네이버 사전에서 확인해 보면, Request Method : GET 이다.
  • Status Code : 200 확인하기

📍 POST 방식

  • 교보문고 베스트셀러를 보면, Request Method : POST 이다.
  • 요청할 때, HTTP 메시지의 Body에 Form data 를 입력해야 한다.
  • Form data 는 아래와 같이 Payload > Query String Parameters 에서 볼 수 있다.

Json

응용 프로그램 프로그래밍 인터페이스 jsonjavascript object notation의 줄임말로, 데이터를 주고 받을 때 사용하는 포맷이다.

  • json.loads(str)json type으로 변경하여 데이터 통 안에 넣어준다.
  • 아래 사진과 같이 dictionary 형태로 데이터를 받아온다.

👩🏻‍💻실시간 날씨 정보

코드 입력

import requests
import json

city = "Seoul"
apikey = ############################
lang = "kr"

# 요청하기 위한 서버 주소, units=metric (섭씨온도로 변경)
api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}&lang={lang}&units=metric" # 요청하기 위한 서버 주소

# 받아온 데이터는 문자열 형태
result = requests.get(api)
type(result.text) 

# Json 형태로 받아오기
data = json.loads(result.text)
type(data)

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"],"입니다.")

코드 출력

Seoul 의 날씨입니다.
날씨는  맑음 입니다.
현재 온도는  7.08 입니다.
하지만 체감 온도는  5.74 °C 입니다.
최저 기온은  5.66 °C 입니다.
최고 기온은  9.69 °C 입니다.
습도는  61 % 입니다.
기압은  1023 hPa 입니다.
풍향은  320 N 입니다.
풍속은  2.06 m/s입니다.

참고문헌

aws 공식 문서 : API란 무엇입니까?
Requests 공식 문서
OpenWeather : 날씨 API 요청 사이트

profile
데이터 분린이:)

0개의 댓글