날씨 api를 불러오는 코딩중인데 도움이 필요합니다..

2023.06.11 16:40 1,177 Views

import requests # HTTP 요청을 보내는 모듈

import json # json 파일 파싱하여 데이터 읽는 모듈

import datetime # 날짜시간 모듈

from datetime import date, datetime, timedelta # 현재 날짜 외의 날짜 구하기 위한 모듈



# 기상청_동네 예보 조회 서비스 api 데이터 url 주소

vilage_weather_url = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtFcst?"

# 실황정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 조회 조건으로

# 자료구분코드, 실황값, 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능



service_key = "서비스키"


now = datetime.now()



print("날씨를 구하고자 하는 지역의 위도, 경도 값을 입력하시오 - ex) 용인 기흥구 (62 120)")

print("(x y) : ", end="")

nx,ny=input().split()


# 오늘

today = datetime.today().strftime("%Y%m%d")

y = date.today() - timedelta(days=1)

yesterday = y.strftime("%Y%m%d")



# 1일 총 8번 데이터가 업데이트 된다.(0200, 0500, 0800, 1100, 1400, 1700, 2000, 2300)

# 현재 api를 가져오려는 시점의 이전 시각에 업데이트된 데이터를 base_time, base_date로 설정

# 1일 총 8번 데이터가 업데이트 된다.(0200, 0500, 0800, 1100, 1400, 1700, 2000, 2300)

# 현재 api를 가져오려는 시점의 이전 시각에 업데이트된 데이터를 base_time, base_date로 설정

if now.minute<45: # base_time와 base_date 구하는 함수

        if now.hour==0:

            base_time = "2330"

            base_date = yesterday

        else:

            pre_hour = now.hour-1

            if pre_hour<10:

                base_time = "0" + str(pre_hour) + "30"

            else:

                base_time = str(pre_hour) + "30"

            base_date = today

else:

        if now.hour < 10:

            base_time = "0" + str(now.hour) + "30"

        else:

            base_time = str(now.hour) + "30"

        base_date = today

   


payload = "serviceKey=" + service_key + "&" +\

    "base_date=" + base_date + "&" +\

    "base_time=" + base_time + "&" +\

    "nx=" + nx + "&" +\

    "ny=" + ny + "&" +\

    "dataType=JSON"

# 값 요청 (웹 브라우저 서버에서 요청 - url주소와 )

res = requests.get(vilage_weather_url + payload)


items = res.json().get('response').get('body').get('items')


weather_data = dict()


for item in items['item']:

    # 기온

    if item['category'] == 'T1H':

        weather_data['tmp'] = item['fcstValue']

    # 습도

    if item['category'] == 'REH':

        weather_data['hum'] = item['fcstValue']

    # 하늘상태: 맑음(1) 구름많은(3) 흐림(4)

    if item['category'] == 'SKY':

        weather_data['sky'] = item['fcstValue']

    # 1시간 동안 강수량

    if item['category'] == 'RN1':

        weather_data['rain'] = item['fcstValue']


print("response: ", weather_data)


위가 전체 코드이고

실행 후에 위도, 경도값을 입력하면 이런 에러가 뜹니다. 혹시 어떤 부분이 문제인지 아시는 분 계실까요?