{"id":30133779,"url":"https://github.com/maif/meteole","last_synced_at":"2025-08-10T20:11:59.831Z","repository":{"id":271887174,"uuid":"897345712","full_name":"MAIF/meteole","owner":"MAIF","description":"A Python client library for weather forecast APIs (e.g., Météo-France)","archived":false,"fork":false,"pushed_at":"2025-06-05T12:25:41.000Z","size":836,"stargazers_count":42,"open_issues_count":6,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-07-13T06:30:24.554Z","etag":null,"topics":["api-client","maif","meteo-france","package","python","weather-api","weather-forecast"],"latest_commit_sha":null,"homepage":"https://maif.github.io/meteole/home/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MAIF.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-02T13:25:40.000Z","updated_at":"2025-06-26T13:41:45.000Z","dependencies_parsed_at":"2025-01-10T15:22:16.062Z","dependency_job_id":"e173113e-fe03-43ed-b059-475ac40c4603","html_url":"https://github.com/MAIF/meteole","commit_stats":null,"previous_names":["maif/meteole"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/MAIF/meteole","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fmeteole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fmeteole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fmeteole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fmeteole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MAIF","download_url":"https://codeload.github.com/MAIF/meteole/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MAIF%2Fmeteole/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269780617,"owners_count":24474686,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-client","maif","meteo-france","package","python","weather-api","weather-forecast"],"created_at":"2025-08-10T20:11:57.475Z","updated_at":"2025-08-10T20:11:59.793Z","avatar_url":"https://github.com/MAIF.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://maif.github.io/meteole\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/MAIF/meteole/main/docs/pages/assets/img/svg/meteole-fond-clair.svg\" alt=\"meteole\" width=\"50%\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eEasy access to Météo-France weather models and data\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/MAIF/meteole/actions/workflows/ci-cd.yml/badge.svg?branch=main\" alt=\"CI\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/coverage-89%25-dark_green\" alt=\"Coverage\"\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/v/meteole\" alt=\"Versions\"\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/pyversions/meteole\" alt=\"Python\"\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/dm/meteole\" alt=\"Downloads\"\u003e\n\u003c/p\u003e\n\n---\n\n**Documentation:** [https://maif.github.io/meteole/home/](https://maif.github.io/meteole/home/)\n\n**Repository:** [https://github.com/MAIF/meteole](https://github.com/MAIF/meteole)\n\n**Release article:** [Medium](https://medium.com/oss-by-maif/meteole-simplifier-lacc%C3%A8s-aux-donn%C3%A9es-m%C3%A9t%C3%A9o-afeec5e5d395)\n\n---\n\n## Overview\n\n**Meteole** is a Python library designed to simplify accessing weather data from the Météo-France APIs. It provides:\n\n- **Automated token management**: Simplify authentication with a single `application_id`.\n- **Unified model usage**: AROME, AROME INSTANTANE, ARPEGE, PIAF forecasts with a consistent interface.\n- **User-friendly parameter handling**: Intuitive management of key weather forecasting parameters.\n- **Seamless data integration**: Directly export forecasts as Pandas DataFrames\n- **Vigilance bulletins**: Retrieve real-time weather warnings across France.\n\nPerfect for data scientists, meteorologists, and developers, Meteole helps integrate weather forecasts into projects effortlessly.\n\n### Installation\n\n```python\npip install meteole\n```\n\n## 🕐 Quickstart\n\n### Step 1: Obtain an API token or key\n\nCreate an account on [the Météo-France API portal](https://portail-api.meteofrance.fr/). Next, subscribe to the desired APIs (Arome, Arpege, Arome Instantané, etc.). Retrieve the API token (or key) by going to “Mes APIs” and then “Générer token”.\n\n### Step 2: Fetch Forecasts\n\nMeteole allows you to retrieve forecasts for a wide range of weather indicators. Here's how to get started:\n\n| Characteristics  | AROME                | ARPEGE                      | AROME INSTANTANE               | PIAF               |\n|------------------|----------------------|-----------------------------| -------------------------------| -------------------------------|\n| Resolution       | 1.3 km               | 10 km                       | 1.3 km                         | 1.3 km                         |\n| Update Frequency | Every 3 hours        | Every 6 hours               | Every 1 hour                   | Every 10 minutes |\n| Forecast Range   | Every hour, up to 51 hours | Every hour, up to 114 hours | Every 15 minutes, up to 360 minutes | Every 5 minutes, up to 195 minutes |\n\n*note : the date of the run cannot be more than 4 days in the past. Consequently, change the date of the run in the example below.*\n\n```python\nimport datetime as dt \nfrom meteole import AromeForecast\n\n# Configure the logger to provide information on data recovery: recovery status, default settings, etc.\nimport logging\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(\"meteole\")\n\n# Initialize the AROME forecast client\n# Find your APPLICATION_ID by following these guidelines: https://maif.github.io/meteole/how_to/?h=application_id#get-a-token-an-api-key-or-an-application-id\narome_client = AromeForecast(application_id=APPLICATION_ID)\n\n# Check indicators available\nprint(arome_client.INDICATORS)\n\n# Fetch weather data\ndf_arome = arome_client.get_coverage(\n    indicator=\"V_COMPONENT_OF_WIND_GUST__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND\",  # Optional: if not, you have to fill coverage_id\n    run=\"2025-01-10T00.00.00Z\",                                                # Optional: forecast start time\n    forecast_horizons=[                                                       # Optional: prediction times (in hours)\n      dt.timedelta(hours=1),\n      dt.timedelta(hours=2),\n    ],  \n    heights=[10],                                                              # Optional: height above ground level\n    pressures=None,                                                            # Optional: pressure level\n    long = (-5.1413, 9.5602),                                                  # Optional: longitude\n    lat = (41.33356, 51.0889),                                                 # Optional: latitude\n    coverage_id=None,                                                          # Optional: an alternative to indicator/run/interval\n    temp_dir=None,                                                             # Optional: Directory to store the temporary file\n)\n```\nNote: The coverage_id can be used instead of indicator, run, and interval.\n\nThe usage of ARPEGE, AROME INSTANTANE, PIAF is identical to AROME, except that you initialize the appropriate class\n\n### Step 3: Explore Parameters and Indicators\n#### Discover Available Indicators\nUse the `get_capabilities()` method to list all available indicators, run times, and intervals:\n\n```\nindicators = arome_client.get_capabilities()\nprint(indicators)\n```\n\n#### Fetch Description for a Specific Indicator\nUnderstand the required parameters (`forecast_horizons`, `heights`, `pressures`)  for any indicator using `get_coverage_description()`:\n\n```\ndescription = arome_client.get_coverage_description(coverage_id)\nprint(description)\n```\n\n#### Geographical Coverage\nThe geographical coverage of forecasts can be customized using the lat and long parameters in the get_coverage method. By default, Meteole retrieves data for the entire metropolitan France.\n\n#### Fetch Forecasts for Multiple Indicators\nThe `get_combined_coverage` method allows you to retrieve weather data for multiple indicators at the same time, streamlining the process of gathering forecasts for different parameters (e.g., temperature, wind speed, etc.). For detailed guidance on using this feature, refer to this [tutorial](./tutorial/Fetch_forecast_for_multiple_indicators.ipynb).\n\nExplore detailed examples in the [tutorials folder](./tutorial) to quickly get started with Meteole.\n\n### ⚠️ VIGILANCE METEO FRANCE\nMeteo France provides nationwide vigilance bulletins, highlighting potential weather risks. These tools allow you to integrate weather warnings into your workflows, helping trigger targeted actions or models.\n\n```python\nfrom meteole import Vigilance\n\nvigi = Vigilance(application_id=APPLICATION_ID)\n\ndf_phenomenon, df_timelaps = vigi.get_phenomenon()\n\nbulletin = vigi.get_bulletin()\n\nvigi.get_vignette()\n```\n\n\u003cimg src=\"docs/pages/assets/img/png/vignette_exemple.png\" width=\"600\" height=\"300\" alt=\"vignette de vigilance\"\u003e\n\nTo have more documentation from Meteo-France in Vigilance Bulletin :\n- [Meteo France Documentation](https://donneespubliques.meteofrance.fr/?fond=produit\u0026id_produit=305\u0026id_rubrique=50)\n\n## Contributing\n\nContributions are *very* welcome!\n\nIf you see an issue that you'd like to see fixed, the best way to make it happen is to help out by submitting a pull request implementing it.\n\nRefer to the [CONTRIBUTING.md](./CONTRIBUTING.md) file for more details about the workflow,\nand general hints on how to prepare your pull request. You can also ask for clarifications or guidance in GitHub issues directly.\n\n## License\n\nThis project is Open Source and available under the Apache 2 License.\n\n## 🙏 Acknowledgements\nThe development of Meteole was inspired by the excellent work in the [meteofranceapi](https://github.com/antoinetavant/meteofranceapi) repository by Antoine Tavant.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaif%2Fmeteole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaif%2Fmeteole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaif%2Fmeteole/lists"}