"Enter"a basıp içeriğe geçin

PHP ile Güncel Hava Durumu Bilgisi Çekmek

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.

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;
}

Fonksiyondan aldığımız veri tamemen xml formatında olacağı için; içeriğini simplexml_load_string fonksiyonu ile açıyoruz.

$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;

İ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:

<!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.'&deg;</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>

Bu kodun çıktısı aşağıdaki gibi olacaktır:

Örnek kodu indirmek için buraya tıklayın.

2 Yorum

  1. kemal dündar
    kemal dündar 7 Mayıs 2018

    Merhaba elinize sağlık güzel bir kaynak sadece veriden bir ilçeyi yazdırmayı nasıl yapabiliriz.

    • Hakan
      Hakan 5 Haziran 2018

      Bu verileri array olarak tanımlayıp ilçe ismi ile geri çağırabilirsiniz.

Bir cevap yazın

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