Namaz Vakitleri Sınıfı – Diyanet İşleri Başkanlığı – PHP CLASS

Erdem Arslan > Programlama > PHP > Namaz Vakitleri Sınıfı – Diyanet İşleri Başkanlığı – PHP CLASS
namazvakti

Namaz Vakitleri Sınıfı – Diyanet İşleri Başkanlığı – PHP CLASS

[alert type=”info” close=”false”]Bu sayfanın içeriği tamamen geçerliliğini yitirmiştir. Yeni dosyalar ve bilgi için lütfen burayı ziyaret ediniz.[/alert]
12 Haziran 2011 tarihinde XML Namaz Vakitleri sınıfımı yayınlamıştım. Sınıf Diyanet İşleri Başkanlığının resmi sayfasındaki namaz vakitleri bölümünden verileri alıp, XML formatına döndürüyordu. Ancak sınıf bu haliyle pek kullanışlı değildi. Çünkü sınıf her seferinde Diyanet İşleri Başkanlığından veri çekiyordu. Bu da verilerin daha yavaş gösterilmesine neden oluyordu. Ayrıca veriyi xml şeklinde almak, kullanmak için çok fazla iş yaptırmayı gerektiriyordu. Örneğin Codeigniter da kullanırken, aldığım XML verisi tekrar dizi formatına çevirip, sayfaya göndermeye çalışıyordum. Yine eski sınıf fonksiyonlar içerisinden çağrıldığında sıkıntı oluşturuyordu. Ayrıca çalıştırmak için birden fazla kod yazmak gerektirmesi de cabası.

Yeni sınıf sonucu bize bir dizi şeklinde döndürüyor. Ayrıca bu sınıf verileri 27 günlüğüne önbelleğe (fiziksel bir dosyaya) alıyor. Neden 27 gün diyecek arkadaşları görebiliyorum, sadece şunu düşündüm en kısa ay şubat ve 28 gün. Eğer 27 günlük bir önbellekleme yaparsam, önbellekten veri okunacağı zaman hata olmayacağını düşünmemdendir. Zaten Diyanet İşleri Başkanlığı 30 günlük veri veriyor en fazla. Dosya birkere önbelleğe alındıktan sonra 27 gün boyunca Diyanet İşleri Başkanlığından veri çekilmiyor. Bu da verilere daha hızlı erişmemizi sağlıyor.

Ayrıca çekilen veriler, belirtilen tarihe göre alabilmesi büyük bir avantajı. Çünkü biz genelde namaz vakitleri aylık olarak değil günlük olarak sitelerimizde yayınlıyoruz. İstenilirse verilerin 1 aylık tamamı, ya da bulunan günün, ya da ertesi günün (yarın), ya da önbelleğe alınan 30 günlük herhangi bir tarihin verileri alınabiliyor.

Sınıfın bir kopyasının belleğe çıkartılmasıyla, istenilen her yerden erişilebilmesi mümkün kılıyor. örneğin, başka bir sınıfın ya da fonksiyonun içerisinden namazvakitleri::getInstance(); şeklinde erişim mümkündür.

Son olarak, bu sınıf ile kullanılabilecek şehir ve ülkeler http://www.diyanet.gov.tr/turkish/namazvakti/vakithes_namazvakti.asp adresinde yer alan şehir ve ülkelerdir. Bu şehir ve ülkelerin verileri başarılı bir biçimde çekilip kullanılabilmektedir. Verisini almak istediğiniz şehri mutlaka yukarıda verdiğim adresten kontrol edin. Yukarıdaki adreste istediğiniz şehir yoksa, o şehre ait veri de çekemezsiniz. Ayrıca Türkiyedeki şehirleri görsellik ve aslına uygun olması için sınıf içinde düzenleme yaptırdım. Normalde biz veri çeker iken ülkeyi TURKIYE ve şehri CANAKKALE gibi büyük harf ve TR karakter içermeyecek şekilde yazıyoruz. Bu bilgiler geri dönerken bize Türkiye ve Çanakkale şeklinde geri dönüyor. 😀

Örnek Kodlama;

<?php
 $nv = namazvakitleri::getInstance();

 $ayarlar = array(
       'ulke' => 'TURKIYE', // Öntanımlı Türkiyedir. Belirtilmese de olur.
       'sehir' => 'ISTANBUL', // Öntanımlı Çanakkaledir. ülke ve şehir isimleri Diyanet İşleri Başkanlığının sayfasında yer aldığı gibi büyük harflerle ve TR karakter içermeyecek şekilde olmalıdır.
       'klasor' => './nv_verileri', // cache dosyalarının saklanacağı klasördür.
       'logdir' => './logs', // log dosyasının tutulacağı klasördür.
       'log'   => true, // log tutulup tutulmaması içindir. true ya da false değeri alır.
  );

  namazvakitleri::ayarlar($ayarlar);

  $vakitler = $nv->al_vakit('hepsi'); // hepsi, bugun, yarın veya dd.mm.YYYY şeklinde tarih kabul eder. eğer tarih yoksa veya yanlışsa bugünkü değeri verir. öntanımlı bugun dür.

  echo '<pre>';
  print_r($vakitler);
  echo '</pre>';

  ?>

İndirmek için, lütfen http://tools.erdemarslan.com/ adresini ziyaret ediniz.

48 thoughts on “Namaz Vakitleri Sınıfı – Diyanet İşleri Başkanlığı – PHP CLASS

    1. Kendi yazmadığım sistemler için malesef destek vermiyorum. belediyeyazilim.com adresinden yardım istemelisiniz. bahsi geçen adres diyanetin verilerini barındırıyor ancak çok sağlıklı değil bazen uyuşmayabiliyor!

  1. Erdem bey merhaba;
    Hazırlamış olduğunuz eklentiyi indirip aktif hale getirdikten sonra şöyle bi hata veriyo ve site hiç açılmıyor.
    failed to parse passed in variable @bg_location:

      1. Belediye yazılım adresi zaten mobilion un alt yapısı. Mobilion da diyanete uygulama yapan şirket. Ben de vakti zamanında onu kullandım ancak veriler bazen uyuşmayabiliyor.

  2. Diyanet’in sitesini değiştirmesinden sonra güncelleme çalışmalarınız ne durumda acaba? Bir gelişme var mı?

    1. Çalışmalar devam ediyor. Zaman veremeyeceğim malesef. Daha önce zaman verdim ancak çeşitli nedenlerden dolayı olmadı. İnşallah en kısa zamanda diyelim. Sizden daha çok istiyorum şu proje tamamlansın. Ya nasip…

    1. Teşekkürler Abdullah bey. Bilgim var. Şu anda Diyanetten verileri çekebiliyorum. Ancak bunu bir servis olarak yayınlayacağım için çalışmalarım halen sürüyor. Biraz daha sabır diyorum.

    1. inşallah çok yakında. Bir çok arkadaş, gerek iletişimden gerekse buradan bu istekte bulunuyorlar. Herşeyi bir kenara bıraktım. Bununla uğraşacağım nasipse.

  3. Hocam siteniz kısmına yazdığım sitem için diyanetten namaz vakitelerini alan namaz vakti apisine ihtiyacım var. Eğer bunu benle paylaşma imkanınız varsa çok sevinirim. İyi günler.

  4. Özür dilerim ama elinde tamamlanmış, çalışır haldeolan, php veya asp/aspx dosyası olan varsa upload edebilir mi?

    1. ali bey mesajı yazarken mail adresinizi düzgün yazmış olsaydınız yardımcı olabilirdim size ancak bu durumda malesef. Ayrıca çalışan sistemi nerede kullanacağınızı da bilmek isterim. Diyanet üzerinden gereksiz veri çekilmesi diyanetin sunucularını aşırı yoruyor. Ayrıca adamlar taş devrinden kalma access veritabanı kullanıyorlar. 3 kez bağlanınca veritabanı anında şişiyor. Diyanetin sitesinden yararlanmak isteyen gerçek kullanıları mağdur etmemek adına dosya paylaşımını durdurdum. Bir API projem vardı. Bazı aksaklıklardan dolayı malesef rafa kaldırdım şimdilik. Belki bu ramazanda tekrar ele alabilirim. Diyaneti yormayacak bir sistem üzerinde çalışıyorum açıkçası.

  5. Erdem bey merhaba
    2013 yılına girdiğimizden beri bu uygulama bizim sitede çalışmaz oldu acaba 2013 ile alakalı bir durum mu yoksa başka bir problem mi var.
    Bilgi verirseniz memnun olurum.
    Hizmet ve emeğiniz için teşekkürler …

    1. Merhabalar Kamuran Bey,
      Doğrudur sınıf 2013’e girdiğimizden beri sıkıntılar çıkartıyor. Diyanetin gelen verileri doğrulaması ile alakalı bir durum bu. Giderilmeyecek sıkıntı değil. Localhostta gayet güzel bir biçimde verileri çekebiliyoruz ancak sunucu üzerine geldiğinde işler diyanet hata veriyor. Sorunu çözdüm ancak sınıfta bir takım güncellemeler yapıyorum. Hafta sonuna kadar bu sıkıntılar giderilecektir. Bir kaç gün daha istirham ediyorum sizden. Sorun çözüldü ancak sınıfta bir takım güncellemeler mevcut. Onlar ayarlanıyor.

  6. Hocam öncelikle sınıf için teşekkürler. Bu aralar sıklıkla sunucuya erişimde sorunlar oluyor. Acaba bir engelleme falan mı var, yoksa sunucu mu sürekli hata veriyor?

    1. önemli değil. evet onun ben de farkındayım. o yüzden güncelleme yapıyorum şu anda. tabiki bu sefer web servisi olarak bu sınıfı paylaşmayı düşünüyorum. ileriki günlerde yine paylaşırım. kolay gelsin.

      1. Teşekkürler hocam. Localde herhangi bir sorun olmuyor ama, server tarafında sıkıntılar var. Sanırım bir engelleme var artık.

        1. server tarafında arada bir sıkıntı oluyor farkındayım. Onun için web servisi hazırlıyorum zaten. v.2.0 da veriler ayrıştırılırken, sayfa içeriği kontrol edilmeden ayrıştırma yapmaya çalışıyorduk. Ancak şimdi v.2.1 de bu kontrol yapılıyor ve sayfadan istenilen bilgiler alınamazsa, kayıtlara hata nedeni bildiriliyor. Ufak bir ekleme ile, veriler çekilemediğinde 5 dakikalık aralıklarla sunucuyu tekrar denemesini isteyeceğim. Web serviste de json ve xml olarak dönüş vermeyi düşünüyorum. Maksat herkes faydalansın. PHP, ASP, .NET, JS gibi farklı alanlarda da kullanılabilsin. Bakalım hayırlısı.

  7. Tekrar merhaba Erdem Bey. Kusura bakmayın o soru daha önce sorulmuş. Sınıf çok güzel ve kullanışlı özellikle cache olayını düşünmeniz çok güzel olmuş çünkü diyanetin sitesi çok sık hata veriyor. Ancak ben kodu bir drop-down menu için hazırlayıp çalıştırdığımda şöyle bir durum farkettim. Şayet istek gönderildiği anda diyanet sitesinde bir hata varsa(genelde unspecified error ya da başka hatalar veriyor) gene de içinde doğru zamanların olmadığı bir dosya önbelleklenmiş oluyor, bu da şu anlama geliyor aslında veri içermeyen bir dosya cache alınmışsa bu dosya “var” olduğundan kodlar öncelikle bu dosyaya bakıyor(halbuki dosya var evet ama içinde veri yok). Ben bunu önlemek amacıyla 364. satıra bir if koşul ekledim şöyleki:
    if ($sonuclarim[0] != “”) { $fp = fopen(self::$klasor . ‘/’ . sprintf($this->dosya,self::$ulke,self::$sehir),’w’);
    fputs($fp,json_encode($array) );
    fclose($fp);
    }
    Yani “veri yoksa dosya yazılmasın” ı yapmaya çalıştım el yordamıyla ama bu kez de :
    Warning: file_get_contents(./nv_verileri/TURKIYE_EDIRNE) [function.file-get-contents]: failed to open stream: No such file or directory in /home/…………………..namazvakitleri.php on line 244 gibi bir hata aldım. (Bu hata hala diyanetin sitesinde hata devam ederken ve ben bir süre sonra 2. kez veri almaya çalıştığımda oluştu. Öneriniz nedir acaba?

    1. güzel mantık ancak o kadar uğraşmaya gerek yok! Geri dönen veride istenen değerler var mı yok mu kontrolü yapılabilir. ona göre bir ifade eklenebilir.

      aslında bunu bir web servisi olarak açmayı düşünüyorum ama elim ermedi bir türlü. tamamlayabilirsem web servisi üzerinden kullanırsınız daha sağlıklı ve sorunsuz olur.

    1. eğer öyle bir imkanımız olsa zaten bu sınıfla uğraşmazdım o kadar. yorumların tamamını okusaydınız bu sorunuzun da cevabını almış olurdunuz, aynı soru soruldu çünkü.

      dediğim gibi url olarak alabilseydik zaten file_get_contents() ile alır ve ekrana bastırıverirdik malesef.

  8. @ramazan
    phpnukenin dosya yapısını tam olarak bilmiyorum ancak sınıf size bir dizi oluşturur ve verir. diziyi alıp döngülerle istediğiniz gibi değerlendirebilirsiniz. bu sizin php bilginize kalmış. sınıf şu anda xml veri vermiyor. sınıfı v.2.0 a güncellerseniz daha kolay işlem yaparsınız. yine de v.1.0 daki xml veriyi kullanmak istiyorsanız simplexml_file_contents() fonksiyonunu kullanıp verileri yine diziye dönüştürebilirsiniz ve kullanabilirsiniz.

    ancak şiddetle v.2.0 ı kullanmanızı öneriyorum çünkü yerleşik bir önbellekleme kullanıyor sınıf. bu da işlemleri daha hızlı yapmasını sağlıyor.

  9. Bir Php nuke sitemiz var ve aylık veriler xml gorunuyor fakat örneğin denizli_namaz_vakti.php içine 1 aylık namaz vakitleri verisini ekrana nasıl gösterebilirim bu konuda yardım etmeniz mümkün tekrar çok tesekür ederm sayın erdem bey .

  10. Bu arada TURKIYE ANKARA veya baska bir sehir denedigimde yine Istanbulun namaz vakitlerini gosteriyor. nv_veriler klasordeki TURKIYE_ISTANBUL dosyasini siliyorum ama fayda etmiyor. Her seferinde Istanbul vakitlerini gosteriyor.

    Tekrar tesekkurler,
    Ali

  11. Merhaba Erdem Bey,

    HOLLANDA UTRECHT icin namaz vakitlerini alabilmek icin buyukharfler ile (ayni diyanetin sitesinde nasil yaziyorsa) asagidaki kodu yaziyorum fakat devamli Turkiye Istanbulun namaz vakitlerini gosteriyor. Nerede yanlis yapiyorum aceba yardimci olabilirmisin?

    Tesekkurler,
    Ali

    Kod:

    $ayarlar = array(
    ‘ulke’ => ‘HOLLANDA’, // Öntanımlı Türkiyedir. Belirtilmese de olur.
    ‘sehir’ => ‘UTRECHT’, // Öntanımlı Çanakkaledir. ülke ve şehir isimleri Diyanet İşleri Başkanlığının sayfasında yer aldığı gibi büyük harflerle ve TR karakter içermeyecek şekilde olmalıdır.
    ‘klasor’ => ‘nv_verileri’, // cache dosyalarının saklanacağı klasördür.
    ‘logdir’ => ‘logs’, // log dosyasının tutulacağı klasördür.
    ‘log’ => true, // log tutulup tutulmaması içindir. true ya da false değeri alır.
    );

    1. ali bey, şu anda localhost üzerinde dediğiniz gibi deneme yaptım ve sonuç çalışıyor. namaz vakitlerini çeken dosyanızın içi şu şekilde olmalı. (dosyaların isimleri ve dizinleri kendinize göre ayarlayınız.)
      <?php header('Content-type:text/html; charset=utf-8'); require_once 'namazvakitleri.php'; $nv = namazvakitleri::getInstance(); $ayarlar = array( 'ulke' => 'HOLLANDA', 'sehir' => 'UTRECHT', 'klasor' => './nv_verileri', 'logdir' => './logs', 'log' => true, ); namazvakitleri::ayarlar($ayarlar); $vakitler = $nv->al_vakit('hepsi'); print_r($vakitler); ?>

      bende bir sıkıntı çıkmıyor gayet başarılı bir biçimde de çekiyor. eğer sıkıntı devam ederse, bana kullandığınız sistemin bilgilerini ve namaz vakitlerini çektiğiniz dosyanın tam içeriğini gönderirseniz sevinirim. dosyaları herhangi bir yere yükleyip de link verirseniz daha makbule geçer. burası kod karmaşası olmasın 🙂 kolay gelsin.

  12. Merhaba Erdem Usta :D,

    Iki kelimeden olusan sehir isimlerini index.php ya nasil yazmaliyiz? Mesela BAD EMS Almaynin bir sehridir. BAD_EMS, BAD-EMS veya BADEMS seklinde denedim ama olmadi. Cozumunu paylasirsan sevinirim.

    Ellerine saglik abi,

    1. Cihan bey şehir isimlerinde boşluk varsa aralarına + koyuyoruz boşluk yerine. BAD+EMS şeklinde deneyin mutlaka çalışacaktır. Diyanet öyle kullanmış çünkü 🙂

  13. pardon kodu gerisi çıkmadı

    // < ? php if(!empty($vakitler[date('d.m.Y',time())])){

    for ($i = 0; $i

    < ?php } else {
    echo '
    Hata Var…
    ‘;
    }
    ? >

    1. hımm! oktay bey, şöyle diyebilirim, cache dosyası 27 günlük veri içeriyor, mesela diyelim 02 Nisan 2012 ye kadarki verileri almıştı daha önce. o zaman döngünüzde şöyle birşey deneyebilirsiniz: bir haftalık veri çekiyorsanız önce 1 haftanın tamamını gösterebilecek kadar veri cache dosyasında yazılı mı diye kontrol edersiz ki siz bu kontrolde Hata Var… yazmışsınız. Hata var yazmak yerine sınıfa tekrar veri çekmesini söyleyebilir ve yeniden yazılan cache dosyasından tekrar okuma yapabilirsiniz.

      bu konuda şimdilik diyebilecek fazla birşey bulamıyorum açıkçası. sınıfı güncellemek gerekebilir. şu anda üzerinde uğraştığım 1-2 proje var. daha sonra nasipse zaten bunları web servisi olarak vereceğim. o zaman daha da kolay olacaktır umarım. onun çalışmaları içerisindeyim. kolay gelsin.

  14. bir aylık veriyi çektim.1 ay önce 1 haftalık listeliyordum.ay bitmesine son 3 gün kaldı mesela sadece son 3 günü gösteriyor.Tarih veriyorum.Listeyi tekrar çekmiyor.

    //

    error_reporting(E_ALL);
    ini_set(‘display_errors’,’Off’);
    header(‘Content-type:text/html; charset=utf-8’);
    $sehir = $_GET[‘sehir’];
    require_once ‘namazvakitleri.php’;
    $nv = namazvakitleri::getInstance();

    $ayarlar = array(
    ‘ulke’ => ‘TURKIYE’, // Öntanımlı Türkiyedir. Belirtilmese de olur.
    ‘sehir’ => $sehir, // Öntanımlı Çanakkaledir. ülke ve şehir isimleri Diyanet İşleri Başkanlığının sayfasında yer aldığı gibi büyük harflerle ve TR karakter içermeyecek şekilde olmalıdır.
    ‘klasor’ => ‘./nv_verileri’, // cache dosyalarının saklanacağı klasördür.
    ‘logdir’ => ‘./logs’, // log dosyasının tutulacağı klasördür.
    ‘log’ => true, // log tutulup tutulmaması içindir. true ya da false değeri alır.
    );

    namazvakitleri::ayarlar($ayarlar);
    $vakitler = $nv->al_vakit(‘hepsi’);
    // hepsi, bugün, yarın veya dd.mm.YYYY şeklinde tarih kabul eder. eğer tarih yoksa veya yanlışsa bugünkü değeri verir. öntanımlı bugun dür.

    //

    if(!empty($vakitler[date(‘d.m.Y’,time())])){

    for ($i = 0; $i

    <?php } else {
    echo '
    Hata Var…
    ‘;
    }
    //

    1. mehmet bey, malesef diyanetten GET metodu ile veri çekemezsiniz çünkü o gönderdiğiniz parametreleri mutlaka POST metodu ile istiyor. zaten öyle olmasa bu sınıfa gerek kalmazdı 😀

  15. ‘TURKIYE’, // Öntanımlı Türkiyedir. Belirtilmese de olur.
    ‘sehir’ => $sehir, // Öntanımlı Çanakkaledir. ülke ve şehir isimleri Diyanet İşleri Başkanlığının sayfasında yer aldığı gibi büyük harflerle ve TR karakter içermeyecek şekilde olmalıdır.
    ‘klasor’ => ‘./nv_verileri’, // cache dosyalarının saklanacağı klasördür.
    ‘logdir’ => ‘./logs’, // log dosyasının tutulacağı klasördür.
    ‘log’ => true, // log tutulup tutulmaması içindir. true ya da false değeri alır.
    );

    namazvakitleri::ayarlar($ayarlar);

    $vakitler = $nv->al_vakit(‘hepsi’); // hepsi, bugün, yarın veya dd.mm.YYYY şeklinde tarih kabul eder. eğer tarih yoksa veya yanlışsa bugünkü değeri verir. öntanımlı bugun dür.

    ?><?php for ($i = 0; $i

    bu şekilde saydırdım 1 haftalık fakat son 3 günü gostermmıyor 27 gun oldu.cekmesi gerekmiyormu.30 gün olmasını mı beklemesı lazım?

    1. oktay bey, tam olarak kodlarınızı belirtir misiniz bir inceleyelim. ne yapmaya çalıştığınızı anlayamadım açıkçası.

  16. Array
    (
    [sehir] => Kocaeli
    [ulke] => Türkiye
    [24.02.2012] => Array
    (
    [imsak] => 5:10
    [gunes] => 6:36
    [ogle] => 12:21
    [ikindi] => 15:20
    [aksam] => 17:53
    [yatsi] => 19:12
    [kible] => 10:48
    )

    )

    burdan verileri nasıl çekicez

    //bu şekilde oluyor ama surekli tarih değişecek nasıl yapıcaz tesekkurler
    $imsak = $vakitler[“24.02.2012”][“imsak”];
    echo $imsak;

    1. $bugun = date("d.m.Y",now()); $imsak = $vakitler[$bugun]["imsak"]; echo $imsak;
      şeklinde bugünü çekebilirsiniz! biraz daha geliştirmek isterseniz, yarın veya bir hafta sonrası için de hesaplama yapılabilir. örneğin;
      $yarin = date("d.m.Y",now()+86400); // şu andan itibaren 1 gün sonrası 86400 saniye yapar. $bir_hafta_sonrasi = date("d.m.Y",now()+604800); // 1 haftanın saniye cinsinden değer 604800 dür.
      bu mantık ile istediğiniz tarihe gidebilirsiniz. tabiki de xml verisinin değer verdiği ölçüde 🙂

Erdem Arslan için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Güvenlik Kodu * Time limit is exhausted. Please reload CAPTCHA.

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.