13 Temmuz 2008Php ile hava durumu bilgileri
Merhabalar aslında bu yazımı daha önce fonksiyon olarak yazmıştım üstüne bir de wordpress eklentisi wp-syntax in azizliğine uğrayınca oluşan hatalardan ötürü yazıyı silmek zorunda kaldım. Aslında bir bakıma da daha iyi oldu. Bu olay sayesinde sınıf şeklinde bir hava durumu betiği ortaya çıktı. Bu kadar laftan sonra sınıfımızı kısa şekilde inceleyelim ve örneklere bakalım buyrun efendim…
YSF_Weather Sınıfımız:
<?php /* * Hava Durumu Tahmin Php Sınıfı * Yazar: Yusuf KOÇ ( Raiden ) <yusufkoc at ayva dot net> * Web: http://www.ysfkc.com * ------------------------------------- * Copyright 2007 ysfkc.com * Licensed under the GNU General Public License, version 2. * See the file http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt * */ class YSF_Weather { private $degree = array(); private $image = array(); private $status = array(); private $data; # Şehir İsimleri Düzenleniyor # ------------------------------- private function city_name_replace($city) { if (preg_match("#^Kahraman.+#",$city)) $city = preg_replace("/$city/i","K.MARAS",$city); return preg_replace( array("/Ğ/","/Ü/","/Ş/","/İ/","/Ö/","/Ç/","/ğ/","/ü/","/ş/","/ı/","/ö/","/ç/","/ /","/-/"), array("G","U","S","I","O","C","g","u","s","i","o","c","",""), $city ); } # Hava Durumu Bilgileri Çek # ----------------------------- private function city_weather_data_set($city) { $this->data = file_get_contents("http://havadurumu.mynet.com/sehir.asp?sehir=".$city); } # Derece Bul # ------------- public function city_weather_degree($city) { $city = $this->city_name_replace($city); $this->city_weather_data_set($city); preg_match("/<td class=\"ctytmpdeg\" height=\"10\">(.*)<\/td>/",$this->data,$this->degree); return $this->degree[1]; } # Resim Al # -------------- public function city_weather_images() { preg_match("/<td rowspan=\"2\" width=\"65\" height=\"65\"><img src=\"(.*)\"><\/td>/",$this->data,$this->image); return '<img src="'.$this->image[1].'">'; } # Durum Al # ----------- public function city_weather_status() { preg_match("/<td class=\"ctytmpdesc\" valign=\"top\">(.*)<\/td>/",$this->data,$this->status); return $this->status[1]; } } ?>
Sınıfımızda toplam beş tane metod bulunmaktadır. Bu metodlara şöyle bir göz atalım ne işe yaradıklarını inceleyelim…
city_name_replace(): metodu kendisine verilen şehir ismindeki olası türkçe karakterlere karşı ingilizce alfabesine uygun olarak değiştirip değer döndürmektedir.
city_weather_data_set(): metodu ise kendisine verilen şehir için ilgili kaynağa bağlanıp verileri alıp data değişkeninde depolamaktadır.
city_weather_degree(): metodu ise ilk önce kendisine parametre olarak verilen $city değişkeninin city_name_replace metodundan geçirilmesini sağlar. Ardından ise uygun hale getirilmiş şehir ismi ile ilgili kaynağa bağlanıp verileri alıyor.
Daha sonrasında ise preg_match fonksiyonundan yararlanılarak elde ettiğimiz veriden sadece bize lazım olan yani derece kısmını alıyoruz. ve bunu degree dizisine aktarıyoruz ve ardından metoddan değer döndürüyoruz.
city_weather_images(): metodu da az önceki fonksiyona benzemektedir. Tek farkı istek yapılan şehrin ilgili durumunu gösteren resim urlsini almaktır.
city_weather_status(): metodu ise yine aynı mantıkla sadece istek yapılan şehrin o anki durumunu göstermektedir. Örneğin: “rüzgarlı, açık” vb. gibi.
Sınıfımızın kullanımına örnek verelim şimdide:
<?php header('Content-type:text/html; charset=iso-8859-9'); include ('hava.php'); $hava = new YSF_Weather; echo $hava->city_weather_degree('bursa'); echo "<br>"; echo $hava->city_weather_images(); echo "<br>"; echo $hava->city_weather_status(); echo "<br>"; ?>
öncelikle sınıfımızı dosyamıza include fonksiyonu ile dahil ediyoruz ardından sınıfımızı başlatıyoruz. Burda yapmamız gereken ilk şey city_weather_degree() fonksiyonu istediğimiz şehri parametre olarak veriyoruz. Ardından ise city_weather_images() ve city_weather_status() metodları parametresiz olarak çağırılıyor…
Evet hepsi bu kadarcik.. Yaptığımız örneği buradan indirebilrsiniz. Güle güle kullanın

Merhaba Yusuf.
Mynet gibi kod çöplüğüne dönmüş bir web sitesinden bilgi çekmek yerine
Weather.com’un API’sini kullanmanı tavsiye ederim. İstediğin bir şehrin hava durumunu XML çıktısı olarak temiz ve hızlı bir şekilde alabilirsiniz.
üstteki yorumumda adresi vermeyi unutmuşum. kusura bakma.
http://www.weather.com/services/xmloap.html
Öncelikle bloğuma uğrayıp yorum yapmanız beni mutlu etti erhan. Lakin burda amaç biraz da olsa başka bağlantılardan nasıl veri çekilir yönünde. Elbette ki bir xml den veri çekmek daha basit ve kolay olacaktır.
tesekurler reiden eline saglik yukardaki fonksiyonlarida kullanarak url lerden bilgi cekiyorum yalniz herhangi bir tag arasindaki verileri yada txt leri silemiyorum benim istedigim herhangi bir tag blogu arasini almak ornegin
$bul = array (”, ”, “1″, “2″, “3″, “4″);
$degis = array (”", “”, “degistir1“, “degistir2“, “degistir3“, “degistir4“, “”);
$html = str_replace(”“, “”, $html); // leri yok edelim
$html = str_replace(”“, “”, $html); // leri yok edelim
$html = str_replace($bul, $degis, $html);
$pieces = preg_split(”/(\r\n\r\n|\r\r|\n\n)/”, $html, 2);
seklinde ciktisini alacagim zaman text burasi oldugu gibi td taglarini siliyorum yalniz “text burasi” seklindeki verilerini silemiyorum bir cozum onerisinde bulunabilirmisin acaba.
yeniden tesekurler
üstteki gibi bir regex deseni işinizi görecektir.
tesekurler bilgilendirmeleriniz icin deniyecegim umarim basariririm
weather.com’un API si çok iyi ancak Türkiye’nin tam 31 ili eksik, msn bir kısmı weather.com dan alıyor, ancak bazı şehirleri farklı yerden alıyor ki nereden aldığını anlamadım.
Çalışmalarınız gayet güzel. Güzel bir şekilde geliştirilebilinir.
@nurettin
teşekkürler ama uzun zamandır bişeyler giremiyorum işlerimin yoğunluğu neden ile..
Merhaba raiden,
son 3 günlük hava tahmini göstermek için bir kod ekledim ama başarılı olamadım.
hava.php yazdıgım
# son3gun
# ————–
public function city_weather_ucgun()
{
preg_match(”/(.*)/”,$this->data,$this->ucgun);
return $this->ucgun[1];
}
getir.php yazdıgım
echo $hava->city_weather_ucgun();
Bu konuda yardımcı olursan sevinirim teşekkurler
Adres kısmı silindi. sanırım güvenlik kontrolu yüzünden
Son 3 günlük hava tahmini için yardımını bekliyorum
müsait bir zamanımda buraya yazacağım nurettin.
tamam teşekkurler her gün burada izliyecegim
Yusuf unuttun bizi ve siteyi
@nurettin
yok unutmadım lakin malum iş güç derken pek zaman ayıramıyorum. istediğinizi ekledim şimdi aşağıdaki linkten indirip kullanabilirsiniz. içinde bir örneği de mevcut.
hava durumu
teşekkurler
kodu inceliyorum