Bu yazıda güncel hava durumu ve diğer meteorolojik verileri Meteoroloji Genel Müdürlüğü’nün sitesinden PHP kullanarak alıp, nasıl işleyebileceğinizi anlatmaya çalışacağım.
Bu makale güncellendi! Güncel hali için buraya tıklayınız: PHP ile hava durumu botu yapımı (detaylı anlatım)
Öncelikle bu linkleri uzun zamandır kullanmakta olduğumu belirtmek isterim. Veri alacağımız API linkinde dosya formatı olarak XML kullanılıyor. URL adresleri ve dosya formatı uzun zamandır aynı ve düzenli olarak bilgiler güncelleniyor. Sitelerinde bu linkler ile ilgili bir döküman bulamadım. Tahminimce MGM’nin android uygulaması için oluşturulmuş bir API olabilir.
Veri kaynağı olarak Meteoroloji Genel Müdürlüğü’nü belirtirseniz yararınıza olur.
İstanbul ve Çevre İller için:
https://www.mgm.gov.tr/FTPDATA/bolgesel/istanbul/sonSOA.xml
Genel durum ve diğer iller için:
https://mgm.gov.tr/ftpdata/analiz/sonsoa.xml
Buradaki XMLViewer ile url içeriklerini görüntüleyebilirsiniz.
Ben bu örnekte İstanbul verisini kullanıyorum.
İlk olarak xml dosya içeriğini çekmek için getir fonksiyonunu oluşturuyoruz.
[code language="php"] function getir() { $url = 'https://www.mgm.gov.tr/FTPDATA/bolgesel/istanbul/sonSOA.xml'; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $result = curl_exec($ch); curl_close($ch); return $result; } [/code]
Fonksiyondan aldığımız veri tamemen xml formatında olacağı için; içeriğini simplexml_load_string fonksiyonu ile açıyoruz.
[code language=”php”]
$veri = getir();
$xml = simplexml_load_string($veri);
echo "Genel durum:
; ".$xml->;Kemo->;GenelDurum;
echo "
Hava Sıcaklığı:
".$xml->Kemo->HavaSicakligi;
echo "
Rüzgar Durumu:
".$xml->Kemo->RuzgarDurum;
echo "
Deniz Durumu:
".$xml->Kemo->DenizDurum;
echo "
Güncellenme Tarihi:
".$xml->Kemo->Tarih;
[/code]

İlçelerin hava durumu verisini almak için for döngüsünü kullanmamız gerekiyor.
Biraz CSS ile görselleştirdiğim örnek sayfa:
[code language=”html”]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>İstanbul ilçeleri ve çevresi için hava durumu</title>
<style type="text/css">
.ilce {
float: left;
height: auto;
width: 230px;
height: 90px;
background-color: #333;
margin: 2px;
padding: 5px;
}
.baslik {
font-family: Arial, Helvetica, sans-serif;
line-height: 30px;
color: #3C0;
height: 30px;
width: 100%;
text-align: center;
font-weight: bold;
}
.durum {
font-size: 14px;
color: #FFFFFF;
width: 100%;
font-weight: normal;
font-family: Tahoma, Geneva, sans-serif;
}
</style></head>
<body>
<?php
$icerik = getir();
if (!$icerik){
echo "Hata: MGM’ye bağlanılamadı. ";
return false;
}
$xml = simplexml_load_string($icerik);
foreach ($xml->ilceler as $veri){
$ilce = $veri->ilce;
$sehir = $veri->Sehir;
$periyot = $veri->Peryot;
$durum = $veri->Durum;
$maks = $veri->Mak;
echo ‘
<div class="ilce">
<div class="baslik">’.$sehir.’ / ‘.$ilce.’ ‘.$maks.’°</div>
<div class="durum">’.$periyot.’: ‘.$durum.'</div>
</div>
‘;
}
function getir() {
$url = ‘https://www.mgm.gov.tr/FTPDATA/bolgesel/istanbul/sonSOA.xml’;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
?>
</body>
</html>
[/code]

Bu kodun çıktısı aşağıdaki gibi olacaktır:
Örnek kodu indirmek için buraya tıklayın.
Merhaba elinize sağlık güzel bir kaynak sadece veriden bir ilçeyi yazdırmayı nasıl yapabiliriz.
Bu verileri array olarak tanımlayıp ilçe ismi ile geri çağırabilirsiniz.