Python 복습 002 | 파이썬 날씨 정보 받아오기(API 활용)
파이썬 날씨 정보 받아오기(API 활용)
1) 사이트 회원가입
=> 마이페이지 들어가서 위의 APIkey 누르면 발급된 api key 확인 가능
2) API 의 개념
- API : Application Programming Interface
- "키보드","마우스"는 인간과 컴퓨터 이어줄 인터페이스
- "API" 도 키보드, 마우스와 같이 인간과 컴퓨터를 이어주는 역할을 수행
=> 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면, 즉, 서로 다른 두 개의 시스템을 연결해 주는 것
=> 프로그램과 프로그램을 이어주는 연결고리 - API를 만든다 : 사람이 필요한 기능을 만들어놓고, 규약에 맞춰서 열어놓는 것
3) API KEY
- API를 사용할 때 남겨두는 방명록 => API KEY
4) API 링크 만들기
- 우리가 사용할 서비스는 맨 좌측에 있는 서비스!
=> 형광펜 표시해놓은 아이로 API를 호출하는 것이 가능하다
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}&lang={lang}&units=metric"
=> 근데 이대로 api를 call하게 되면 city name이라는 글자와 your api key라는 글자 자체로 요청보내게 됨
- 응답을 원하는 API 주소로 요청을 보내는 것을 API를 call, 부른다고 함
- Python의 f-string이라는 것을 이용해서 링크 안에 변수를 집어넣기 가능
city = "Seoul"
apikey = "################################"
api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"
파이썬 f 스트링
python의 f-string을 사용하면 문자열 사이에 변수를 포맷팅
- 사용을 원하는 문자열 앞에 f 를 써 줍니다. 해당 문자열에 f-string 사용할 것임을 알려줌
- 변수 사용을 원하는 위치에 중괄호 넣고 집어넣고 싶은 데이터 써주는 것
- python 3.6 이상 버전 지원
4) API 호출하기
http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}
=> ~weather 이라는 주소로 요청을 보내면서 우리가 설정한 city와 apikey를 정보 또한 함께 보내는 것
import requests
apikey = "################################"
city = "Seoul"
api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"
위와 같이 api 호풀을 한 뒤 응답을 받아와야 함
=> requests 를 통해서 요청을 받아오면 된다
result = requests.get(api)
print(result.text)
5) json 방식으로 출력해오기
- 우리가 받은 response는 문자열
- 이 중에서 원하는 정보만 뽑아오기 위한 쉬운 방법 => json 모듈 사용
5-1 )json import 해오기
import json
그리고 데이터를 json 파일로 바꾸기
일반 문자열을 json 타입으로 변경 방법
json.loads() => 괄호 안에 타입 변경할 문자열 넣어주기
import requests
import json
apikey = "~~"
city = "Seoul"
api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"
result = requests.get(api)
print("json 데이터 변환 전")
print(result.text)
data = json.loads(result.text)
print("\njson 데이터 변환 후")
print(data)
=> 보기에는 별다른게 없음
print("\njson :",data["weather"])
print("\nstr :",result.text["weather"])
=> 근데 위와 같은 코드로 출력하면 json 으로 변환한 아이는 오케이인데 아래 친구는 오류가 난다.
=> 왜냐하면 json 파일은 사전 자료형이고 text는 문자 자료형이기 때문
json 파일 탐구
{ "좌표": { "경도": 126.98, "위도": 37.57 }, "날씨": [ { "날씨 아이디": 800, "날씨": "Clear", "설명": "clear sky", "아이콘 아이디": "01d" } ], "base": "stations", "메인 정보": { "온도": 300.75, "사람이 느끼는 온도": 300.38, "최저 기온": 300.15, "최고 기온": 301.15, "기압 ": 1004, "습도": 44 }, "시야값": 10000, "바람": { "풍속": 2.45, "풍향": 267 }, "구름": { "구름 비율": 1 }, "데이터 계산 시간": 1594798855, "sys": { "type": 1, "id": 8117, "국가 코드": "KR", "일출 시간": 1594758150, "일몰 시간": 1594810389 }, "timezone": 32400, "도시 id": 1835848, "도시 이름": "Seoul", "cod": 200 }
- 위와 같은 코드로 응답이 넘어옴
보기에는 사전형 같지만 str 임
그래서 저 응답을 json.loads를 통해서 json으로 변경시켜주면
dict 형태로 사용하는 것이 가능, 이를 통해서 데이터 불러오기- 그럼 dict 형태니깐 dict로 바꿔서 사용해도 되지 않냐고 생각이 들 수도 있겠지만
보내준 형식이 json 형식이므로 그냥 안전하게 json 형식으로 변경하자
6) 원하는 정보만 불러오는 방법
사전 문법 활용하기
사전대상["key"]
값을 호출하면 이에 해당하는 값들이 호출- 이때 해당하는 값들이 여러개라면 인덱스로 지정하는 것이 가능
- 사전 안에 사전이 있다면
사전대상1["사전대상1의key"][0]["사전대상1의ket의 값에 속하는 key들 중 원하는 것"]
으로 불러오면 됨
정보
최저 기온 : main - temp_min
최고 기온 : main - temp_max
습도 : main - humidity
기압 : main - pressure
풍향 : wind - deg
풍속 : wind - speed
- 우리가 알고자 하는 정보 : key 값 - key안의 key 값
(ex) 우리가 받아온 json 데이터들 (data 라는 변수로 받아왔음) 안에 있는 main 이란 아이 안의 temp 를 출력하고 싶다면 !?
1)
print("\n1 :",data["main"],"\n")
=> data 안에서 main 을 키 값으로 가지는 아이 출력
2)
print("\n2 :",data["main"]["temp"],"\n")
=> data 안에서 main을 키 값으로 가지고 main 안에서 temp를 키 값으로 가지는 아이 출력
원래 데이터, 1 수행 결과 , 2 수행 결과 비교
6-1 ) 위의 다양한 정보 출력 결과 코드
import requests
import json
apikey = "~"
city = "Seoul"
api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}"
result = requests.get(api)
# json 타입으로 변환
data = json.loads(result.text)
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"],"입니다.")
- weater 만 좀 자세히 보면 리스트화 되어 있고 weather의 0번째 인덱스가 저 빨간 줄 범위이다. 따라서 저 빨간줄 범위 전체를 가져오려면
["weather"][0]
인 거고 그 안의 description 이라는 키를 가지는 아이의 값을 데리고 오고 싶다면["weather"][0]["description]
7) 언어와 온도 단위 바꾸기
7-1 ) 언어 단위 바꾸기
- api 호출 시 language 값을 추가하면, 날씨의 설명이 한국어로 출력
lang = "원하는 언어" 추가
호출하는 코드에도 &lang={lang} 을 추가 시켜주기 - 제공하는 언어들 예시
weatheropenapi 언어 제공 링크
apikey = "~"
city = "Seoul"
lang = "kr"
api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}&lang={lang}"
7-2 ) 온도 단위 바꾸기
- api 호출 시 units을 imperial 로 작성시 K(켈빈)
-metric 으로 작성시 섭씨 (°C)로 온도가 출력
import requests
import json
apikey = "b~"
city = "Seoul"
lang = "kr"
api = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}&lang={lang}&units=metric"
result = requests.get(api)
# json 타입으로 변환
data = json.loads(result.text)
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"],"입니다.")
- 아래 코드 중 위는 켈빈 기준, 밑은 섭씨(units=metric) 기준이다
Author And Source
이 문제에 관하여(Python 복습 002 | 파이썬 날씨 정보 받아오기(API 활용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@myway00/Python-복습-002-파이썬-날씨-정보-받아오기API-활용저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)