Merge branch 'weather' into 'master'

weather

See merge request ldooks/dragon-bot!38
This commit is contained in:
Jason Ji 2017-09-22 01:01:22 +00:00
commit 2adfaa0a51
4 changed files with 69 additions and 3 deletions

View File

@ -4,7 +4,7 @@ services:
before_script: before_script:
- apk add --no-cache python3 - apk add --no-cache python3
- pip3 install pylint requests discord.py docker pylint wolframalpha beautifulsoup4 - pip3 install pylint requests discord.py docker pylint wolframalpha pyowm beautifulsoup4
stages: stages:
- test - test

View File

@ -2,7 +2,7 @@ FROM python:3.6.2-alpine3.6
LABEL name="Dragon Bot" LABEL name="Dragon Bot"
RUN apk update && apk add --no-cache docker RUN apk update && apk add --no-cache docker
RUN pip install requests discord.py docker wolframalpha beautifulsoup4 RUN pip install requests discord.py docker wolframalpha pyowm beautifulsoup4
ADD app /app ADD app /app
CMD python app/dragon-bot.py CMD python app/dragon-bot.py

View File

@ -2,7 +2,7 @@ FROM python:3.6.2-alpine3.6
LABEL name="Dragon Bot Test environment" LABEL name="Dragon Bot Test environment"
RUN apk update && apk add --no-cache vim docker RUN apk update && apk add --no-cache vim docker
RUN pip install requests discord.py docker pylint wolframalpha beautifulsoup4 RUN pip install requests discord.py docker pylint wolframalpha pyowm beautifulsoup4
ADD app /app ADD app /app
RUN printf "\n\nTesting your python code for errors\n\n" && \ RUN printf "\n\nTesting your python code for errors\n\n" && \

66
app/weather.py Normal file
View File

@ -0,0 +1,66 @@
import requests
from pyowm import OWM
from pyowm import exceptions
days_from_ind = {0: 'Today', 1: 'Tomorrow', 2: 'Day after tomorrow'}
emojis = {'clear sky': ':sunny:', 'scattered clouds': ':partly_sunny:',
'light rain': ':white_sun_rain_cloud:', 'overcast clouds': ':cloud:',
'broken clouds': ':white_sun_cloud:', 'moderate rain': ':cloud_with_rain:',
'light snow': ':cloud_snow:', 'few clouds': ':white_sun_small_cloud:'}
def get_weather(location):
"""
get_weather(location)
Returns the weather forecast for the selected location. Uses PythonOWM to
make life super easy.
TODO: Replace basic code block with nice looking, bold text w/ emojis
"""
try:
openweathermap = OWM('593e0e182f9278a10443da354c4014db')
forecaster = openweathermap.three_hours_forecast(location)
forecast = forecaster.get_forecast()
reg = forecast.get(0)
location = forecast.get_location().get_name()
indicator = int(reg.get_reference_time(timeformat='iso')[11:13]) // 3
curr_stat = '{}{}{}{}{}'.format(' \n***Status in ', location, ':*** *',
reg.get_detailed_status().title(), '*\n')
curr_temp = '{}{}{}'.format('**Current Temperature:** *',
str(reg.get_temperature('fahrenheit').get('temp')),
'F*\n\n__**3 day forecast:**__\n')
forecast_str = '{}{}'.format(curr_stat, curr_temp)
ind = 0
for i in range((4 - indicator) % 8, int((3 * len(forecast)) / 5), 8):
high, low = 0, 100000
for j in range(0, 8):
if (i + j < (3 * len(forecast)) / 5):
day = forecast.get(i + j)
else:
break
temps = day.get_temperature('fahrenheit')
h = temps.get('temp_max')
l = temps.get('temp_min')
print(forecast.get(i + j).get_detailed_status())
if high < h:
high = h
if low > l:
low = l
day = '{}{}{}'.format('***', days_from_ind.get(ind), '***\n')
weather_stat = '{}{}{}{}{}'.format('**Status:** *',
forecast.get(i).get_detailed_status().title(),
'* ', emojis.get(forecast.get(i).get_detailed_status()), '\n')
high_temp = '{}{}{}'.format('**High:** *', str(high), 'F*\n')
low_temp = '{}{}{}'.format('**Low:** *', str(low), 'F*\n\n')
forecast_str = '{}{}{}{}{}'.format(
forecast_str, day, weather_stat, high_temp, low_temp)
ind += 1
return forecast_str
except exceptions.not_found_error.NotFoundError:
return 'Please input a valid location'