Reputation: 6437
Possible duplicate:
Get weather update of current location?
How can I get the weather in current location from Latitude and Longitude?
I'm developing an app, it can update weather at current location. I have googled and found how to use Google API. But now Google API not available, and I used Yahoo weather instead.
My questions:
How to get weather use Yahoo Weather API
Tutorial or Source Code
Upvotes: 12
Views: 73800
Reputation: 157
I have personally used OpenWeather API. its totally free and you can retrieve weather forecast for any location via city name, zipcode or latitude and longitude etc.
<?php
$city = 'london';
$jsonfile = file_get_contents( 'http://api.openweathermap.org/data/2.5/weather?q=' . $city . '&units=metric&lang=en&appid=c0c4a4b4047b97ebc5948ac9c48c0559' );
$jsondata = json_decode( $jsonfile );
$temp = $jsondata->main->temp;
$pressure = $jsondata->main->pressure;
$mintemp = $jsondata->main->temp_min;
$maxtemp = $jsondata->main->temp_max;
$wind = $jsondata->wind->speed;
$humidity = $jsondata->main->humidity;
$desc = $jsondata->weather[0]->description;
$maind = $jsondata->weather[0]->main;
$currentTime = time();
?>
<style>
body {
font-family: Arial;
font-size: 0.95em;
color: #929292;
}
.report-container {
border: #E0E0E0 1px solid;
padding: 20px 40px 40px 40px;
border-radius: 2px;
width: 550px;
margin: 0 auto;
}
.weather-icon {
vertical-align: middle;
margin-right: 20px;
}
.weather-forecast {
color: #212121;
font-size: 1.2em;
font-weight: bold;
margin: 20px 0px;
}
span.min-temperature {
margin-left: 15px;
color: #929292;
}
.time {
line-height: 25px;
}
</style>
<body>
<div class="report-container">
<h2><?php echo $jsondata->name; ?> Weather Status</h2>
<div class="time">
<div><?php echo date( 'l g:i a', $currentTime ); ?></div>
<div><?php echo date( 'jS F, Y', $currentTime ); ?></div>
<div><?php echo $desc; ?></div>
</div>
<div class="weather-forecast">
<img
src="http://openweathermap.org/img/w/<?php echo $jsondata->weather[0]->icon; ?>.png"
class="weather-icon" /> <?php echo $mintemp; ?>°C<span
class="min-temperature"><?php echo $maxtemp; ?>°C</span>
</div>
<div class="time">
<div>Humidity: <?php echo $humidity; ?> %</div>
<div>Wind: <?php echo $wind; ?> km/h</div>
</div>
</div>
</body>
Upvotes: 2
Reputation: 761
Add to build.gradle
implementation 'com.github.androdocs:Simple-HTTP-Request:v1.0'
XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_gradient"
android:orientation="vertical"
android:padding="25dp">
<RelativeLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible">
<LinearLayout
android:id="@+id/addressContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:textColor="#FFFFFF"
android:id="@+id/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DHAKA, BD"
android:textSize="24dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/updated_at"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="20 April 2012, 20:08 PM"
android:textSize="14dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/overviewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:textColor="#FFFFFF"
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Clear Sky"
android:textSize="18dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:fontFamily="sans-serif-thin"
android:text="29°C"
android:textSize="90dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:textColor="#FFFFFF"
android:id="@+id/temp_min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Min Temp: 05:05 AM" />
<Space
android:layout_width="50dp"
android:layout_height="wrap_content" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/temp_max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Max Temp: 05:05 PM" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/detailsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/sunrise"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sunrise"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/sunrise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/sunset"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sunset"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/sunset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/wind"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wind"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/wind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
</LinearLayout>
<Space
android:layout_width="wrap_content"
android:layout_height="10dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/pressure"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pressure"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/pressure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/humidity"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Humidity"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/humidity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/info"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Created By"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/about"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AndroDocs"
android:textSize="14dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<ProgressBar
android:id="@+id/loader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone" />
<TextView
android:id="@+id/errorText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Something went wrong"
android:visibility="gone" />
public class WeatherActivity extends AppCompatActivity {
// String CITY = "surat";
String API = "8118ed6ee68db2debfaaa5a44c832918";
String locality;
TextView addressTxt, updated_atTxt, statusTxt, tempTxt, temp_minTxt, temp_maxTxt,
sunriseTxt, sunsetTxt, windTxt, pressureTxt, humidityTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21) {
getWindow().clearFlags(67108864);
getWindow().setStatusBarColor(ContextCompat.getColor(this,
R.color.weatheract));
}
setContentView(R.layout.activity_weather);
addressTxt = findViewById(R.id.address);
updated_atTxt = findViewById(R.id.updated_at);
statusTxt = findViewById(R.id.status);
tempTxt = findViewById(R.id.temp);
temp_minTxt = findViewById(R.id.temp_min);
temp_maxTxt = findViewById(R.id.temp_max);
sunriseTxt = findViewById(R.id.sunrise);
sunsetTxt = findViewById(R.id.sunset);
windTxt = findViewById(R.id.wind);
pressureTxt = findViewById(R.id.pressure);
humidityTxt = findViewById(R.id.humidity);
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,
false));
if (location != null) {
getCity(location.getLatitude(), location.getLongitude());
}
}
}
private final void getCity(double d2, double d3) {
List list;
try {
list = new Geocoder(getApplicationContext(),
Locale.getDefault()).getFromLocation(d2, d3, 1);
if (list != null && (!list.isEmpty())) {
locality = ((Address) list.get(0)).getLocality();
new weatherTask().execute();
}
} catch (NullPointerException e2) {
} catch (IOException e) {
e.printStackTrace();
}
}
class weatherTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
/* Showing the ProgressBar, Making the main design GONE */
findViewById(R.id.loader).setVisibility(View.VISIBLE);
findViewById(R.id.mainContainer).setVisibility(View.GONE);
findViewById(R.id.errorText).setVisibility(View.GONE);
}
protected String doInBackground(String... args) {
String response =
HttpRequest.excuteGet("https://api.openweathermap.org/data/2.5/weather?q=" + locality
+ "&units=metric&appid=" + API);
return response;
}
@Override
protected void onPostExecute(String result) {
try {
JSONObject jsonObj = new JSONObject(result);
JSONObject main = jsonObj.getJSONObject("main");
JSONObject sys = jsonObj.getJSONObject("sys");
JSONObject wind = jsonObj.getJSONObject("wind");
JSONObject weather = jsonObj.getJSONArray("weather").getJSONObject(0);
Long updatedAt = jsonObj.getLong("dt");
String updatedAtText = "Updated at: " + new SimpleDateFormat("dd/MM/yyyy
hh:mm a", Locale.ENGLISH).format(new Date(updatedAt * 1000));
String temp = main.getString("temp") + "°C";
String tempMin = "Min Temp: " + main.getString("temp_min") + "°C";
String tempMax = "Max Temp: " + main.getString("temp_max") + "°C";
String pressure = main.getString("pressure");
String humidity = main.getString("humidity");
Long sunrise = sys.getLong("sunrise");
Long sunset = sys.getLong("sunset");
String windSpeed = wind.getString("speed");
String weatherDescription = weather.getString("description");
String address = jsonObj.getString("name") + ", " +
sys.getString("country");
/* Populating extracted data into our views */
addressTxt.setText(address);
updated_atTxt.setText(updatedAtText);
statusTxt.setText(weatherDescription.toUpperCase());
tempTxt.setText(temp);
temp_minTxt.setText(tempMin);
temp_maxTxt.setText(tempMax);
sunriseTxt.setText(new SimpleDateFormat("hh:mm a",
Locale.ENGLISH).format(new Date(sunrise * 1000)));
sunsetTxt.setText(new SimpleDateFormat("hh:mm a",
Locale.ENGLISH).format(new Date(sunset * 1000)));
windTxt.setText(windSpeed);
pressureTxt.setText(pressure);
humidityTxt.setText(humidity);
/* Views populated, Hiding the loader, Showing the main design */
findViewById(R.id.loader).setVisibility(View.GONE);
findViewById(R.id.mainContainer).setVisibility(View.VISIBLE);
} catch (JSONException e) {
findViewById(R.id.loader).setVisibility(View.GONE);
findViewById(R.id.errorText).setVisibility(View.VISIBLE);
}
}
}
}
Upvotes: 0
Reputation: 1311
I have personally used this API its free and you can retrieve weather forecast for any location via postcode, zipcode or latitude and longitude
**NOTE:**The Local Weather API returns weather data in XML, JSON and CSV format and contains weather elements like temperature, precipitation (rainfall), weather description, weather icon and wind speed.
**UPDATE:**The www.worldweatheronline.com/ api is not free anymore.
Try these
Upvotes: 11
Reputation: 955
OpenWeatherMap is the best weather open API that you can use: https://openweathermap.org/api
Here is a sample app android-openweathermap-app
Upvotes: 1
Reputation: 708
You can get the Integration weather API in android but it need little bit of knowledge on parsing a xml response.
weather data to display current weather
Upvotes: 0
Reputation: 2521
Here's a collection of weather APIs that you can experiment with via your browser and then generate source code for in your favorite language:
https://live.temboo.com/library/keyword/weather/
Full disclosure: I work at Temboo.
Upvotes: 2
Reputation: 12363
let me tell you what you should NOT use.. Google API ( it has been stopped )
http://thenextweb.com/google/2012/08/28/did-google-just-quietly-kill-private-weather-api/
Then, you have other options like
Yahoo Weather API
http://developer.yahoo.com/weather/
Eg.. To get the forecast for Paris, France, with degrees Celsius and other metric units: http://weather.yahooapis.com/forecastrss?w=615702&u=c
for other example visit the link http://developer.yahoo.com/weather/#examples
WunderGround Weather API
http://www.wunderground.com/weather/api/
Another Good Alternate is Open Weather Map API , it supports JSON output by passing just the latitude and longitude of the location.
http://openweathermap.org/wiki/API/JSON_API
Upvotes: 13