API란?
어떤 사이트가 가지고 있는 기능을 외부에서 쉽게 사용할수 있도록 공개해준것입니다.
API를 제공하는 이유
서버의 부하를 감소시키기 위해
기업들은 이익을 보는것도 중요하지만 피해를 보면 안됩니다. 웹사이트의 기능을 크롤링을해서 사용할 수 있는데 서버의 부하가 커지게 되고 그럴바에야 api를 제공하기로 한 것입니다.
전세계의 날씨API 받아오기
https://home.openweathermap.org/api_keys
위의 사이트에서 회원가입을 하고 아래 사진에 보이는 API Keys를 클릭합니다.
key라고 써져있는 부분에 빨간박스 안의 문자를 복사해둡니다.
코드
import requests
import json
보통 웹API의 결과는 JSON형식이나 XML형식 리턴을 합니다.
openweathermap에서는 JSON형식으로 리턴합니다.
따라서, JSON형식의 데이터를 파이썬 데이터형식으로 변환해줘야 하는데
이때 JSON 모듈이 필요합니다.
apikey="발급받은 API키"
아까 사이트에서 발급받은 api키를 넣어줍니다.
city_list = ["Seoul ,KR","Tokyo,JP","New York,US"]
제가 확인하고싶은 도시를 입력합니다.
api="http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
api를 지정합니다 ( 나중에 url확인해보면 json형식의 텍스트파일로된 데이터를 확인할 수 있습니다.)
#k2C = lambda k: k - 273.15
def k2C(k):
return k - 273.15
켈빈온도를 섭씨로 변경해주는 함수입니다. ( 람다, 일반 )
#각 도시의 정보를 추출하기
for name in city_list:
#API의 URL 구성하기
url = api.format(city=name, key=apikey)
print(url)
#API 요청을 보내 날씨 정보를 가져오기
res = requests.get(url)
#JSON형식의 데이터를 파이썬형으로 변환한다.
data = json.loads(res.text)
#결과출력
print("**도시 = ", data["name"])
print("| 날씨 = ", data["weather"][0]["description"])
print("| 최저 기온 = ", k2C(data["main"]["temp_min"]))
print("| 최고 기온 = ", k2C(data["main"]["temp_max"]))
print("| 습도 = ", data["main"]["humidity"])
print("| 기압 = ", data["main"]["pressure"])
print("| 풍향 = ", data["wind"]["deg"])
print("| 풍속 = ", data["wind"]["speed"])
print(" ")
json 형태로 되어있는 텍스트파일을 접근해서 출력을 해보았습니다.
습도 ex) 아래의 json 형식에서 습도의 key값은 main이고 그안의 humidity를 접근하면 됩니다.
그래서 data안의 main안의 humidity를 접근할때 저런 방식으로 순서대로 접근합니다.
JSON
#OpenWeatherMap의 API 결과(JSON Data)
{
"coord":{"lon":126.98,"lat":37.57}, //위도, 경도
"weather":[
{ "id":500,
"main":"Rain",
"description":"light rain",
"icon":"10d"
},
{"id":701,
"main":"Mist", // 날씨
"description":"mist", // 날씨 설명
"icon":"50d"
}
],
"base":"stations",
"main":
{
"temp":280.76, //기온(켈빈온도)
"pressure":1021, //기압
"humidity":66, //습도
"temp_min":280.15, //최저기온
"temp_max":281.15 //최고기온
},
"visibility":4800, //가시거리 (m)
"wind":
{
"speed":6.7, //풍속
"deg":210 //풍향 ( 북:0 동:90 남:180 서: 270 )
},
"clouds":{ "all":90 }, //구름의 양(%)
"dt":1511584080, //데이터시간(Unix타임형식)
"sys":
{
"type":1,
"id":7676,
"message":0.0489,
"country":"KR",
"sunrise":1511562128, //일출시간
"sunset":1511597742 //일몰시간
},
"id":1835848,
"name":"Seoul",
"cod":200
}
'언어 > 파이썬' 카테고리의 다른 글
[python] 파이썬 네이버 api 사용해서 블로그 제목 가져오기 (0) | 2020.11.12 |
---|---|
[python] 파이썬 셀레니움(selenium) #5 네이버 자동검색 예제 (0) | 2020.11.09 |
[python] 파이썬 셀레니움(selenium) 사용법 #4 자동로그인 예제 (0) | 2020.11.09 |
[python] 파이썬 셀레니움(selenium) 사용법 #3 네이버 화면 캡쳐 예제 (0) | 2020.11.09 |
[python] 파이썬 셀레니움(selenium) #2메소드 종류 (0) | 2020.11.09 |