Nöbetçi Eczaneler Uygulaması

Aşağıda demo ve indirme linki vereceğim uygulama da HTM sayfa içerisindeki günün Nöbetçi eczane ve yerleşim birimini,  alarak ekrana yansıtacağız.

Önemli: Bazı iller sistemde kayıt edilmemiş, o nedenle sonuç boş dönebilir.

ANA SCRIPT

<?php
/*
Author: Sinan Tekmil
Author URI: http://www.veblebi.com/
Script URI: http://www.veblebi.com/nobetci-eczaneler-uygulamasi/
v :1.0;
*/
$iller = array(
	0=>'İl Seçiniz', 1=>'ADANA', 2=>'ADIYAMAN', 3=>'AFYON', 4=>'AĞRI', 5=>'AMASYA', 6=>'ANKARA', 7=>'ANTALYA', 8=>'ARTVİN', 9=>'AYDIN', 10=>'BALIKESİR', 11=>'BİLECİK', 12=>'BİNGÖL', 13=>'BİTLİS', 14=>'BOLU', 15=>'BURDUR', 16=>'BURSA', 17=>'ÇANAKKALE', 18=>'ÇANKIRI', 19=>'ÇORUM', 20=>'DENİZLİ', 21=>'DİYARBAKIR', 22=>'EDİRNE', 23=>'ELAZIĞ', 24=>'ERZİNCAN', 25=>'ERZURUM', 26=>'ESKİŞEHİR', 27=>'GAZİANTEP', 28=>'GİRESUN', 29=>'GÜMÜŞHANE', 30=>'HAKKARİ', 31=>'HATAY', 32=>'ISPARTA', 33=>'MERSİN', 34=>'İSTANBUL', 35=>'İZMİR', 36=>'KARS', 37=>'KASTAMONU', 38=>'KAYSERİ', 39=>'KIRKLARELİ', 40=>'KIRŞEHİR', 41=>'KOCAELİ', 42=>'KONYA', 43=>'KÜTAHYA', 44=>'MALATYA', 45=>'MANİSA', 46=>'KAHRAMANMARAŞ', 47=>'MARDİN', 48=>'MUĞLA', 49=>'MUŞ', 50=>'NEVŞEHİR', 51=>'NİĞDE', 52=>'ORDU', 53=>'RİZE', 54=>'SAKARYA', 55=>'SAMSUN', 56=>'SİİRT', 57=>'SİNOP', 58=>'SİVAS', 59=>'TEKİRDAĞ', 60=>'TOKAT', 61=>'TRABZON', 62=>'TUNCELİ', 63=>'ŞANLIURFA', 64=>'UŞAK', 65=>'VAN', 66=>'YOZGAT', 67=>'ZONGULDAK', 68=>'AKSARAY', 69=>'BAYBURT', 70=>'KARAMAN', 71=>'KIRIKKALE', 72=>'BATMAN', 73=>'ŞIRNAK', 74=>'BARTIN', 75=>'ARDAHAN', 76=>'IĞDIR', 77=>'YALOVA', 78=>'KARABÜK', 79=>'KİLİS', 80=>'OSMANİYE', 81=>'DÜZCE'
);
$varsayilan = 0; // ilk acilista hangi il ile baslamasini isterseniz, plaka kodunu rakam olarak yazin..
?>
<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#" dir="ltr" lang="tr-tr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Nöbetçi Eczaneler</title>
<style>
.n-container {width:100%;text-align:center}
#frm_nobetci select {padding:3px;margin-bottom:6px}
#frm_nobetci button {background:#00B3B3;padding:6px;border:1px solid #00A6A6;cursor:pointer;color:#fff;}
#frm_nobetci button:hover {background:#008C8C;}
#frm_nobetci button:active {background:#00A6A6;}
#sonuc {font-size:14px;margin-top:10px;}
#sonuc h4 {margin:0;padding:3px}
#sonuc table {border-collapse: collapse;margin:0 auto;}
#sonuc table th{padding:3px;background:#F9F9F9;border:1px solid #eee}
#sonuc table td{padding:3px;border:1px solid #eee}
</style>
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="region.js"></script>
<script>var $ = jQuery.noConflict();</script>
</head>
<body>
<div class="n-container">
<form id="frm_nobetci"  method="post">
<select id="il" name="il">
<?php foreach($iller as $key => $il ):?>
<?php $slc = ($varsayilan == $key) ? ' selected="selected"':null;?>
<option value="<?php echo $key?>"<?php echo $slc?>><?php echo $il?></option>
<?php endforeach?>
</select>
<br>
<select id="ilce" name="ilce" style="display:none"></select>
<br>
<button type="submit">Getir</button>
</form>
<div id="sonuc"></div>
</div>
<script>
function ilce_getir(il_id) {
	$( "#ilce" ).html("");
	if(il_id > 0 ) {
		var db = regiondb[il_id];
		$( "#ilce" ).append( "<option value=\"\">İlçe Seçiniz</option>" );
		for (var i = 0; i < db.length; i++) {
			$( "#ilce" ).append( "<option value=\""+db[i].value+"\">"+db[i].text+"</option>" );
		}
		$( "#ilce" ).show(300);
	} else {
		$( "#ilce" ).hide(300);
	}
}
$( "#il" ).change(function() {
	var il_id = parseInt($(this).val()) || 0;
	ilce_getir(il_id);
});
// Form submit
$( "#frm_nobetci" ).submit(function(event) {
	var il= parseInt($("#il").val()) || 0;
	var ilce= parseInt($("#ilce").val()) || 0;
	if(il < 1 ) {
		alert('Lütfen İl Seçiniz');
		return false;
	}
	if(ilce < 1 ) {
		alert('Lütfen İlçe Seçiniz');
		return false;
	}
	var yol = 'curl.php';
	$.ajax( {
		type: "POST",
		url: yol,
		data: $(this).serialize(),
		success: function(cevap) {
			$('#sonuc').html(cevap);
			$('#sonuc').show(200);
		}
	});
	event.preventDefault();
});
</script>
<?php if($varsayilan):?>
<script>ilce_getir(<?php echo $varsayilan?>)</script>
<?php endif?>
</body>
</html>

CURL

<?php
/*
Author: Sinan Tekmil
Author URI: http://www.veblebi.com/
Script URI: http://www.veblebi.com/nobetci-eczaneler-uygulamasi/
v :1.0;
*/

$url = 'http://e-nobet.org/ne_nobetler.php';
if(isset($_POST['il']) && $_POST['il']) {
	$postvars = '';
	extract($_POST);
	$postvars = 'listele=1&il='.$il.'&ilce='.$ilce;
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$url);
	curl_setopt($ch,CURLOPT_POST, 1);
	curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
	curl_setopt($ch,CURLOPT_TIMEOUT, 20);
	$response = curl_exec($ch);
	curl_close ($ch);
	$response =  iconv("ISO-8859-9","UTF-8", $response);
	//
	$test = str_replace(array('</tr>', '</td>' ),array('[tr]', '[td]' ), $response);
	$test = strip_tags($test);
	$exp = explode('[tr]',$test);
	$baslik = $ust = $alt = null;
	if($exp) {
		foreach($exp as $key => $v ) {
			$v = trim($v);
			if($v) {
				if($key == 0 ) {
					$baslik = '<h4>'.str_replace('[td]',null, $v).'</h4>';
				}
				elseif($key == 1 ) {
					$exp_th = explode('[td]',$v);
					if($exp_th) {
						foreach($exp_th as $key1 => $th_v ) {
							if($key1 < 5 && $key1 > 0 )
							$ust .= '<th>'.$th_v.'</th>';
						}
					}
				}
				elseif($key > 1 ) {
					$exp_td = explode('[td]',$v);
					if($exp_td) {
						foreach($exp_td as $key2 => $td_v ) {
							if($key2 < 5 && $key2 > 0 ) {
								if($key2 == 1 ) $alt .= '<tr>';
								$alt .= '<td>'.$td_v.'</td>';
								if($key2 == 4) {
									$alt .= '</tr>';
								}
							}
						}
					}
				}
			}
		}
		$ust = '<tr>'.$ust.'</tr>';
		echo $baslik.'<table>'.$ust.$alt.'</table>';
	}
}
?>

Nasıl Yaptık?

ilgili sitede veriler AJAX, Javascript yoluyla ve ancak POST ile çekildiği için klasik veri okuma ve işleme şansımız yoktu. Önce İl ve ilçe seçimini sağlayacağımız ve verileri POST edebileceğimiz FORM alanını oluşturduk.

Daha sonra form submit eventini yazdık, ve verileri curl.php’ye gönderdik. Uzak adres olduğu için POST işleminde ajax erişim kısıtlaması(CROSS, access origin) vardı, yani yabancı UR den post işlemine kapalıydı, erişim belirtilmemişti, bu nedenle normal yoldan POST edebilmek için CURL kullandık.

Dönen veriyi de bir div alanına yansıttık, css ile biçimlendirdik ve işlemi bitirdik.

Demoyu Görmek için Tıklayın.  Uygulamayı indirmek için Tıklayın.

17 Yorum

  1. Hocam Merhabalar,
    SSl kurulu bir internet sitesinde görüntüleme yapılmıyor ama sebebi nedir acaba beyaz sayfa var gözükmüyor.ve İframe ile ssl kurulu bir sayfaya çekemiyorum sebebi ne olabilir acaba.Teşekkürler İyi çalışmalar

  2. hocam elinize sağlık güzel olmus lakin getir tusuna tıklamadan yani direkt olarak gelme sansı yokmu şimdi bunu ben web sitenin bir kısımında kullanıcam sayfada hani orada direkt olarak koddan belirlediğim il ilçenin nöbet çizelgesi çıksın istiyorum.Kullandığım sistem wordpress.İlginiz için çok teşekkür ederim hocam.

    1. Demoyu incelediniz mi? Zaten öyle, sitenizde nasıl kullanacaksınız tasarımı değiştirmek vb kalıyor geriye..

  3. Yada Hocam Şöyle Bir çalışma yapabilirmiyiz bir panel olucak oradan eczaneleri giricez.
    Atiyorum 10 tane eczane var Bunları Sırayla Tekrarlayacak Gün gün ataması olucak Sonra Tekrar Yenileyecek
    Nöbetçi Eczanedede Mantık Böyle İşliyor.
    Eczane1
    Eczane2
    Eczane3
    Eczane4
    Eczane5
    Eczane6
    Eczane7
    Eczane8
    Eczane9
    Eczane10
    Eczane1
    Eczane2
    Eczane3
    Eczane4
    Eczane5
    Eczane6
    Eczane7
    Eczane8
    Eczane9
    Eczane10
    Şeklinde hocam

    1. Sistem ajax’a geçmiş. O nedenle klasik biçimde verileri almak mümkün değil. Neyse CURL yöntemiyle çalışan uygulamayı yukarıda ön izleyebilir ve indirebilirsiniz…

      1. Üstadım elinize sağlık çok güzel bir uygulama olmuş tebrik ederim.Bunda direk olarak il ve ilçe seçili olarak gelip orada nöbetçi eczane çıkabilirmi acaba?
        ili buldum acıklamasını yazmıssınız teşekkür ederiz ilçeyi yapamadım yalnız.

    1. Evet bütün illere uygulanabilir, yalnız şu süreçte vakit ayıramam. Daha sonrası için bir örnek yapabilirim. Aslında tüm eczaneler ve nöbet listesi için basit bir script yazmayı düşünüyorum, dileyen sitesine de ekleyebilir, ama vakit alacağı için kısa zamanda yapma şansım yok.

  4. MErhabalar,
    Öncelikle yapmış olduğunuz uygulama çok güzel böyle bir çalışma için sizi tebrik ederim.Lakin sadece istanbul için olması kötü Acaba Diğer İllerede bu uygulamayı yapmanız mümkünmüdür hocam?
    Teşekkürler.
    İyi Çalışmalar Dilerim…

    1. Mümkündür lakin zaman ve uğraş sitiyor haliyle bu örnekte amacım file_get_contents, preg_match ve preg_replace kullanımına örnek vermekti.
      Aynı yol ve yöntemlerle aşağıdaki listede verilen bölge eczazeneler nöbet listelerinden veri alınabilir. Herhangi bir standarda sahip olmadıkları için hepsi de teker, teker uğraş gerektiriyor. Tüm link adresleri bölge, bölge kaydedilecek, ilgili İl ya da ilçenin seçime bağlı olarak, hangi bölgede olduğu tespit edilecek ve ona ait link adresi esas alınacak, okunacak ve ekrana yansıtalacak….

      Bölge Listesi

    1. Merhaba

      Eksik bıraktığım bir yer olmuş. Sabah 9:00 ile 9:06 arası sistem okuma işlemi yapıyor. O aralıkta siteye kimse girmez ise ne olacak 🙂 09:06 dan sonra zaten okuma işlemi yapmıyor, haliyle 09:00 – 09:06 aralığında script çalışmamışsa dosya evvel bir tarihe ait olur.

      Bu sorunu da dosyanın tarihine bakarak çözebiliriz, saat atıyoum 10 script çalıştı, ama dosya tarihi düne ait, o halde dünkü yerel dosya okunacak. Üstte bu soruna çözüm üreten kodları ekledim ve ayrıca zip dosyasını da güncelledim.

      Şimdi artık saat 9 ile 11 arası işlem yapıyor. Mesai başladığında artık nöbetçi eczane durumu kalmıyor, tüm eczaneler açılıyor. 9 dan evvel bakan insanlar aslında hala dünü görecekleri için böyle bir uyarı yoluna gitmiştim.

      XML yayını olsa ve tarih belirtilseydi, böyle bir sorunumuz olmazdı 🙂

      Teşekkürler.

hakan dündar için bir yanıt yazın Yanıtı iptal et

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