openmeteo-requests


Nameopenmeteo-requests JSON
Version 1.7.2 PyPI version JSON
download
home_pageNone
SummaryOpen-Meteo Python Library
upload_time2025-08-28 09:53:44
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords client meteo open python weather
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Open-Meteo API Python Client

This API client provides access to weather data from [Open-Meteo Weather API](https://open-meteo.com) based on the Python library `niquests` and compatible with the `requests` library.

A key feature is its use of FlatBuffers instead of JSON for data transfer. FlatBuffers are particularly efficient when dealing with large volumes of time-series data. The library supports [Zero-Copy](https://en.wikipedia.org/wiki/Zero-copy) data transfer, allowing you to seamlessly analyze data directly within `numpy`, `pandas`, or `polars` without performance overhead. Schema definitions are available on [GitHub open-meteo/sdk](https://github.com/open-meteo/sdk).

This library is aimed at data scientists who need to quickly process and analyze weather data, including historical data from 1940 onward through the [Open-Meteo Historical Weather API](https://open-meteo.com/en/docs/historical-weather-api).

## Basic Usage

The following example gets an hourly forecast (temperature, wind speed, and precipitation) for Berlin, and also retrieves the current temperature and humidity. To improve efficiency, request only the necessary variables.

```python
# pip install openmeteo-requests

import openmeteo_requests

openmeteo = openmeteo_requests.Client()

# Make sure all required weather variables are listed here
# The order of variables in hourly or daily is important to assign them correctly below
url = "https://api.open-meteo.com/v1/forecast"
params = {
	"latitude": 52.52,
	"longitude": 13.41,
	"hourly": ["temperature_2m", "precipitation", "wind_speed_10m"],
	"current": ["temperature_2m", "relative_humidity_2m"],
}
responses = openmeteo.weather_api(url, params=params)

# Process first location. Add a for-loop for multiple locations or weather models
response = responses[0]
print(f"Coordinates: {response.Latitude()}°N {response.Longitude()}°E")
print(f"Elevation: {response.Elevation()} m asl")
print(f"Timezone difference to GMT+0: {response.UtcOffsetSeconds()}s")

# Process current data. The order of variables needs to be the same as requested.
current = response.Current()
current_temperature_2m = current.Variables(0).Value()
current_relative_humidity_2m = current.Variables(1).Value()

print(f"Current time: {current.Time()}")
print(f"Current temperature_2m: {current_temperature_2m}")
print(f"Current relative_humidity_2m: {current_relative_humidity_2m}")
```

or the same but using async/wait:

```python
# pip install openmeteo-requests

import openmeteo_requests

import asyncio

async def main():
	openmeteo = openmeteo_requests.AsyncClient()

	# Make sure all required weather variables are listed here
	# The order of variables in hourly or daily is important to assign them correctly below
	url = "https://api.open-meteo.com/v1/forecast"
	params = {
		"latitude": 52.52,
		"longitude": 13.41,
		"hourly": ["temperature_2m", "precipitation", "wind_speed_10m"],
		"current": ["temperature_2m", "relative_humidity_2m"],
	}
	responses = await openmeteo.weather_api(url, params=params)

	# Process first location. Add a for-loop for multiple locations or weather models
	response = responses[0]
	print(f"Coordinates: {response.Latitude()}°N {response.Longitude()}°E")
	print(f"Elevation: {response.Elevation()} m asl")
	print(f"Timezone difference to GMT+0: {response.UtcOffsetSeconds()}s")

	# Process current data. The order of variables needs to be the same as requested.
	current = response.Current()
	current_temperature_2m = current.Variables(0).Value()
	current_relative_humidity_2m = current.Variables(1).Value()

	print(f"Current time: {current.Time()}")
	print(f"Current temperature_2m: {current_temperature_2m}")
	print(f"Current relative_humidity_2m: {current_relative_humidity_2m}")

asyncio.run(main())
```

Note 1: To retrieve data for multiple locations, you can provide a list of latitude and longitude coordinates. The API will return an array of results, one for each location. In the examples, we only demonstrate processing data from the first location `response = responses[0]` for brevity. See [multiple locations & models](#multiple-locations--models) for more information.

Note 2: Due to the FlatBuffers data format, accessing each attribute, like `Latitude`, requires a function call (e.g., `Latitude()`). This approach allows for efficient data access without the need for expensive parsing.

### NumPy

When using `NumPy`, hourly or daily data is readily available as a `NumPy` array of floats.

```python
import numpy as np
from openmeteo_sdk.Variable import Variable

hourly = response.Hourly()
hourly_time = range(hourly.Time(), hourly.TimeEnd(), hourly.Interval())
hourly_variables = list(map(lambda i: hourly.Variables(i), range(0, hourly.VariablesLength())))

hourly_temperature_2m = next(
    filter(
        lambda x: x.Variable() == Variable.temperature and x.Altitude() == 2,
        hourly_variables
    )
).ValuesAsNumpy()
hourly_precipitation = next(
    filter(
        lambda x: x.Variable() == Variable.precipitation,
        hourly_variables
    )
).ValuesAsNumpy()
hourly_wind_speed_10m = next(
    filter(
        lambda x: x.Variable() == Variable.wind_speed and x.Altitude() == 10,
        hourly_variables
    )
).ValuesAsNumpy()
```

### Pandas

After using `NumPy` to create arrays for hourly data, you can use `Pandas` to create a DataFrame from hourly data like follows:

```python
import pandas as pd

hourly_data = {"date": pd.date_range(
    start = pd.to_datetime(hourly.Time(), unit = "s"),
    end = pd.to_datetime(hourly.TimeEnd(), unit = "s"),
    freq = pd.Timedelta(seconds = hourly.Interval()),
    inclusive = "left"
)}
hourly_data["temperature_2m"] = hourly_temperature_2m
hourly_data["precipitation"] = hourly_precipitation
hourly_data["wind_speed_10m"] = hourly_wind_speed_10m

hourly_dataframe_pd = pd.DataFrame(data = hourly_data)
print(hourly_dataframe_pd)
#                    date  temperature_2m  precipitation  wind_speed_10m
# 0   2024-06-21 00:00:00       17.437000            0.0        6.569383
# 1   2024-06-21 01:00:00       17.087000            0.0        6.151683
# 2   2024-06-21 02:00:00       16.786999            0.0        7.421590
# 3   2024-06-21 03:00:00       16.337000            0.0        5.154416
```

### Polars

Additionally, `Polars` can also be used to create a DataFrame from hourly data using the `NumPy` arrays created previously:

```python
import polars as pl
from datetime import datetime, timedelta, timezone

start = datetime.fromtimestamp(hourly.Time(), timezone.utc)
end = datetime.fromtimestamp(hourly.TimeEnd(), timezone.utc)
freq = timedelta(seconds = hourly.Interval())

hourly_dataframe_pl = pl.select(
    date = pl.datetime_range(start, end, freq, closed = "left"),
    temperature_2m = hourly_temperature_2m,
    precipitation = hourly_precipitation,
    wind_speed_10m = hourly_wind_speed_10m
)
print(hourly_dataframe_pl)
# ┌─────────────────────────┬────────────────┬───────────────┬────────────────┐
# │ date                    ┆ temperature_2m ┆ precipitation ┆ wind_speed_10m │
# │ ---                     ┆ ---            ┆ ---           ┆ ---            │
# │ datetime[μs, UTC]       ┆ f32            ┆ f32           ┆ f32            │
# ╞═════════════════════════╪════════════════╪═══════════════╪════════════════╡
# │ 2024-06-21 00:00:00 UTC ┆ 17.437         ┆ 0.0           ┆ 6.569383       │
# │ 2024-06-21 01:00:00 UTC ┆ 17.087         ┆ 0.0           ┆ 6.151683       │
# │ 2024-06-21 02:00:00 UTC ┆ 16.786999      ┆ 0.0           ┆ 7.42159        │
# │ 2024-06-21 03:00:00 UTC ┆ 16.337         ┆ 0.0           ┆ 5.154416       │
```

### Caching Data

For improved development speed and efficiency when working with large datasets, consider using caching. You can integrate the `requests-cache` library by passing a cached session to the Open-Meteo API client.

A recommended configuration is to cache data for one hour (`expire_after=3600`), though indefinite caching (`expire_after=-1`) is also supported. Cached data is stored in a local SQLite database named `.cache.sqlite`. For more detailed configuration options, please refer to the [requests-cache documentation](https://pypi.org/project/requests-cache/).

To further enhance reliability, especially when dealing with network instability, the `retry-requests` library automatically retries failed API calls due to unexpected network or server errors.

```python
# pip install openmeteo-requests
# pip install requests-cache retry-requests

import openmeteo_requests
import requests_cache
from retry_requests import retry

# Setup the Open-Meteo API client with a cache and retry mechanism
cache_session = requests_cache.CachedSession('.cache', expire_after=3600)
retry_session = retry(cache_session, retries=5, backoff_factor=0.2)
openmeteo = openmeteo_requests.Client(session=retry_session)

# Using the client object `openmeteo` will now cache all weather data
```

### Multiple Locations / Models

If you are requesting data for multiple locations or models, you’ll receive an array of results. To access all of the data, replace `response = responses[0]` with a loop that iterates through the responses array, allowing you to process each location or model’s data.

```python
...

params = {
	"latitude": [52.52, 50.1155],
	"longitude": [13.41, 8.6842],
	"hourly": "temperature_2m",
	"models": ["icon_global", "icon_eu"],
}

...

# Process 2 locations and 2 models
for response in responses:
	print(f"\nCoordinates: {response.Latitude()}°N {response.Longitude()}°E")
	print(f"Elevation: {response.Elevation()} m asl")
	print(f"Timezone difference to GMT+0: {response.UtcOffsetSeconds()}s")
	print(f"Model Nº: {response.Model()}")

	...
```

## TODO

- Document FlatBuffers data structure
- Document time start/end/interval
- Document timezones behavior
- Document pressure level and upper level
- Document endpoints for air quality, etc
- Consider dedicated pandas library to convert responses quickly

## License

MIT

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "openmeteo-requests",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "client, meteo, open, python, weather",
    "author": null,
    "author_email": "Patrick Zippenfenig <info@open-meteo.com>",
    "download_url": "https://files.pythonhosted.org/packages/11/c2/a9658d3fefedcc056568eca35d95a5b6dfa722a3bef490fea3b24f01824f/openmeteo_requests-1.7.2.tar.gz",
    "platform": null,
    "description": "# Open-Meteo API Python Client\n\nThis API client provides access to weather data from [Open-Meteo Weather API](https://open-meteo.com) based on the Python library `niquests` and compatible with the `requests` library.\n\nA key feature is its use of FlatBuffers instead of JSON for data transfer. FlatBuffers are particularly efficient when dealing with large volumes of time-series data. The library supports [Zero-Copy](https://en.wikipedia.org/wiki/Zero-copy) data transfer, allowing you to seamlessly analyze data directly within `numpy`, `pandas`, or `polars` without performance overhead. Schema definitions are available on [GitHub open-meteo/sdk](https://github.com/open-meteo/sdk).\n\nThis library is aimed at data scientists who need to quickly process and analyze weather data, including historical data from 1940 onward through the [Open-Meteo Historical Weather API](https://open-meteo.com/en/docs/historical-weather-api).\n\n## Basic Usage\n\nThe following example gets an hourly forecast (temperature, wind speed, and precipitation) for Berlin, and also retrieves the current temperature and humidity. To improve efficiency, request only the necessary variables.\n\n```python\n# pip install openmeteo-requests\n\nimport openmeteo_requests\n\nopenmeteo = openmeteo_requests.Client()\n\n# Make sure all required weather variables are listed here\n# The order of variables in hourly or daily is important to assign them correctly below\nurl = \"https://api.open-meteo.com/v1/forecast\"\nparams = {\n\t\"latitude\": 52.52,\n\t\"longitude\": 13.41,\n\t\"hourly\": [\"temperature_2m\", \"precipitation\", \"wind_speed_10m\"],\n\t\"current\": [\"temperature_2m\", \"relative_humidity_2m\"],\n}\nresponses = openmeteo.weather_api(url, params=params)\n\n# Process first location. Add a for-loop for multiple locations or weather models\nresponse = responses[0]\nprint(f\"Coordinates: {response.Latitude()}\u00b0N {response.Longitude()}\u00b0E\")\nprint(f\"Elevation: {response.Elevation()} m asl\")\nprint(f\"Timezone difference to GMT+0: {response.UtcOffsetSeconds()}s\")\n\n# Process current data. The order of variables needs to be the same as requested.\ncurrent = response.Current()\ncurrent_temperature_2m = current.Variables(0).Value()\ncurrent_relative_humidity_2m = current.Variables(1).Value()\n\nprint(f\"Current time: {current.Time()}\")\nprint(f\"Current temperature_2m: {current_temperature_2m}\")\nprint(f\"Current relative_humidity_2m: {current_relative_humidity_2m}\")\n```\n\nor the same but using async/wait:\n\n```python\n# pip install openmeteo-requests\n\nimport openmeteo_requests\n\nimport asyncio\n\nasync def main():\n\topenmeteo = openmeteo_requests.AsyncClient()\n\n\t# Make sure all required weather variables are listed here\n\t# The order of variables in hourly or daily is important to assign them correctly below\n\turl = \"https://api.open-meteo.com/v1/forecast\"\n\tparams = {\n\t\t\"latitude\": 52.52,\n\t\t\"longitude\": 13.41,\n\t\t\"hourly\": [\"temperature_2m\", \"precipitation\", \"wind_speed_10m\"],\n\t\t\"current\": [\"temperature_2m\", \"relative_humidity_2m\"],\n\t}\n\tresponses = await openmeteo.weather_api(url, params=params)\n\n\t# Process first location. Add a for-loop for multiple locations or weather models\n\tresponse = responses[0]\n\tprint(f\"Coordinates: {response.Latitude()}\u00b0N {response.Longitude()}\u00b0E\")\n\tprint(f\"Elevation: {response.Elevation()} m asl\")\n\tprint(f\"Timezone difference to GMT+0: {response.UtcOffsetSeconds()}s\")\n\n\t# Process current data. The order of variables needs to be the same as requested.\n\tcurrent = response.Current()\n\tcurrent_temperature_2m = current.Variables(0).Value()\n\tcurrent_relative_humidity_2m = current.Variables(1).Value()\n\n\tprint(f\"Current time: {current.Time()}\")\n\tprint(f\"Current temperature_2m: {current_temperature_2m}\")\n\tprint(f\"Current relative_humidity_2m: {current_relative_humidity_2m}\")\n\nasyncio.run(main())\n```\n\nNote 1: To retrieve data for multiple locations, you can provide a list of latitude and longitude coordinates. The API will return an array of results, one for each location. In the examples, we only demonstrate processing data from the first location `response = responses[0]` for brevity. See [multiple locations & models](#multiple-locations--models) for more information.\n\nNote 2: Due to the FlatBuffers data format, accessing each attribute, like `Latitude`, requires a function call (e.g., `Latitude()`). This approach allows for efficient data access without the need for expensive parsing.\n\n### NumPy\n\nWhen using `NumPy`, hourly or daily data is readily available as a `NumPy` array of floats.\n\n```python\nimport numpy as np\nfrom openmeteo_sdk.Variable import Variable\n\nhourly = response.Hourly()\nhourly_time = range(hourly.Time(), hourly.TimeEnd(), hourly.Interval())\nhourly_variables = list(map(lambda i: hourly.Variables(i), range(0, hourly.VariablesLength())))\n\nhourly_temperature_2m = next(\n    filter(\n        lambda x: x.Variable() == Variable.temperature and x.Altitude() == 2,\n        hourly_variables\n    )\n).ValuesAsNumpy()\nhourly_precipitation = next(\n    filter(\n        lambda x: x.Variable() == Variable.precipitation,\n        hourly_variables\n    )\n).ValuesAsNumpy()\nhourly_wind_speed_10m = next(\n    filter(\n        lambda x: x.Variable() == Variable.wind_speed and x.Altitude() == 10,\n        hourly_variables\n    )\n).ValuesAsNumpy()\n```\n\n### Pandas\n\nAfter using `NumPy` to create arrays for hourly data, you can use `Pandas` to create a DataFrame from hourly data like follows:\n\n```python\nimport pandas as pd\n\nhourly_data = {\"date\": pd.date_range(\n    start = pd.to_datetime(hourly.Time(), unit = \"s\"),\n    end = pd.to_datetime(hourly.TimeEnd(), unit = \"s\"),\n    freq = pd.Timedelta(seconds = hourly.Interval()),\n    inclusive = \"left\"\n)}\nhourly_data[\"temperature_2m\"] = hourly_temperature_2m\nhourly_data[\"precipitation\"] = hourly_precipitation\nhourly_data[\"wind_speed_10m\"] = hourly_wind_speed_10m\n\nhourly_dataframe_pd = pd.DataFrame(data = hourly_data)\nprint(hourly_dataframe_pd)\n#                    date  temperature_2m  precipitation  wind_speed_10m\n# 0   2024-06-21 00:00:00       17.437000            0.0        6.569383\n# 1   2024-06-21 01:00:00       17.087000            0.0        6.151683\n# 2   2024-06-21 02:00:00       16.786999            0.0        7.421590\n# 3   2024-06-21 03:00:00       16.337000            0.0        5.154416\n```\n\n### Polars\n\nAdditionally, `Polars` can also be used to create a DataFrame from hourly data using the `NumPy` arrays created previously:\n\n```python\nimport polars as pl\nfrom datetime import datetime, timedelta, timezone\n\nstart = datetime.fromtimestamp(hourly.Time(), timezone.utc)\nend = datetime.fromtimestamp(hourly.TimeEnd(), timezone.utc)\nfreq = timedelta(seconds = hourly.Interval())\n\nhourly_dataframe_pl = pl.select(\n    date = pl.datetime_range(start, end, freq, closed = \"left\"),\n    temperature_2m = hourly_temperature_2m,\n    precipitation = hourly_precipitation,\n    wind_speed_10m = hourly_wind_speed_10m\n)\nprint(hourly_dataframe_pl)\n# \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n# \u2502 date                    \u2506 temperature_2m \u2506 precipitation \u2506 wind_speed_10m \u2502\n# \u2502 ---                     \u2506 ---            \u2506 ---           \u2506 ---            \u2502\n# \u2502 datetime[\u03bcs, UTC]       \u2506 f32            \u2506 f32           \u2506 f32            \u2502\n# \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n# \u2502 2024-06-21 00:00:00 UTC \u2506 17.437         \u2506 0.0           \u2506 6.569383       \u2502\n# \u2502 2024-06-21 01:00:00 UTC \u2506 17.087         \u2506 0.0           \u2506 6.151683       \u2502\n# \u2502 2024-06-21 02:00:00 UTC \u2506 16.786999      \u2506 0.0           \u2506 7.42159        \u2502\n# \u2502 2024-06-21 03:00:00 UTC \u2506 16.337         \u2506 0.0           \u2506 5.154416       \u2502\n```\n\n### Caching Data\n\nFor improved development speed and efficiency when working with large datasets, consider using caching. You can integrate the `requests-cache` library by passing a cached session to the Open-Meteo API client.\n\nA recommended configuration is to cache data for one hour (`expire_after=3600`), though indefinite caching (`expire_after=-1`) is also supported. Cached data is stored in a local SQLite database named `.cache.sqlite`. For more detailed configuration options, please refer to the [requests-cache documentation](https://pypi.org/project/requests-cache/).\n\nTo further enhance reliability, especially when dealing with network instability, the `retry-requests` library automatically retries failed API calls due to unexpected network or server errors.\n\n```python\n# pip install openmeteo-requests\n# pip install requests-cache retry-requests\n\nimport openmeteo_requests\nimport requests_cache\nfrom retry_requests import retry\n\n# Setup the Open-Meteo API client with a cache and retry mechanism\ncache_session = requests_cache.CachedSession('.cache', expire_after=3600)\nretry_session = retry(cache_session, retries=5, backoff_factor=0.2)\nopenmeteo = openmeteo_requests.Client(session=retry_session)\n\n# Using the client object `openmeteo` will now cache all weather data\n```\n\n### Multiple Locations / Models\n\nIf you are requesting data for multiple locations or models, you\u2019ll receive an array of results. To access all of the data, replace `response = responses[0]` with a loop that iterates through the responses array, allowing you to process each location or model\u2019s data.\n\n```python\n...\n\nparams = {\n\t\"latitude\": [52.52, 50.1155],\n\t\"longitude\": [13.41, 8.6842],\n\t\"hourly\": \"temperature_2m\",\n\t\"models\": [\"icon_global\", \"icon_eu\"],\n}\n\n...\n\n# Process 2 locations and 2 models\nfor response in responses:\n\tprint(f\"\\nCoordinates: {response.Latitude()}\u00b0N {response.Longitude()}\u00b0E\")\n\tprint(f\"Elevation: {response.Elevation()} m asl\")\n\tprint(f\"Timezone difference to GMT+0: {response.UtcOffsetSeconds()}s\")\n\tprint(f\"Model N\u00ba: {response.Model()}\")\n\n\t...\n```\n\n## TODO\n\n- Document FlatBuffers data structure\n- Document time start/end/interval\n- Document timezones behavior\n- Document pressure level and upper level\n- Document endpoints for air quality, etc\n- Consider dedicated pandas library to convert responses quickly\n\n## License\n\nMIT\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Open-Meteo Python Library",
    "version": "1.7.2",
    "project_urls": {
        "Documentation": "https://github.com/open-meteo/python-requests/tree/main#readme",
        "Issue Tracker": "https://github.com/open-meteo/python-requests/issues",
        "Repository": "https://github.com/open-meteo/python-requests"
    },
    "split_keywords": [
        "client",
        " meteo",
        " open",
        " python",
        " weather"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "17422f0777de34860a82595b6c4d223c1f2f1c00f338be1a1dd1010d42e7a534",
                "md5": "8403d3ef5e1cb884318efad33a676dd0",
                "sha256": "9673bb48170a26d028f8146b2f86fab3cffeb87dda951bef4779580370f3441c"
            },
            "downloads": -1,
            "filename": "openmeteo_requests-1.7.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8403d3ef5e1cb884318efad33a676dd0",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 6972,
            "upload_time": "2025-08-28T09:53:42",
            "upload_time_iso_8601": "2025-08-28T09:53:42.680009Z",
            "url": "https://files.pythonhosted.org/packages/17/42/2f0777de34860a82595b6c4d223c1f2f1c00f338be1a1dd1010d42e7a534/openmeteo_requests-1.7.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "11c2a9658d3fefedcc056568eca35d95a5b6dfa722a3bef490fea3b24f01824f",
                "md5": "e6a85cf84e6ae8e8abe00bde8ced2f63",
                "sha256": "2b2a26827f44769ca5b11768bbeb60ae2202cd756cebb4f645f0a36f8c331532"
            },
            "downloads": -1,
            "filename": "openmeteo_requests-1.7.2.tar.gz",
            "has_sig": false,
            "md5_digest": "e6a85cf84e6ae8e8abe00bde8ced2f63",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 5263665,
            "upload_time": "2025-08-28T09:53:44",
            "upload_time_iso_8601": "2025-08-28T09:53:44.066000Z",
            "url": "https://files.pythonhosted.org/packages/11/c2/a9658d3fefedcc056568eca35d95a5b6dfa722a3bef490fea3b24f01824f/openmeteo_requests-1.7.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-28 09:53:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "open-meteo",
    "github_project": "python-requests",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "openmeteo-requests"
}
        
Elapsed time: 4.94273s