forecastpy

A python package to interact with the OpenWeatherAPI in a simple and fast way.


Keywords
weather, forecast, openweathermap
License
GPL-3.0
Install
pip install forecastpy==1.1.0

Documentation

ForecastPy

A python package to interact with the OpenWeatherAPI in a simple and fast way.

Live demo here.

Table of Contents

Getting Started

Installation

Use the package manager pip to install ForecastPy.

pip install forecastpy

Usage

from forecastpy import Weather, Unit, Days

# Init Weather object with your open weather api key
weather = Weather('YOUR_API_KEY')

# Get current weather from a city name
w = weather.get_current_weather('CITY_NAME', unit=Unit.METRIC)

# Get weather for more than one day
w2 = weather.get_days_weather('CITY_NAME', unit=Unit.METRIC, days=Days.TWO)

Documentation

Dependencies

  • requests

Unit

Unit is a class which makes thing easier when you have to choose the unit type you want from the weather forecast. The available units are:

  • Kelvin (Default option)
  • Metric
  • Fahrenheit
Usage
Unit.METRIC # return 'metric'
Unit.FAHRENHEIT # return 'imperail'
...

Days

Days is a class which makes thing easier when you have to choose the number of days you want. The lowest number is 2 and the maximum is 5 (which is the higher number of day set on the free version of the OpenWeatherAPI)

The available days are:

  • Two
  • Three
  • Four
  • Five (Default option)
Usage
Days.TWO # return 2
Days.THREE # return 3
...

Weather

Weather is the class you'll need to use to interact with the OpenWeatherAPI. It requires the OpenWeatherAPI key as its only parameter when you have to initialize it. Learn more about the OpenWeatherAPI.

Methods

get_current_weather(city_name, unit = Unit.KELVIN)

It makes an http request (throught the requests package) to the OpenWeatherMap API to get the current weather forecast of the city you searched.

Parameter Description Required
city_name a string that represents the city you want to know the weather Yes
unit default unit is kelvin (You can leave it empty). See Unit for futher info. No

This method returns a dictionary like the one below:

{
        'is_status_code_ok': True,
        'id': 2643743,
        'name': 'London',
        'country': 'GB',
        'forecast':{
            'main': 'Drizzle',
            'description': 'light intensity drizzle',
            'temperature': 280.32,
            'humidity': 81,
            'wind_speed': 4.1,
            'icon': '09d'
        }
}

For errors, see the Errors section.

get_days_weather(self, city_name, unit = Unit.KELVIN, days = Days.FIVE)

If you want to know the weather of a city for a maximum of 5 days (including the current day) you have to use this method.

Parameter Description Required
city_name a string that represents the city you want to know the weather Yes
unit default unit is kelvin (You can leave it empty). See Unit for futher info. No
days default day is five [5] (You can leave it empty). See Days for futher info. No

This method returns a dictionary like the one below (in this example the unit was metric and the days were two):

{
   'is_status_code_ok':True,
   'id':2643743,
   'name':'London',
   'country':'GB',
   'forecasts':[
      {
         'date':'28/05/2019',
         'temp_min':13,
         'temp_max':18,
         'weather':[
            {
               'time':'17:00:00',
               'main':'Clear',
               'description':'Clear sky',
               'temperature':17,
               'wind_speed':3.88,
               'icon':'01d'
            },
            {
               'time':'20:00:00',
               'main':'Clear',
               'description':'Clear sky',
               'temperature':16,
               'wind_speed':2.86,
               'icon':'01d'
            },
            {
               'time':'23:00:00',
               'main':'Rain',
               'description':'Light rain',
               'temperature':13,
               'wind_speed':0.68,
               'icon':'10n'
            }
         ]
      },
      {
         'date':'29/05/2019',
         'temp_min':10,
         'temp_max':18,
         'weather':[
            {
               'time':'02:00:00',
               'main':'Rain',
               'description':'Light rain',
               'temperature':11,
               'wind_speed':1.35,
               'icon':'10n'
            },
            {
               'time':'05:00:00',
               'main':'Clouds',
               'description':'Overcast clouds',
               'temperature':10,
               'wind_speed':1.26,
               'icon':'04n'
            },
            {
               'time':'08:00:00',
               'main':'Clouds',
               'description':'Broken clouds',
               'temperature':11,
               'wind_speed':1.21,
               'icon':'04d'
            },
            {
               'time':'11:00:00',
               'main':'Clouds',
               'description':'Scattered clouds',
               'temperature':15,
               'wind_speed':1.57,
               'icon':'03d'
            },
            {
               'time':'14:00:00',
               'main':'Clouds',
               'description':'Scattered clouds',
               'temperature':15,
               'wind_speed':4.3,
               'icon':'03d'
            },
            {
               'time':'17:00:00',
               'main':'Clouds',
               'description':'Broken clouds',
               'temperature':15,
               'wind_speed':4.64,
               'icon':'04d'
            },
            {
               'time':'20:00:00',
               'main':'Clouds',
               'description':'Broken clouds',
               'temperature':15,
               'wind_speed':3.7,
               'icon':'04d'
            },
            {
               'time':'23:00:00',
               'main':'Clouds',
               'description':'Overcast clouds',
               'temperature':14,
               'wind_speed':3.79,
               'icon':'04n'
            }
         ]
      }
   ]
}

For errors, see the Errors section.

Errors

In case something goes wrong this dictionary is what is returned:

{
    'is_status_code_ok': False,
    'cod': '404',
    'message': 'city not found'
}

Common status code error:

Code Description
400 Bad Request - city_name or API_KEY not set
401 Invalid API key. Please see http://openweathermap.org/faq#error401 for more info.
404 city not found
429 API key blocked
500 internal server error

Check the status code of your request

If you want to quickly check if your request was successful or not, just check the is_status_code_ok like:

w['is_status_code_ok']

If the response status code is less than 400 it's True otherwise it's False

Built With

Version

1.1.0

Optimization and cleanup code. Add NoneType control to the class constructur to prevent error.

1.0.2

Temperature is now a int type

1.0.1

Add install_requires to setup.py file.

1.0.0

Initial release. Include features like get the current weather of a city or get the weather of a city for more than one day.

Author

Cosimo Matteini - devmatteini on github

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details