【Pepper】 날씨 API와의 제휴
10628 단어 Pepper
Pepper에게 "오늘의 날씨는?"
거기서, 이번은 OpenWeatherMap 라고 하는 무료의 날씨 API와 제휴해, Pepper가 날씨 정보를 가르쳐 주는 것 같은 프로젝트를 자작했으므로 소개합니다.
API 응답은 JSON 형식입니다. 아래 기사를 참고하십시오.
JSON - 날씨 정보 얻기
날씨 획득 상자 만들기
Weather 상자 스크립트
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self, False)
def onLoad(self):
pass
def onUnload(self):
pass
def onInput_onStart(self, p):
# self.logger.info(p)
import requests
import json
r = requests.get('http://api.openweathermap.org/data/2.5/forecast?q="Tokyo","Japan"')
list = r.json()['list']
today = list[2]
tommorow = list[10]
result = {\
"今日の天気は":getWeather(today),\
"今日の温度は":getTempa(today),\
"明日の天気は":getWeather(tommorow),\
"明日の温度は":getTempa(tommorow)\
}
self.result(result[p])
pass
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped() #activate the output of the box
def getWeather(obj):
weather = obj['weather'][0]['main'].replace('"', '')
if (weather == 'Clear'):
return '晴れです'
elif (weather == 'Clouds'):
return '曇りです'
elif (weather == 'Rain'):
return '雨です'
else:
return 'わかりません'
def getTempa(obj):
temp = int(float(json.dumps(obj['main']['temp']).replace('"','')) - 273.15)
return str(temp) + '度です'
코드 해설
순서대로 설명합니다.
먼저 onInput_onStart 메서드의 인수에 p를 추가합니다.
이것은 이전의 박스로부터의 출력치를 받습니다.
Weatherdef onInput_onStart(self, p):
그런 다음 API에 액세스하여 검색합니다.
이 때 미리 필요한 모듈을 가져옵니다.
API 정보今回アクセスするAPIで取得できる天気情報は、
0時・3時・6時…と、3時間おきに定時刻に配信されます。
APIを叩いた時刻に最も近い天気情報は、list[2]で取得できます。
1日あたりの配信数は8通となりますので(24時間÷3時間 = 8通)
翌日の同配信時刻は、リスト番号に+8した
list[10]で取得できます。
Weatherimport requests # HTTPリクエストするのに必要
import json # JSON操作するのに必要
# 東京の天気を取得
# forecastで"Call 5 day / 3 hour forecast data"(5日分の3時間毎の情報)を取得
r = requests.get('http://api.openweathermap.org/data/2.5/forecast?q="Tokyo","Japan"')
# listにforecastの情報が配列として入っているので取得
list = r.json()['list']
# 今日の情報を取得
today = list[2]
# 明日の情報を取得
tommorow = list[10]
나중에 출력에 결과를 반환합니다.
Weather# Speech Recoの結果によって返す値を切り替える
result = {\
"今日の天気は":getWeather(today),\
"今日の温度は":getTempa(today),\
"明日の天気は":getWeather(tommorow),\
"明日の温度は":getTempa(tommorow)\
}
# 出力変数resultに値をセット
self.result(result[p])
결론
API에 따라 JSON의 구조가 다르기 때문에,
사용하고 싶은 API에 맞게 변경하십시오.
이번 코드는 여기
Reference
이 문제에 관하여(【Pepper】 날씨 API와의 제휴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamarobo/items/e57cb2e3f5ac21464bfa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def onInput_onStart(self, p):
今回アクセスするAPIで取得できる天気情報は、
0時・3時・6時…と、3時間おきに定時刻に配信されます。
APIを叩いた時刻に最も近い天気情報は、list[2]で取得できます。
1日あたりの配信数は8通となりますので(24時間÷3時間 = 8通)
翌日の同配信時刻は、リスト番号に+8した
list[10]で取得できます。
import requests # HTTPリクエストするのに必要
import json # JSON操作するのに必要
# 東京の天気を取得
# forecastで"Call 5 day / 3 hour forecast data"(5日分の3時間毎の情報)を取得
r = requests.get('http://api.openweathermap.org/data/2.5/forecast?q="Tokyo","Japan"')
# listにforecastの情報が配列として入っているので取得
list = r.json()['list']
# 今日の情報を取得
today = list[2]
# 明日の情報を取得
tommorow = list[10]
# Speech Recoの結果によって返す値を切り替える
result = {\
"今日の天気は":getWeather(today),\
"今日の温度は":getTempa(today),\
"明日の天気は":getWeather(tommorow),\
"明日の温度は":getTempa(tommorow)\
}
# 出力変数resultに値をセット
self.result(result[p])
API에 따라 JSON의 구조가 다르기 때문에,
사용하고 싶은 API에 맞게 변경하십시오.
이번 코드는 여기
Reference
이 문제에 관하여(【Pepper】 날씨 API와의 제휴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamarobo/items/e57cb2e3f5ac21464bfa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)