A Python wrapper around the OpenWeatherMap web API

Overview

logo

PyOWM

A Python wrapper around OpenWeatherMap web APIs

PyPI version PyPI - Downloads
PyPI - Python Version
Latest Release Documentation Build Status Coverage Status
Buy Me A Coffee Say Thanks!

What is it?

PyOWM is a client Python wrapper library for OpenWeatherMap (OWM) web APIs. It allows quick and easy consumption of OWM data from Python applications via a simple object model and in a human-friendly fashion.

PyOWM runs on Python 3.7+

Former Dark Sky API users: you can can use PyOWM to get OpenWeatherMap's OneCall API data as an easy replacement to Dark Sky

What kind of data can I get with PyOWM ?

With PyOWM you can integrate into your code any of the following OpenWeatherMap web APIs:

  • Weather API v2.5 + OneCall API, providing current weather data, weather forecasts, weather history
  • Agro API v1.0, providing soil data and satellite imagery search and download
  • Air Pollution API v3.0, providing data about CO, O3, NO2 and SO2
  • UV Index API v3.0, providing data about Ultraviolet exposition
  • Stations API v3.0, allowing to create and manage meteostation and publish local weather measurements
  • Weather Alerts API v3.0, allowing to set triggers on weather conditions and areas and poll for spawned alerts
  • Image tiles for several map layers provided by OWM

Get started

API key

As OpenWeatherMap APIs need a valid API key to allow responses, PyOWM won't work if you don't provide one. This stands for both free and paid (pro) subscription plans. You can signup for a free API key on the OWM website Please notice that the free API subscription plan is subject to requests throttling.

Example

With a free OWM API Key:

from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps

# ---------- FREE API KEY examples ---------------------

owm = OWM('your free OWM API key')
mgr = owm.weather_manager()


# Search for current weather in London (Great Britain) and get details
observation = mgr.weather_at_place('London,GB')
w = observation.weather

w.detailed_status         # 'clouds'
w.wind()                  # {'speed': 4.6, 'deg': 330}
w.humidity                # 87
w.temperature('celsius')  # {'temp_max': 10.5, 'temp': 9.7, 'temp_min': 9.0}
w.rain                    # {}
w.heat_index              # None
w.clouds                  # 75

# Will it be clear tomorrow at this time in Milan (Italy) ?
forecast = mgr.forecast_at_place('Milan,IT', 'daily')
answer = forecast.will_be_clear_at(timestamps.tomorrow())

# ---------- PAID API KEY example ---------------------

config_dict = config.get_default_config_for_subscription_type('professional')
owm = OWM('your paid OWM API key', config_dict)

# What's the current humidity in Berlin (Germany) ?
one_call_object = mgr.one_call(lat=52.5244, lon=13.4105)
one_call_object.current.humidity

Installation

Install with pip for your ease:

$ pip install pyowm

There are alternatives: setuptools, Windows installers and common Linux package managers such as Yaourt (Arch Linux) YaST/Zypper (OpenSuse) (please refer to the documentation for more detail)

Eager to fetch the very latest updates to PyOWM? Install the development trunk (which might be unstable). Eg on Linux:

$ git clone https://github.com/csparpa/pyowm.git
$ cd pyowm && git checkout develop
$ pip install -r requirements.txt && python setup.py install

Documentation

The library software API documentation is available on Read the Docs.

The Code recipes section comes in handy!

Help - PyOWM is giving me errors!

Please read the FAQ section of the documentation before filing a new issue on GitHub!

There are many common issues, therefore a fix for your issue might come easier than you think

Community & Contributing

Here are some cool projects that use PyOWM

Join the PyOWM public Slack team by signing up here

Contributors (coding, testing, packaging, reporting issues) are welcome! See the the official documentation website for details or the CONTRIBUTING.md file for a quick primer.

License

MIT license

Comments
  • The API worhs for weather_at_place() but not for forecast_at_place()

    The API worhs for weather_at_place() but not for forecast_at_place()

    The API works with:

    owm = pyowm.OWM(owm_token)
    mgr = owm.weather_manager()
    obs = mgr.weather_at_place('Roma')
    

    But if I use:

    daily_forecast = mgr.forecast_at_place('Roma', 'daily').forecast

    It give me this error:

    raise exceptions.UnauthorizedError('Invalid API Key provided')
    pyowm.commons.exceptions.UnauthorizedError: Invalid API Key provided
    

    With only the weather_at_place() code it works but if I add at the same program the forecast_at_place() it gives me this error.

    potential-bug 
    opened by EightFawn 21
  • AttributeError: 'OWM' object has no attribute 'weather_at_place'`

    AttributeError: 'OWM' object has no attribute 'weather_at_place'`

    GitHub actions returned this error code, after hundreds of successful runs. Run python main.py Traceback (most recent call last): File "main.py", line 68, in <module> csvArrIn = getWeatherInfo(city) File "main.py", line 35, in getWeatherInfo obs = owm.weather_at_place(city+',CZ') AttributeError: 'OWM' object has no attribute 'weather_at_place'

    opened by filiptronicek 19
  • Pip install pyowm 2.6.0 does not seem to install registry files

    Pip install pyowm 2.6.0 does not seem to install registry files

    • Python 3.5.2+
    • PyOWM 2.6.0
    • Linux 4.8.0-34-generic Ubuntu

    pip installed pyowm, really excited to test these new registries (thanks!). But I got this:

    File "/usr/local/lib/python3.5/dist-packages/pkg_resources/__init__.py", line 1569, in get_resource_stream
        return open(self._fn(self.module_path, resource_name), 'rb')
    FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib/python3.5/dist-packages/pyowm/webapi25/cityids/103-108.txt'
    

    I got no result from locate 103-108.txt

    and for ll /usr/local/lib/python3.5/dist-packages/pyowm/webapi25/cityids I got:

    drwxr-sr-x 3 root staff 4096 Jan 30 22:38 ./
    drwxr-sr-x 5 root staff 4096 Jan 30 22:38 ../
    -rw-r--r-- 1 root staff    1 Jan 30 22:38 __init__.py
    drwxr-sr-x 2 root staff 4096 Jan 30 22:38 __pycache__/
    

    So then I tried pip install --upgrade --no-deps --force-reinstall pyowm

    Collecting pyowm
    Installing collected packages: pyowm
      Found existing installation: pyowm 2.6.0
        Uninstalling pyowm-2.6.0:
          Successfully uninstalled pyowm-2.6.0
    Successfully installed pyowm-2.6.0
    

    But still no luck. In the scripts dir I see https://github.com/csparpa/pyowm/blob/master/scripts/generate_city_id_files.py but this doesn't appear to be in the pip install, so I downloaded and ran it but got

      File "generate_city_id_files.py", line 25
        print 'Downloading file '+city_list_url+' ...'
                                ^
    SyntaxError: Missing parentheses in call to 'print'
    

    Meaning it's not python 3.5 compatible - I don't really want to install python 2 if I don't need to, but is this the only way?

    My apologies if I am being stupid here and missing something and I do appreciate all your work on this.

    bug 
    opened by ghost 18
  • Py3 OSX

    Py3 OSX "Module not found"

    The installation makes no trouble i get the success message for Py2 and 3. When trying to import them Py2 makes no trouble but Py3 says ModuleNotFoundError: No module named 'pyowm'. Installed via pip2 install pyowm and pip3 install pyowm. I also tried pip install git+https://github.com/csparpa/pyowm.git@develop but the problem still remains.

    (I hade no problem installing it on my Windows.)

    opened by BartzLeon 14
  • Cannot get city info for any US city

    Cannot get city info for any US city

    Hi, I'm trying to use the following function to get the city info:

    list_of_locations = city_registry.locations_for("New York", country="US")
    

    It returns the empty list. The following function returns non-empty list:

    list_of_locations = city_registry.locations_for("Paris", country="FR")
    

    What could be the reason for the empty list in the first case? I tried many different US cities and all of them return empty list. Thanks!

    enhancement refactoring 
    opened by project-owner 11
  • Support One Call API

    Support One Call API

    Overview

    In the dusk of the popular Dark Sky API, it might be worth considering to add support for the One Call API, which is considered the alternative.

    Reference

    Migration guide

    https://openweathermap.org/darksky-openweather?gclid=Cj0KCQjw-Mr0BRDyARIsAKEFbefcb00d_wztgHKOYj4HYEF1fLl-DnE0Yek9vWQ_bxptj2PcYLSNhDwaAu8REALw_wcB

    API docs

    https://openweathermap.org/api/one-call-api

    new feature requested-by-users 
    opened by difelice 9
  • Fix incorrect name for city New London [id:4839416].

    Fix incorrect name for city New London [id:4839416].

    In the old cities.db.bz2 file the record for "New London" [id: 4839416] had the name set incorrectly to "New Londonhttps://www.geonames.org/1524325/ekibastuz.html#", as seen in this screenshot:

    image

    In the updated cities.db.bz2 file this has been corrected as shown here:

    image

    bug 
    opened by Crozzers 8
  • Two types of weather condition icons

    Two types of weather condition icons

    https://openweathermap.org/weather-conditions shows two different types of icons, with the base URI being different: http://openweathermap.org/img/wn/ vs http://openweathermap.org/img/w/. PyOWM uses the latter right now: https://github.com/csparpa/pyowm/blob/e35446ebe081c0b14a25dca0f7f8105836745b04/pyowm/weatherapi25/uris.py#L18 Is there a documented reason for there being two different types? And would it be possible to choose which type to use with Weather.weather_icon_url? In my opinion, the /wn/ versions are cleaner and clearer in most cases.

    question 
    opened by Harmon758 8
  • AgroMonitor API

    AgroMonitor API

    Not sure if it is a current issue with AgroMonitor or OpenWeatherMap in general but I keep on getting a time out error when trying to download satellite imagery as in the example in the docs.

    https://pyowm.readthedocs.io/en/latest/usage-examples-v2/agro-api-usage-examples.html#operations-summary

    It seems that I am capable of getting one image without the error though when I then go to get the stats or view the image it's blank as well. Checking the length of the returned results shows that there should be 5 images available for the time frame that I searched in my polygon.

    Tested on Win7 in a JupyterLab environment, Python 3.6, also sent a request to OWM help desk info just to check if there's an issue on their end.

    potential-bug 
    opened by geofbaum 8
  • Unauthorized error when using free api key for daily_forecast

    Unauthorized error when using free api key for daily_forecast

    Hi Claudio,

    Thank you for maintaining this library. I am a beginner trying to get daily forecast information from OWM. According to the website it is possible to get 5 days/3 hour forecast with the free API, however I get an error when I use your daily_forecast method. I know my API key is working because I am able to get current condition information. I am using Python 3.5, Windows 10, Jupyter Notebook. Below is a sample code that produces this error. Any suggestions for how to get daily forecast info would be greatly appreciated. I am only looking for the forecast for today and tomorrow. Thanks.

    Code: from pyowm import OWM API_key = 'I use my free API key' location = 'Seattle, US' owm = OWM(API_key) fc = owm.daily_forecast(location)

    Error: UnauthorizedError: Your API subscription level does not allow to perform this operation Reason: Invalid API key

    potential-bug 
    opened by gsimiao 8
  • [Feature suggestion] Change wind speed unit

    [Feature suggestion] Change wind speed unit

    While get_temperature()supports unit parameter, get_wind() does not support it. OWM has wind speed unit available as Imperial (miles/hour) or Metric (meter/sec) unit.

    Suggested implementation: w.get_wind(unit = 'Imperial') or
    w.get_wind(unit = 'miles/hour') or
    w.get_wind('Imperial')

    References: https://openweathermap.org/weather-data

    enhancement contributor-friendly 
    opened by feliciakri 8
  • Bump certifi from 2021.10.8 to 2022.12.7

    Bump certifi from 2021.10.8 to 2022.12.7

    Bumps certifi from 2021.10.8 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • openweathermap deprecating 2.5 APIs

    openweathermap deprecating 2.5 APIs

    It looks like open weather map are progressing the deprecation of the 2.5 API set used by pyowm. This is the response I got from them on a support ticket about access problems with a new API key: "In general One Call 1.0 (2.5) has been replaced by 3.0. That is the reason for getting the 401 error."

    3.3.0 still uses the 2.5 API set as its base URL for One Call APIs (compared to 3.0 for other APIs).

    Are there any plans to adopt the 3.0 One Call APIs?

    opened by KeithB 12
  • Having problems with SQLite3 connection

    Having problems with SQLite3 connection

    Hello there! I have been trying to use the module for a personal project, but I haven't been able to get it to work, I think this is probably a misconfiguration from my environment from what I have been able to see online, but I still want to ask here so maybe I can get some help, as I haven't been able to find anything that can solve this. Of course, I have tried to do the obvious things like reinstalling everything back again, but still nothing changes. I am able to import the package all fine, but whenever I try to use it, it crashes showing the following message:

    Traceback (most recent call last):
      File "C:\Users\Juan\Desktop\analisis-meteorologico\src\main.py", line 19, in <module>
        reg = owm.city_id_registry()
      File "C:\Users\Juan\AppData\Local\Programs\Python\Python310\lib\site-packages\pyowm\owm.py", line 96, in city_id_registry
        return cityidregistry.CityIDRegistry.get_instance()
      File "C:\Users\Juan\AppData\Local\Programs\Python\Python310\lib\site-packages\pyowm\commons\cityidregistry.py", line 29, in get_instance
        return CityIDRegistry(CITY_ID_DB_PATH)
      File "C:\Users\Juan\AppData\Local\Programs\Python\Python310\lib\site-packages\pyowm\commons\cityidregistry.py", line 21, in __init__
        self.connection = self.__decompress_db_to_memory(sqlite_db_path)
      File "C:\Users\Juan\AppData\Local\Programs\Python\Python310\lib\site-packages\pyowm\commons\cityidregistry.py", line 52, in __decompress_db_to_memory
        src_conn = sqlite3.connect(tmpf_name)
    sqlite3.OperationalError: unable to open database file
    

    Thanks!

    opened by juanpuerto23 5
  • Understand why some tests fail on Travis CI but pass locally

    Understand why some tests fail on Travis CI but pass locally

    Unit tests failing on Travis CI: https://app.travis-ci.com/github/csparpa/pyowm/builds/249771377

    Branch: develop Module: tests.unit.airpollutionapi30.test_airpollution_client.TestAirPollutionHttpClient

    # extract from Travis CI build log
    
    ======================================================================
    FAIL: test_get_coi (tests.unit.airpollutionapi30.test_airpollution_client.TestAirPollutionHttpClient)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/home/travis/build/[secure]/pyowm/tests/unit/airpollutionapi30/test_airpollution_client.py", line 42, in test_get_coi
        self.assertEqual(expected_url, result)
    AssertionError: 'co/43.75,8.25/current.json' != {'time': '2016-10-01T13:07:01Z', 'locatio[342 chars]07}]}
    ======================================================================
    FAIL: test_get_o3 (tests.unit.airpollutionapi30.test_airpollution_client.TestAirPollutionHttpClient)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/home/travis/build/[secure]/pyowm/tests/unit/airpollutionapi30/test_airpollution_client.py", line 93, in test_get_o3
        self.assertEqual(expected_url, result)
    AssertionError: 'o3/43.75,8.25/current.json' != {'time': '2016-10-06T13:32:53Z', 'locatio[68 chars]0781}
    
    

    The same tests pass locally, with all Python versions

    It looks like mocking is not working properly on Travis CI and this happens only on that Python test module.

    enhancement 
    opened by csparpa 0
  • Strange behaviour during iterative requests

    Strange behaviour during iterative requests

    I have been having trouble with pyowm not returning the most recent weather data when the request is inside a function definition or a list iteration. (I apologise if my terminology here is incorrect). It seems to return the result for a request from the first time that request was made in that specific way. I have refined the code to show the specific bug:

    owm = OWM('removed key') mgr = owm.weather_manager() placesIDs = ['removed list of places']

    wobs = mgr.weather_at_id(placesIDs[0]) wweather = wobs.weather wwind = wweather.wind() print(wobs) print(wweather) print(wwind)

    listOfObservations = mgr.weather_at_ids(placesIDs) weatherList = [obs.weather for obs in listOfObservations] windList = [weather.wind() for weather in weatherList] print(listOfObservations[0]) print(weatherList[0]) print(windList[0])

    The two lumps of code should return the exact same data. However they do not. This is the print out:

    <pyowm.weatherapi25.observation.Observation - reception_time=2022-04-01 17:04:14+00:00> <pyowm.weatherapi25.weather.Weather - reference_time=2022-04-01 17:04:13+00:00, status=clouds, detailed_status=broken clouds> {'speed': 2.84, 'deg': 313, 'gust': 5.77} <pyowm.weatherapi25.observation.Observation - reception_time=2022-04-01 17:04:14+00:00> <pyowm.weatherapi25.weather.Weather - reference_time=2022-04-01 16:09:47+00:00, status=clouds, detailed_status=broken clouds> {'speed': 3.11, 'deg': 328}

    The weather managers are the same but the .weathers are not and the wind data is different. This is not limited to wind but as a bonus I have noticed that the gust information is stripped from the data created through the iterative method.

    This behviour is preserved on Thonny on windows and Raspberry Pi and directly on python3 on Raspberry Pi.

    Hopefully I haven't wasted your time!

    opened by mrneilbutler 3
Releases(3.3.0)
  • 3.3.0(Feb 14, 2022)

    New features

    380 Implemented National Weather Alerts support 376 Now PyOWM uses SQLite instead of files to internally store city data. CityIDRegistry interface has changed but in a retrocompatible way

    Enhancements

    381 Now it is possible to specify how many times to retry an API call

    Bugfixes

    379 Experimental fix for 404 errors on Agromonitor API satellite image search 387 Fixed lat/lon swap bug on Airpollution API 389 Fixed wrong city name in City ID database

    Source code(tar.gz)
    Source code(zip)
  • 3.2.0(Feb 24, 2021)

    • New features

      • Support for new AirPollution API encompassing current, historical and forecast air pollution indicators and air quality index
      • Support for new Geocoding API
      • Python 3.9 supported
      • New matching method for CityIDRegistry: startswith
    • Enhancements

      • added probability of precipitation in OneCall API responses
    • Bugfixes

      • fixed many typos in the documentation (code recipes)
    • Security

      • Automatic fixes nailed by Dependabot
    • Deprecations introduced

      • will be removed in version 4.0.0:
        • AirPollutionManager.coindex_around_coords
        • AirPollutionManager.ozone_around_coords
        • AirPollutionManager.no2index_around_coords
        • AirPollutionManager.so2index_around_coords
    Source code(tar.gz)
    Source code(zip)
  • 3.1.1bis(Oct 2, 2020)

  • 3.1.0(Oct 1, 2020)

    New features:

    • Support for OneCall minutely forecast data

    Enhancements:

    • OneCall calls now support units and exclude parameters
    • queries to weather objects now support new visibility distance (miles) and barometric pressure (InHG) units
    • now it is possible to obtain weather icons in 2 sizes (2x, 4x)
    • all PyOWM timestamps are now timezone-aware
    • now PyOWM exposes a list of OWM supported languages (pyowm.constants.LANGUAGES)
    • added an FAQ page to the documentation

    Bugfixes:

    • tons on the documentation
    • removed dependency version pinning on PySocks
    • patched wrong subdomains for paid API calls
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(May 30, 2020)

    This is a major release.

    This means that no retrocompatibility is offered, as many high-level PyOWM interface functions have been modified or removed: this might result in your client code breaking.

    But fear not! Patching your code is very likely a breeze: please verify the "migration guide" in the documentation about how to patch.

    New and modified features

    Platforms Support

    • dropped legacy support for Python2 and support for Python 3.4 - only supports Python 3.7+ now
    • dropped support for Docker (no more Dockerfiles and Docker images)

    Enhancements

    Bugfixes

    Internals

    • gave the weatherapi module exactly the same dignity as other api modules...
    • PollutionAPI and UVIndexAPI: both will feature a Manager object, which will be instantiated by the new OWM entry point
    • made Exceptions hierarchy more consistent

    Security

    • Now using SSL as the default option for all API calls
    • HTTP calls timeout is increased to 5 seconds (to allow download of satellite images)
    • finalized deprecations foreseen for v3
    Source code(tar.gz)
    Source code(zip)
  • 2.10(Dec 21, 2018)

    Notably, introducing support for Agro API free features!

    • New features:

    • Enhancements:

      • Refactored Weather API code to a dedicated package
      • Implemented an automated integration and release pipeline
    • Bugfixes:

      • fixed wrong object to JSON dumping when calling send_measurements() on Stations API
      • relaxing hard upper limit on dependency geojson: from geojson>=2.3.0,<2.4 to geojson>=2.3.0,<3
    • Security:

      • upgraded version for dependencies requests and urllib3 as known security issues were raised on them
    • Python Versions Support:

      • dropped Python 3.3 support as it has reached end of life
    Source code(tar.gz)
    Source code(zip)
  • freeze-2.9-LTS(Jan 19, 2020)

  • 2.9.0(Jul 28, 2018)

    Python 2.7 is now officially deprecated

    Bugfixing support for it will be granted on the dedicated v2.9-LTS branch that will be killed off on Jan 1st, 2020

    Please check out the drop timeline for details.

    • New features:

    • Enhancements:

      • Heavily improved readthedocs documentation
      • Now PyOWM talks to OWM APIs over SSL
      • Refactored out one single consistent HTTP base client, based on requests
      • Refactored UV API and Air Pollution API code to dedicated packages
    • Bugfixes:

      • issue on requests==2.19.1 incompatibility
      • now printing on console the detailed weather status (language-sensitive) instead of generic english-based weather status
      • fixed broken links in a few Markdown docs
    • Deprecations introduced:

      • will be removed on 3.0.0: OWM25.weather_at_stations_in_bbox, OWM25.weather_at_station
    Source code(tar.gz)
    Source code(zip)
  • 2.8.0(Dec 23, 2017)

    • New features:

      • introduced support for Stations API 3.0
      • new methods for Forecaster class: will_have_clear, when_clear, will_be_clear_at
      • new light Docker images based on Alpine Linux
    • Enhancements:

      • In the moment Forecast objects are created, their Weather objects having reference timestamps prior to that moment are discarded (this means: you only get real forecasts!)
      • Introduced requests as only PyOWM dependency: requests>=2.18.2,<2.19
    • Bugfixes:

      • issue on city_id_registry read behaviour on Windows
      • issue on parsing Location objects
    • Deprecations introduced:

      • will be removed on 3.0.0: forecaster.Forecaster.will_have_sun, forecaster.Forecaster.when_sun and forecaster.Forecaster.will_be_sunny_at
    Source code(tar.gz)
    Source code(zip)
  • 2.7.1(Jun 30, 2017)

  • 2.7.0(Jun 30, 2017)

    • New features:

      • introduced support for Sulphur Dioxide (SO2) and Nitric Dioxide (NO2): new methods owm25.no2index_around_coords and owm25.so2index_around_coords
      • implemented wind speed units specification (imperial/metric)
    • Bugfixes:

      • updated weather history endpoint (was broken)
      • fix bug about data parsing at station_at_coords and weather_at_station methods
      • now the deg attribute is correctly parsed from 16 day forecast weather data items
      • fix bug on printing Unicode upon library exceptions
      • fix handling of Weather objects parsing (it was failing whenever some data wasn't provided by OWM)
    • Enhancements:

      • shrinked city ID files size by 60% (via compression)
      • reported in the Wiki a list of known projects that use PyOWM
      • integrated the Say Thanks! hook
      • introduced CONTRIBUTING.md and CODE_OF_CONDUCT.md files, thus welcoming GitHub's suggested best practices for building better open source communities
      • introduced installation tests
      • improved integrations tests organization and running
    • Breaking changes:

      • OWM decided to change the syntax of API endpoint for fetching UV data and its format in a non-retrocompatible manner. This results into UVIndex object entity fields changing, as well as the corresponding OWM25 method signature (owm25.uvindex_around_coords).
    Source code(tar.gz)
    Source code(zip)
  • 2.6.1(Jan 31, 2017)

  • 2.6.0(Dec 21, 2016)

    • New features:
      • new method owm25.weather_at_zip_code
      • new methods CityIDRegistry.ids_for and CityIDRegistry.locations_for
      • introduced deprecation decorators to mark methods that will be removed/modified in future versions
      • Python 3.6 support
    • Bugfixes:
    • Enhancements:
      • reorganized project Wiki
      • embedded PyOWM usage examples as markdown file into the distribution package
    • Deprecations introduced:
      • will be removed on 3.0.0: webapi25.cityidregistry.id_for and webapi25.cityidregistry.location_for
      • will be modified on 3.0.0: webapi25.owm25.get_version and webapi25.owm25.get_API_version
    Source code(tar.gz)
    Source code(zip)
  • 2.5.0(Oct 10, 2016)

    • New features:
      • Air Pollution data API endpoints: OWM25.coindex_around_coords, OWM25.ozone_around_coords
      • UV data endpoint: OWM25.uvindex_around_coords
    • Bugfixes:
      • fixed OWM25.is_API_online method (was not working)
      • more robust support for querying data on Unicode place names
      • Enhancements: now datetime objects across all library are timezone-aware
      • PyOWM Slack team is live!
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Aug 29, 2016)

    • New features:
      • weather_at_ids
      • weather_history_at_coords
      • introduced support for Python 3.4 and 3.5
    • Bugfixes: full support for Unicode place names
    • Enhancements:
      • datetime representation of reception/reference times in Weather, Forecast, History objects
      • better exception hierarchy
    • Updated city ID registry files
    Source code(tar.gz)
    Source code(zip)
  • 2.3.2(Jul 6, 2016)

  • 2.3.1(Mar 18, 2016)

  • 2.3.0(Jan 2, 2016)

    • New feature: can now specify whether to use the pro OWM API version or not:
        owm = OWM(subscription_type='pro', API_key='my-pro-api-key')
    
    • Better support for Python 3 on CityIDRegistry
    • Bug fixes on parsing of humidity, wind and visibility
    Source code(tar.gz)
    Source code(zip)
  • 2.2.1(Jun 5, 2015)

  • 2.2(Feb 11, 2015)

    • New entity Station: represents a meteostation recording weather data
    • New feature: search for meteostations around a lat/lon couple
    • New feature: retrieve weather currently measured by a meteostation
    • New feature: retrieve weathers currently measured by meteostations within a bounding box
    • Can now query for weather forecasts based on geographical coordinates
    • Can now query for weather forecasts based on city ID
    • Support querying of extreme weather conditions in Forecaster convenience methods
    • Enriched Weather class with methods to support data fields retrieved from meteostations
    • Now supporting Unicode strings as parameters for all PyOWM public methods
    • Increased test coverage
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Aug 28, 2014)

    • Renaming of some functions in PyOWM public interface (breaking change!)
    • Multilingual support for weather data descriptions
    • Can now retrieve current weather from city IDs
    • Can now retrieve weather history from city IDs
    • Can now do toponyms to city IDs conversions using a registry
    • Added more human-friendly utilities in Historian and timeutils modules
    • Now checking code coverage via coveralls.io
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Mar 13, 2014)

    Changelog versus release 1.0.0

    • Ported to Python 3 while maintaining Python 2.7+ compatibility
    • Officialy stated Python 2.6 lack of support (please update to 2.7)
    • Added CONTRIBUTORS.md file for credits
    • Extended Travis-CI builders to test the codebase out against Python 3.2 and 3.3 versions
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Feb 28, 2014)

    Changelog versus 0.4.1 release:

    • Users can inject configuration when instantiating the library
    • Code is now compliant to PEP-8 guidelines
    • Added XMLNS support to printed XML
    • Refactoring of low-level utility functions
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Dec 10, 2013)

Owner
Claudio Sparpaglione
Software Architect on his road to perfection. Pythonista, lover of green, just enough geek :)
Claudio Sparpaglione
Send OpenWeatherMap alerts (One Call API) to telegram users.

OpenWeatherMap Telegram Alert Send OpenWeatherMap alerts (One Call API) to telegram users. Installation Requirements: $ apt install python3-yaml pytho

Michael Hacker 1 Jun 4, 2022
Python API wrapper around Trello's API

A wrapper around the Trello API written in Python. Each Trello object is represented by a corresponding Python object. The attributes of these objects

Richard Kolkovich 904 Jan 2, 2023
An API wrapper around the pythonanywhere's API.

pyaww An API wrapper around the pythonanywhere's API. The name stands for pythonanywherewrapper. 100% api coverage most of the codebase is documented

null 7 Dec 11, 2022
An API wrapper around Discord API.

NeoCord This project is work in progress not for production use. An asynchronous API wrapper around Discord API written in Python. Features Modern API

Izhar Ahmad 14 Jan 3, 2022
An API wrapper around the pythonanywhere's API.

pyaww An API wrapper around the pythonanywhere's API. The name stands for pythonanywherewrapper. 100% API coverage Most of the codebase is documented

null 7 Dec 11, 2022
A Python wrapper around the Soundcloud API

soundcloud-python A friendly wrapper around the Soundcloud API. Installation To install soundcloud-python, simply: pip install soundcloud Or if you'r

SoundCloud 83 Dec 12, 2022
A Python wrapper around the Twitter API.

Python Twitter A Python wrapper around the Twitter API. By the Python-Twitter Developers Introduction This library provides a pure Python interface fo

Mike Taylor 3.4k Jan 1, 2023
A Python wrapper around the Twitter API.

Python Twitter A Python wrapper around the Twitter API. By the Python-Twitter Developers Introduction This library provides a pure Python interface fo

Mike Taylor 3.4k Jan 1, 2023
An asyncio Python wrapper around the Discord API, forked off of Rapptz's Discord.py.

Novus A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. A full fork of Rapptz's Discord.py library, with

Voxel Fox 60 Jan 3, 2023
An async-ready Python wrapper around FerrisChat's API.

FerrisWheel An async-ready Python wrapper around FerrisChat's API. Installation Instructions Linux: $ python3.9 -m pip install -U ferriswheel Python 3

FerrisChat 8 Feb 8, 2022
A Python wrapper around the Pushbullet API to send different types of push notifications to your phone or/and computer.

pushbullet-python A Python wrapper around the Pushbullet API to send different types of push notifications to your phone or/and computer. Installation

Janu Lingeswaran 1 Jan 14, 2022
A light wrapper around FedEx's SOAP API.

Python FedEx SOAP API Module Author: Greg Taylor, Radek Wojcik Maintainer: Python FedEx Developers License: BSD Status: Stable What is it? A light wra

null 155 Dec 16, 2022
Wrapper around the Mega API

python-mega Overview Wrapper around the Mega API. Based on the work of Julien Marchand. Installation Install using pip, including any optional package

Juan Riaza 104 Nov 26, 2022
Wrapper around the latest Tuenti API

python-tuenti Overview Wrapper around the latest Tuenti API. Installation Install using pip, including any optional packages you want... $ pip install

Juan Riaza 10 Mar 7, 2022
Wrapper around the UPS API for creating shipping labels and fetching a package's tracking status.

ClassicUPS: A Useful UPS Library ClassicUPS is an Apache2 Licensed wrapper around the UPS API for creating shipping labels and fetching a package's tr

Jay Goel 55 Dec 12, 2022
🚀 An asynchronous python API wrapper meant to replace discord.py - Snappy discord api wrapper written with aiohttp & websockets

Pincer An asynchronous python API wrapper meant to replace discord.py ❗ The package is currently within the planning phase ?? Links |Join the discord

Pincer 125 Dec 26, 2022
RichWatch is wrapper around AWS Cloud Watch to display beautiful logs with help of Python library Rich.

RichWatch is TUI (Textual User Interface) for AWS Cloud Watch. It formats and pretty prints Cloud Watch's logs so they are much more readable. Because

null 21 Jul 25, 2022
Aws-lambda-requests-wrapper - Request/Response wrapper for AWS Lambda with API Gateway

AWS Lambda Requests Wrapper Request/Response wrapper for AWS Lambda with API Gat

null 1 May 20, 2022
Python wrapper for Interactive Brokers Client Portal Web API

EasyIB: Unofficial Wrapper for Interactive Brokers API EasyIB is an unofficial python wrapper for Interactive Brokers Client Portal Web API. Features

null 39 Dec 13, 2022