Jump to content

Web Servis Ile Hava Durumu Öğrenmek


wmismail

Recommended Posts

Bu makalemizde web servisini kullanarak Türkiye illerinin hava durumunu birer birer nasıl çekebileceğimizi anlatacağım. Yalnız uygulamamıza geçmeden önce bilmeyenler için web servisleri hakkında kısaca bilgi vermek istiyorum.

XML Webservisleri sayesinde farklı platformlar aracılığı ile çok kolay veri transferi yapılabilmektedir. Bu servisler standart olan protokoller üzerinde çalışmaktadır. Yani XML Web servisleri XML standartlarını kullanarak veri alışverişi yapmaktadır.Web servisleri veri alışverişinde HTTP protokolünü kullanmaktadır. XML platform bağımsız bir yapı olduğundan değişik platformdaki uygulamaları sorunsuzca birbirleri ile konuşturabilir.

Web servisleri hakkında kısa bir ön bilgi verdikten sonra uygulamamıza geçebiliriz. Öncelikle bir windows projesi açıyoruz. Formumuza bir combobox ve gridview yerleştiriyoruz.Ekran görüntüsü aşağıdaki gibi olacak şekilde tasarlıyoruz.

Yukarıdaki gibi ekranımızı tasarladıktan sonra kullanacağımız web servisini projemize eklememiz gerekiyor.Web servisini projeye eklemek için sağ tarafta bulunan solution explorer penceresinde yer alan references ?a sağ click yapıyoruz ve Add Web Reference seçiyoruz.

1.jpg

?Add Web Reference? seçildikten sonra karşınıza aşağıdaki gibi bir pencere gelecektir.

2.jpg URL kısmına şu adresi yazıyoruz: http://www.webservicex.net/globalweather.asmx?wsdl

Web Reference name kısmına istediginiz bir isim yazabilirsiniz fakat ona göre kodunuzda değişiklikler yapmalısınız. Ben BenimHavaRaporum dedim. Daha sonra Add reference butonuna tıklayarak webservisimizi projemize ekliyoruz.

3.jpg

Yukarıdada görmüş olduğunuz gibi web servisimiz başarıyla projemize eklenmiş bulunmaktadır. Artık yapmamız gereken tek şey kod kısmını hazırlamak. Kullanmış olduğumuz web servis 2 tane parametre almakta. Bunlar;

4.jpg

GetCitiesByCountry seçtiğiniz zaman sizden parametre olarak bir ülke ismi istiyor ve o ülkenin bütün şehirlerini getiriyor.

GetWeather ise şehir ismi ve ülke ismi olmak üzere iki parametre istiyor ve yazılan şehrin hava durumunu size geri döndürüyor.

Bizim yapacağımız uygulama formun load anında GetCitiesByCountry web metoduna Turkey parametresini vererek ilgili illeri comboBox?a dolduracağız. İsterseniz önce bu metodu yazmaya başlayalım.

private void Form1_Load(object sender, EventArgs e)

{

ButunIlleriGetir();

}

Formun load anında Turkiye?nin butun illerini çağıracak metodumuzu yazıyoruz.

Şimdi ise yazacağımız metod yukarıda bahsetmiş olduğum GetCitiesByCountry adlı web metodunu Turkiye parametresi ile çağıracak ve oradan dönen değerleri bir dataset kümesinde tutup daha sonra comboBox?a bind yapacağız.

private void ButunIlleriGetir()

{

BenimHavaRaporum.GlobalWeather GWiller = new BenimHavaRaporum.GlobalWeather();//Web servisimizi kullanmak için bir instance alıyoruz.TextReader rd = new StringReader(GWiller.GetCitiesByCountry("Turkey"));//Parametre olarak Turkiye verildiDataSet ds = new DataSet("Iller");// Iller tablomuzu tutmak icin bir dataset oluşturuldu.ds.ReadXml(rd); // Datasetin içi ilgili iller ile doldurulducomboBox1.DataSource = ds.Tables[0];

comboBox1.DisplayMember = ds.Tables[0].Columns[1].ColumnName;

}

Illerimizi comboBox?a doldurduktan sonra sıra geldi seçilen ilin hava raporunu dataGridView1 kontrolümüzde göstermeye. Hava Durumunu Göster adlı butonumuzun click eventine aşağıdaki metodu yazıyoruz.

private void btnRaporGoster_Click(object sender, EventArgs e)

{

DataTable dt = new DataTable();

dt.Columns.Add("Lokasyon");

dt.Columns.Add("Hava Durumu");

dt.Columns.Add("Sicaklik");

dt.Columns.Add("Rüzgar Durumu");

BenimHavaRaporum.GlobalWeather GWRapor = new BenimHavaRaporum.GlobalWeather();//Web servisimizi kullanmak için bir instance alıyoruz.TextReader rd = new StringReader(GWRapor.GetWeather(cmbIller.Text, "Turkey"));

XmlDocument xmlDocument = new XmlDocument(); //XML dokumanimizi okuyabilmek için bir XmlDocument nesnesi oluşturuyoruz.xmlDocument.Load(rd);//XML i okutuyoruz.XmlNode topNode = xmlDocument.DocumentElement;

XmlNode xnLocation = xmlDocument.SelectSingleNode("//CurrentWeather//Location");//CurrentWeather nodundan sonra gelen location nodunun bilgisini alıyoruz.XmlNode xnSkyCondition = xmlDocument.SelectSingleNode("//CurrentWeather//SkyConditions");//aynı şekilde istediğimiz nodların bilgilerini xmlnode sayesinde alabiliyoruzXmlNode xnTemperature = xmlDocument.SelectSingleNode("//CurrentWeather//Temperature");

XmlNode xnWind = xmlDocument.SelectSingleNode("//CurrentWeather//Wind");

DataRow dr = dt.NewRow();

dr[0] = xnLocation.InnerText;//çekmiş olduğumuz nodumuzun içindeki text'ini datarow nesnesimizin ilk hücresine atıyoruz.dr[1] = xnSkyCondition.InnerText;

dr[2] = xnTemperature.InnerText;

dr[3] = xnWind.InnerText;

dt.Rows.Add(dr);

dataGridView1.DataSource = dt;

}

5.jpg

Evet arkadaşlar şahsen bütün veriyi alıp datasetede atıp gridview da gösterebilirdim fakat bir çok gereksiz bilginin geldiğini gördüm ve bu yüzden bizim işimize yarayacak olan lokasyon bilgisi, hava durumu, sicaklik bilgisi ve rüzgarın şiddeti bilgilerini çekmemin yeterli olabileceğini düşündüm. Siz daha fazla bilgi çekmek isterseniz aşağıda webservisin nodlarını yazdım istediklerinizi çekebilirsiniz.

<CurrentWeather>

<Location>Istanbul / Ataturk, Turkey (LTBA) 40-58N 028-49E 37M</Location><Time>Jan 03, 2008 - 10:20 AM EST / 2008.01.03 1520 UTC</Time><Wind> from the NW (310 degrees) at 9 MPH (8 KT):0</Wind><Visibility> 4 mile(s):0</Visibility><SkyConditions> mostly cloudy</SkyConditions><Temperature> 32 F (0 C)</Temperature><Wind>Windchill: 24 F (-4 C):1</Wind><DewPoint> 28 F (-2 C)</DewPoint><RelativeHumidity> 86%</RelativeHumidity><Pressure> 30.18 in. Hg (1022 hPa)</Pressure><Status>Success</Status></CurrentWeather>

Bir başka makalede tekrar görüşmek üzere ..

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...