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

2.0.5 2022-02-03 07:32 UTC

This package is auto-updated.

Last update: 2022-10-01 00:16:43 UTC


Latest Version on Packagist Total Downloads tests


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


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"

This is the default contents of the configuration:

return [

    | API Key
    | Here you define your API Key for weather provider.

    'api_key' => env('WEATHER_API_KEY'),

    | Weather provider
    | Here you define provider you want to get weather information from.

    'provider' => env('WEATHER_PROVIDER'),
    | Midday
    | Here you define what time is midday.

    'midday' => [
        'hour' => '13',
        'minute' => '59',
    | Intervals
    | Here you define the intervals for forecast and historical data.
    | !Only available for Weatherstack
    'intervals' => [
        'forecast' => env('WEATHER_FORECAST_INTERVAL', 24),
        'historical' => env('WEATHER_HISTORICAL_INTERVAL', 1),



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 darksy Manual Deprecated, not able to acquire api key
Weatherstack weatherstack Auto For historical data a minimum Standard license is required. For forecast data a minimum Professional license is required.

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 and insert it into your .env file.



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));

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:


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


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.

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.


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.


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