vemcogroup/laravel-weather

Weather package for Laravel to use different providers to get weather info

3.0.2 2024-01-15 08:53 UTC

This package is auto-updated.

Last update: 2024-04-13 14:34:43 UTC


README

Latest Version on Packagist Total Downloads tests

Description

This package allows you to fetch weather data from different weather providers

Installation

You can install the package via composer:

composer require vemcogroup/laravel-weather

The package will automatically register its service provider.

To publish the config file to config/weather.php run:

php artisan vendor:publish --provider="Vemcogroup\Weather\WeatherServiceProvider"

The default configuration can be seen here

Usage

At the moment this package support the following weather services, you can update WEATHER_PROVIDER to one of the following

Service Provider name Website Geocoding Remarks
Dark Sky darksky https://darksky.net Manual Deprecated, not able to acquire api key https://blog.darksky.net. Will continue to function until March 31st, 2023.
Weatherstack weatherstack https://weatherstack.com Auto For historical data a minimum Standard license is required. For forecast data a minimum Professional license is required.
WeatherKit weatherkit https://developer.apple.com/weatherkit/ Auto Needs an apple developer account.

For other weather services fill free to create an issue or make a Pull Request.

For Manual geocoding you need a Google geocode api key.
Acquire it here https://developers.google.com/maps/documentation/geocoding/start and insert it into your .env file.

GOOGLE_MAPS_GEOCODING_API_KEY= 

Request

Start by setting up your request

$request = (new Vemcogroup\Weather\Request('1 Infinite Loop, Cupertino, CA 95014, USA'));

By default, it caches the weather response for 24hrs (86.400sec), this can be changed by setting a second parameter to cache timeout (in seconds)

$request = (new Vemcogroup\Weather\Request('1 Infinite Loop, Cupertino, CA 95014, USA', 600));

Units
There two available unit types, default is Metric:

Metric (m): Vemcogroup\Weather\Providers\Provider::WEATHER_UNITS_METRIC
Fahrenheit (f): Vemcogroup\Weather\Providers\Provider::WEATHER_UNITS_FAHRENHEIT

To change the response units you can do the following:

$request->withUnits(Vemcogroup\Weather\Providers\Provider::WEATHER_UNITS_FAHRENHEIT);

Locale
To change the locale for descriptions, summaries and other texts in the response, do the following:

$request->withLocale('nl');

Locale need to be an 2-letter ISO Code of your preferred language.

Dates If you need to select the dates to get weather data for E.g for historical data, set the dates like this:

$request->withDates([$date, ...]);

All dates in the array need to Carbon objects.

Options
If you need to set any extra options based in your selected weather provider you can do the following:

$request->withOption('name', 'value');

Current weather and forecast

To get current weather and forecast response you can do this:

$weather = weather()->getForecast($request);

Weather response will always be a Collection of responses.
Forecast days depends on weather service provider.

To get current weather data:

$weather->first()->getCurrently(); // DataPoint

To get forecast you can take first element of response and get the forecast like this:

$weather->first()->getDaily()->getData(); // array

Afterward run through the array with represent each day of the forecast on a DataPoint object.

Historical

To get historical data you can do this:

$weather = weather()->getHistorical($request);

Remember to set dates on request.
Response will be a collection with keys representing the dates for historical data.

Response

To see what response data is available look into source code /src/Objects