Starting in the last week or two the daily forecast returned by weatherkit rest api changed to 9 days instead of 10 days if I don't pass in the dailyStart and dailyEnd paramters.
Now, if I pass in those parameters to get me anything more than 9 days then I get 400 error. 9 days or less works.
Obviously something changed in the api.
Apple, please fix this asap!!!
WeatherKit
RSS for tagBring weather information to your apps and services through a wide range of data that can help people stay up to date, safe, and prepared.
Posts under WeatherKit tag
67 Posts
Sort by:
Post
Replies
Boosts
Views
Activity
Hello Apple team,
I would like to request a feature to display the past temperature data (e.g., last 7 days) for each place in the Weather app(Especially past 24 hours of data for any given city ). Just like how it shows future 7-10 days of data. This would allow users to quickly view temperature trends and patterns for users like us to re-member how that day was like,etc,etc.
Please consider adding a 'Past Weather' section or a graph that shows the temperature fluctuations over the past week.
Thank you for considering my request!
I would like to request two enhancements to the Weather app:
Add a Celsius/Fahrenheit conversion option directly on the home page, rather than requiring users to access it through the three-dot menu.
Consider displaying both Celsius and Fahrenheit scales side by side, without requiring users to choose a conversion option(only if its feasible for your team). This would be particularly helpful for users who are familiar with both scales, such as Asians living in America.
Thank you for considering my request!
Hi. The WWDC video of the v2 weatherkit api showed some examples for the REST API. However, they were very limited.
The documentation for the REST API is currently for the v1 weatherkit API. When will the documentation for the v2 API be released? There are some new features of the v2 that I would really like to use, but I can't without knowing the new v2 REST API specifications.
Any guidance would be much appreciated. Thanks!
I am using WeatherKit to display relevant weather information to the User in my App.
I also thought it would be helpful to show any time-sensitive WeatherAlert. I would like to direct the User directly into the system Weather app to get more details/information.
weather://open ... works... Is this a faux-pas? Is there a approved/proper way of doing this?
I know WeatherAlert.detailsURL exists but I figured it may be useful for the User to see all details related to weather right from the source.
Hello. I took a closer look at the data I'm getting back for hourly forecasts and I'm baffled by results I'm seeing.
For example, it's Dec 19, 2022 8:00am PT and I'm asking for the weather for Orchard Park NY (lat 42.766437 long -78.743855) for Dec 23, 2022. The daily forecast tells me they're expected to have 5.9" of snow. However, the hourly forecast with the most snow that day is reported as 0.071" (1.8mm). The Apple Weather app on iOS shows that hour as having 0.6".
I wrote a 'for' loop to print the results of my call to WeatherService.shared.weather.
print(oneHour.precipitationAmount.formatted())
print(oneHour.precipitationAmount.description)
print(oneHour.precipitationAmount.unit)
print(oneHour.precipitationAmount.value)
0.071 in
1.8 mm
<_NSStatic_NSUnitLength: 0x2010b0178> mm
1.8
Upon requesting forecast data for more than 9 days, the API would return "400 Bad Request".
Here are some values I tried (as of 2024-07-02T15:00:00Z):
(dailyStart is in past)
dailyStart=2024-07-01T15:00:00Z
dailyEnd=2024-07-11T15:00:00Z
expected= 10 days forecast
actual= 10 days forecast
(dailyStart is current date, forcecast > 9 days) fails
dailyStart=2024-07-02T15:00:00Z
dailyEnd=2024-07-12T15:00:00Z
expected= 10 days forecast
actual= 400 Bad Request
(dailyStart is current date, forecast <= 9 days)
dailyStart=2024-07-02T15:00:00Z
dailyEnd=2024-07-11T15:00:00Z
expected= 9 days forecast
actual= 9 days forecast
(no values passed) fails
dailyStart=
dailyEnd=
expected= 10 days forecast
actual= 9 days forecast
The official documentation says:
dailyEnd: The time to end the daily forecast. If this parameter is absent, daily forecasts run for 10 days.
dailyStart: The time to start the daily forecast. If this parameter is absent, daily forecasts start on the current day.
This started happening sometime last week.
Would someone please tell me what changed with the API?
Thank you.
My pipeline broke today as new fields were added for the current weather dataset:
cloudCoverLowAltPct
cloudCoverMidAltPct
cloudCoverHighAltPct
I presumed new fields would only be released in a new version of the API? Is there any way to use a specific version of the API that will not be subject to change?
The current weather REST API docs are here, which don't include these fields: https://developer.apple.com/documentation/weatherkitrestapi/currentweather/currentweatherdata
I'm just getting 400 error responses to my requests sent to the WeatherKit REST API... haven't changed anything in my code for months.
Here is the verbose output from curl:
# curl -v "https://weatherkit.apple.com/api/v1/weather/en/51.5203/-0.1775?dataSets=forecastHourly%2CforecastNextHour&hourlyEnd=2024-07-04T09%3A03%3A36.962Z&hourlyStart=2024-06-24T09%3A03%3A36.962Z" -H "Authorization: Bearer [REDACTED]"
* Trying 23.73.4.202:443...
* Connected to weatherkit.apple.com (23.73.4.202) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: C=US; ST=California; O=Apple Inc.; CN=weather-data.apple.com
* start date: May 8 16:30:14 2024 GMT
* expire date: Nov 4 16:40:14 2024 GMT
* subjectAltName: host "weatherkit.apple.com" matched cert's "weatherkit.apple.com"
* issuer: C=US; O=Apple Inc.; CN=Apple Public Server ECC CA 1 - G1
* SSL certificate verify ok.
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
> GET /api/v1/weather/en/51.5203/-0.1775?dataSets=forecastHourly%2CforecastNextHour&hourlyEnd=2024-07-04T09%3A03%3A36.962Z&hourlyStart=2024-06-24T09%3A03%3A36.962Z HTTP/1.1
> Host: weatherkit.apple.com
> User-Agent: curl/7.81.0
> Accept: */*
> Authorization: Bearer [REDACTED]
>
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 Bad Request
< Server: Apple
< Content-Length: 0
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=31536000; includeSubdomains
< X-XSS-Protection: 1; mode=block
< Access-Control-Allow-Origin: *
< X-Content-Type-Options: nosniff
< Content-Security-Policy: default-src 'self';
< X-REQUEST-ID: ed7d038c-ef82-61d8-a2cb-4522ff7d32ca
< X-Apple-Origin: fdcbff05-73b4-3a53-948b-343caa55a40e
< Date: Mon, 24 Jun 2024 09:18:00 GMT
< X-Cache: TCP_MISS from a23-73-3-202.deploy.akamaitechnologies.com (AkamaiGHost/11.5.2-56655770) (-)
< Connection: keep-alive
<
* Connection #0 to host weatherkit.apple.com left intact
My app AirCompare is a smart home controller and makes system decisions based on local weather. Users have been seeing absurdly wrong (~10°F off) current temperatures, and of course that's a problem.
I've seen similar complaints on Reddit and one poster claims that Apple switched from whatever DarkSky was using (which seemed accurate) to a predictive model from IBM. Compare iOS15 to iOS16 and you may see a large discrepancy in the Weather app.
As a developer needing an accurate current temperature, I'm wondering if this is a temporary problem or whether we can expect this to continue going forward. If it's the latter, I'll need to find something more reliably accurate.
This is one of the comments to my weather app from users and also most of users think like that: Ever since Apple bought Dark Sky it's been wildly inaccurate.
How does it possible? What you think?
In the WWDC 2024 session, "Bring context to today's weather", it was mentioned that the Swift API now uses FlatBuffers when downloading the weather data to the client device.
Will Apple's API for FlatBuffers be made available to developers? If its already in the SDK (client side) it would seem a shame to have to include another framework that does the same thing.
In the last 24 hours, I've noticed a huge increase in the number of connection failures to WeatherKit... more than half the calls are responding with responseFailed or -999 / -1001 errors. This is happening to customers in production, I have not managed to replicate the error on my own devices to get a complete error readout. Is anyone else experiencing this?
System status shows green.
Is there a way out of the WeatherKit REST API to get a textual summary of the weather like the iPhone app from Apple shows? Right now the local forecast on the iPhone app says "Sunny conditions from 7pm-8pm, with partly cloudy conditions expected at 8PM". Is this something the app rolls on it's own or is there a attribute-value pair in one of the returned JSON datasets that has this text. It's not in the "forecastDaily" dataset.
*Humorous that it says "Sunny conditions from 7pm-8pm" because that's about the time the sun is setting. That forecast was from 1PM.
I've got an iOS app that uses WeatherKit SDK (not the REST API) to pull weather data. I'm getting reports from users today that it is failing to update today (June 5, 2024).
When I run the app in a debugger I see:
Failed to generate jwt token for: com.apple.weatherkit.authservice with error: Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)"
Received authentication failure for request: 5E11C6A7-C255-4130-B1C7-93C3D6935210
On another attempt I got a 504 response.
The Apple Weather app is also extremely slow to update (if at all) when adding a new location.
And of course, https://developer.apple.com/system-status/ shows WeatherKit with a green light.
Is anyone else seeing this?
Edit: There seems to be a broad outage with weatherkit. The apple weather app is not working for several people reported here:
https://discussions.apple.com/thread/255637780?sortBy=best
Why is the developer dashboard showing a green light?!
We need to be able to rely on these systems.
Looks like the Weather Kit API is down again. Anybody having the same issue?
I was wondering if anyone knows why the sample project uses Task.detached everywhere because it seems highly non-standard, e.g. in ContentView:
.task {
Task.detached { @MainActor in
await flightData.load()
}
}
Instead, I would expect to see something like:
.task {
flightData = await controller.loadFlightData()
}
Or:
.task {
await controller.load(flightData: flightData)
}
Is the use of detached perhaps an attempt to work around some issue with ObservableObject published updates?
I have a Swift app that fetches current conditions and daily forecasts. It is in production and working without issues.
My question is whether the fetch I am using counts as a single “request” for usage thresholds, or two (one for current conditions, one for daily forecast)?
I need current conditions more often than daily forecast, so if this is counting as two requests, I could refactor the logic to get each separately as needed. But separating the requests would use more quota if the combined fetch counts as a single request.
let service = WeatherService()
let location = CLLocation(latitude: weatherData.lat, longitude: weatherData.lon)
let startOfToday = Calendar.current.startOfDay(for: Date())
let endDate = Calendar.current.date(byAdding: DateComponents(day: 2), to: startOfToday)!
let current: CurrentWeather
let daily: Forecast<DayWeather>
(current, daily) = try await service.weather(for: location, including: .current, .daily(startDate: startOfToday, endDate: endDate))
Has anyone else been experiencing issues with the WeatherKit API recently? Since Saturday we've been seeing about 1.5% of our requests time out. Apple hasn't posted anything on their status page https://developer.apple.com/system-status/ and the issue doesn't seem to be getting any better.
I'm creating an app that uses WeatherKit to get weather data. I wanted to confirm if the requests made to the service during app development will be deducted from our monthly usage limit or credit?
Thanks