OpenWeatherMap Retriever

Additional

Language
Java
Version
N/A
Created
Apr 9, 2017
Updated
Apr 26, 2017 (Retired)
Owner
Zack Chiu (czack810150)
Contributor
Zack Chiu (czack810150)
1
Activity
Badge
Generate
Download
Source code

open-weather-retriever-z

This is a wrapper that makes getting weather information from OpenWeatherMap a whole lot easier. What seperates this from other wrappers is that, in addition to the basic weather information, it allows free openweathermap user to get up to 5 days of daily forecast information, which typically requires a developer account with OpenWeatherMap(180USD/month). Please note that this is not a hack, instead the library calculates the 3-hour forecast information that free users get, summarize those values, and return it as daily forecast.

Getting Started

Dependency

Step 1: Add jcenter to your repository in project's build.gradle file:

repositories {
    ...
    ...
    jcenter()
}

Step 2: In module's build.gradle add the following dependency:

dependencies {
    ... 
    ... 
    compile 'com.ftoslab:openweatherretrieverz:0.1.4'
}

Available Information

Current Weather Information:

  • current temperature
  • current maximum temperature
  • current minimum temperature
  • short and long weather description
  • weather icon link from OpenWeatherMap
  • pressure
  • humidity
  • windspeed
  • 3-hour rain volume
  • 3-hour snow volume

5 Day Forecast:

  • daily average temperature
  • daily high temperature
  • daily low temperature
  • weather description
  • weather icon link from OpenWeatherMap
  • average pressure
  • average humidity
  • average wind speed
  • rain volume projected
  • snow volume projected

Tools:

  • convert all units to Metric
  • convert all units to Imperial
  • temperature converter

Initialization

// Initialize OpenWeatherRetrieverZ by passing in  your openweathermap api key
OpenWeatherRetrieverZ retriever = new OpenWeatherRetrieverZ(API_KEY);
/*
You can retrieve weather information with either OpenWeatherMap cityID or geolocation(Latitude, Logitude)
*/
retriever.updateCurrentWeatherInfo("6167865", new WeatherCallback() {
  @Override
  public void onReceiveWeatherInfo(CurrentWeatherInfo currentWeatherInfo) {
   // Your code here
  }
  
  @Override
  public void onFailure(String error) {
    // Your code here
  }
});
retriever.updateDailyForecastInfo("6167865", new DailyForecastCallback() {
  @Override
  public void onReceiveDailyForecastInfoList(List<DailyForecastInfo> dailyForecastInfoList) {
   // Your code here
  }
  
  @Override
  public void onFailure(String error) {
   // Your code here
  }
});

Both updateCurrentWeatherInfo and updateDailyForecastInfo are async, which means the main thread won't hang there and wait for the operation to finish. Instead, callback functions will be called when the information became available or when something went wrong.

Example

You can find an example app here

Notes

The ArrayList you get from updateDailyForecastInfo starts from the same day you request it (index 0, day 1), and you will be able to get forecast up until day 6 around the same time, which means the forecast on day 6 might not cover the whole day. This is because as a free user, you only get 40 pieces of 3-hour forecast information (5 days starting from the time you request it). To check how many pieces of 3-hour data for a particular day, you can make use of the function getDataCount() on DailyForecastInfo.

Contribution

The project is still in its preliminary phase, any contribution is welcomed and appreciated. I will review all the pull requests. If you find any bug or just wanna throw in a thought, feel free to create an issue!

License

Copyright 2017 FTOSLab.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.