PHP Dersleri

PHP ile il-ilçe Hava Durumu Botu

PHP ile daha önce farklı bir site üzerinden hava durumu botu hazırlamıştık. Sitede deki arama bölümünü kullanarak diğer hazırladığımız bota ulaşabilirsiniz. Farklı sitelerden bilgileri alarak pratik yapmanız sağlamış olacağım.

Hava durumu bilgileri çekeceğimiz sitenin adı weather.com sitesidir. Bu siteden il ve ilçe olarak detaylı bir şekilde hava durumu bilgilerine ulaşabilirsiniz. Hava durumu değerini çekmek istediğiniz il yada ilçe için üretilen kodlardan birisini kullanmanız gerekmektedir. Özel olarak hazırlanan bu kodlara buraya tıklatarak ulaşabilirsiniz.

Web Sitesine Bağlantı Sağlama

İlk olarak web sitesine bağlanma ve veri iletişiminin sağlanması için klasik bir baglan() fonksiyonu oluşturuyoruz. Aşağıdan bu fonksiyonun kodlarına ulaşabilirsiniz.

function baglan($a){
   $ch    = curl_init(); 
   curl_setopt($ch, CURLOPT_URL, $a); 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   $isle = curl_exec($ch); 
   curl_close($ch); 
   return $isle; 
}

Yukarıda yer alan fonksiyon ile bot olduğumuz anlaşılmadan verilere kolaylıkla ulaşılmasını sağlayacaktır.

İl / İlçe Seçiminin Yapılması

Hava durumunu alacağımız web sitesine il ve ilçe kodları verilmiştir. Bu kodları kullanarak değerlerini almak istediğiniz il yada ilçenin kodunu yazarak değerlere ulaşabilirsiz. Bu sayfadaya yazının başındaki link üzerinden ulaşabilirsiniz.

$il   = "TUXX0002"; // Ankara
$ilce = "TUXX0003"; // Etimesgut

Yukarıdaki değerler, web sitesinin sunmuş olduğu il ve ilçe kodlarıdır. Bu kodları kullanarak sonuçlara ulaşabilirsiniz.

URL Oluşturma

Web sitesine bağlanmak için bir üstteki başlıktan elde edeceğiniz kod ile birlikte bağlantı URL’i oluşturmanız gerekmektedir. Bu URL değerine ulaşmak için aşağıdaki yapıyı kullanacağız.

https://weather.com/tr-TR/kisisel/bugun/l/XXXXXXX:1:TU

Yukarıda yer alan XXXXXXX bölümüne yukarıda hazırlanan $il yada $ilce değerini yazarak ilgili değerin sayfa linkini oluşturabilirsiniz.

Verilere Ulaşma

Hazırlamış olduğumuz URL ile baglan() fonksiyonunu kullanıyoruz. Bağlanmış olduğumuz sitedeki değerlere ulaşmak için preg_match_all() fonksiyonunu kullanarak ilgiliv verilere ulaşıyoruz.

$il_baglan = Baglan("https://weather.com/tr-TR/kisisel/bugun/l/".$il.":1:TU");
preg_match_all('#<p class="today_nowcard-timestamp">(.*?)</p>#si', $il_baglan, $il_saat);
preg_match_all('#<div class="today_nowcard-temp">(.*?)</div>#si', $il_baglan, $il_derece);
preg_match_all('#<div class="today_nowcard-phrase">(.*?)</div>#si', $il_baglan, $il_aciklama);
preg_match_all('#<span class="deg-feels" className="deg-feels">(.*?)</span>#si', $il_baglan, $il_hissedilen);

Yukarıdaki gibi HTML etiketlerinden ilgili bölümlerei seçerek preg_match_all() fonksiyonu ile verilere ulaşıyoruz. Elde ettiğimiz verileri de üçüncü parametredeki değişkene atıyoruz.

function duzenle($saat, $derece, $aciklama, $hissedilen){
   $data["saat"]       = explode(":", strip_tags($saat[0][0]));
   $data["saat"]       = substr($data["saat"][0], -2).":".substr($data["saat"][1], 0, 2);
   $data["derece"]     = intval(strip_tags($derece[0][0]))."°";
   $data["aciklama"]   = strip_tags($aciklama[0][0]);
   $data["hissedilen"] = intval(strip_tags($hissedilen[0][0]))."°";
   return $data;
}
$il_bilgi      = duzenle($il_saat, $il_derece, $il_aciklama, $il_hissedilen);

Alınan veriler üzerinden düzenleme yapmak ve sade bir şekilde kullanabilmek için duzenle() fonksiyonunu kullanıyoruz. Böylece daha temiz bir veri elde etmiş olacağız.

Verileri Yazdırma

Hazırladığımız verileri küçük bir HTML ve CSS yapısı hazırlayıp ekrana yazdırıyoruz.

<style>
.kutu{width:250px; background:#4596DB; color:#fff;font-family:arial;border: 2px solid #3164CA; float:left; margin-right:10px}
.kutu .neresi{background: #0F47B7;text-align:center;padding:5px 0px}
.kutu .minik{background: #287AC1;text-align:center;padding:5px 0px}
.kutu .derece{text-align:center;font-size:60px;margin:5px 0px}
.kutu .aciklama{text-align:center;margin:10px 0px}
</style>

<div class="kutu">
   <div class="neresi">ANKARA</div>
   <div class="minik"><?=$il_bilgi["saat"]?> itibariyle</div>
   <div class="derece"><?=$il_bilgi["derece"]?></div>
   <div class="aciklama"><?=$il_bilgi["aciklama"]?></div>
   <div class="minik">Hissedilen: <?=$il_bilgi["hissedilen"]?></div>
</div>

Elde edilen verileri HTML ve CSS kodları ile süsleyerek ekrana yazdırmış oluyoruz. Hazırlamış olduğumuz hava durumu botunda aşağıdaki gibi bir sonuç elde etmiş olacağız.

PHP ile il-ilçe Hava Durumu Botu

Görselde yer aldığı gibi seçilen il yada ilçeye göre hava durum bilgisini elde edebilirsiniz. Yukarıdaki örnekte sadece il değeri üzerinden işlem yaptık. Aşağıdaki kodlardan hem il ve ilçe bilgilerine hemde kodun tamamına ulaşabilirsiniz.

<?php
## Bağlantı Fonksiyonumuz
function baglan($a){
   $ch    = curl_init(); 
   curl_setopt($ch, CURLOPT_URL, $a); 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   $isle = curl_exec($ch); 
   curl_close($ch); 
   return $isle; 
}
## il ve ilçe değerleri
$il   = "TUXX0002"; // Ankara
$ilce = "TUXX0003"; // Etimesgut
## İl bağlantısı
$il_baglan = Baglan("https://weather.com/tr-TR/kisisel/bugun/l/".$il.":1:TU");
preg_match_all('#<p class="today_nowcard-timestamp">(.*?)</p>#si', $il_baglan, $il_saat);
preg_match_all('#<div class="today_nowcard-temp">(.*?)</div>#si', $il_baglan, $il_derece);
preg_match_all('#<div class="today_nowcard-phrase">(.*?)</div>#si', $il_baglan, $il_aciklama);
preg_match_all('#<span class="deg-feels" className="deg-feels">(.*?)</span>#si', $il_baglan, $il_hissedilen);
## ilçe bağlantısı
$ilce_baglan = Baglan("https://weather.com/tr-TR/kisisel/bugun/l/".$ilce.":1:TU");
preg_match_all('#<p class="today_nowcard-timestamp">(.*?)</p>#si', $ilce_baglan, $ilce_saat);   
preg_match_all('#<div class="today_nowcard-temp">(.*?)</div>#si', $ilce_baglan, $ilce_derece);
preg_match_all('#<div class="today_nowcard-phrase">(.*?)</div>#si', $ilce_baglan, $ilce_aciklama);
preg_match_all('#<span class="deg-feels" className="deg-feels">(.*?)</span>#si', $ilce_baglan, $ilce_hissedilen);
## değerleri düzenleme
function duzenle($saat, $derece, $aciklama, $hissedilen){
   $data["saat"]       = explode(":", strip_tags($saat[0][0]));
   $data["saat"]       = substr($data["saat"][0], -2).":".substr($data["saat"][1], 0, 2);
   $data["derece"]     = intval(strip_tags($derece[0][0]))."°";
   $data["aciklama"]   = strip_tags($aciklama[0][0]);
   $data["hissedilen"] = intval(strip_tags($hissedilen[0][0]))."°";
   return $data;
}
## Düzenleme sonucu
$il_bilgi      = duzenle($il_saat, $il_derece, $il_aciklama, $il_hissedilen);
$ilce_bilgi    = duzenle($ilce_saat, $ilce_derece, $ilce_aciklama, $ilce_hissedilen);
?>
<style>
.kutu{width:250px; background:#4596DB; color:#fff;font-family:arial;border: 2px solid #3164CA; float:left; margin-right:10px}
.kutu .neresi{background: #0F47B7;text-align:center;padding:5px 0px}
.kutu .minik{background: #287AC1;text-align:center;padding:5px 0px}
.kutu .derece{text-align:center;font-size:60px;margin:5px 0px}
.kutu .aciklama{text-align:center;margin:10px 0px}
</style>

<div class="kutu">
   <div class="neresi">ANKARA</div>
   <div class="minik"><?=$il_bilgi["saat"]?> itibariyle</div>
   <div class="derece"><?=$il_bilgi["derece"]?></div>
   <div class="aciklama"><?=$il_bilgi["aciklama"]?></div>
   <div class="minik">Hissedilen: <?=$il_bilgi["hissedilen"]?></div>
</div>

<div class="kutu">
   <div class="neresi">ETİMESGUT</div>
   <div class="minik"><?=$ilce_bilgi["saat"]?> itibariyle</div>
   <div class="derece"><?=$ilce_bilgi["derece"]?></div>
   <div class="aciklama"><?=$ilce_bilgi["aciklama"]?></div>
   <div class="minik">Hissedilen: <?=$ilce_bilgi["hissedilen"]?></div>
</div>

Yukarıdaki kodlarla birlikte il ve ilçe değerlerine ait verilere ulaşabiliyor olacaksınız. Kaynak siteden il ve ilçe değerlerini alarak hava durumu değerlerine ulaşabilirsiniz.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir