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