PHP ile eşzamanlı deprem bilgileri

WildWolF

New member
Katılım
18 Haz 2005
Mesajlar
285
Reaction score
0
Puanları
0
Selam ile

Bu dökümanda sizlere " Php ile Eş Zamanlı Deprem Bilgileri " ' ni gösteren bir script yapımını anlatacam. Bu kodları web sayfanıza include ederek yada copy-paste yaparak istediğiniz şekilde yerleştirebilirsiniz. Bu konu ile ilgili 3 tane görüşümü belirtmek istiyorum.

1 - Bu scripti sayfanıza koyarak " bir deprem bölgesi olan ülkemizde "deprem bilincini insanlara her zaman hatırlatmış olacaksınız. Bu dediklerimi insanları huzursuz yapma gibi bir anlayışla anlıyorsanız; öncelikle Prof. Dr. Işıkara yı biraz daha dinlemenizi istiyorum.

2 - Buradaki temel fikir internet üzerinden herhangi bir sayfadaki dosyayı hafızaya alarak ; bu sayfadaki bilgiler üzerinde işlemler yapmaktan geçer. Bizim kullanacağımız dosya düz metin benzeri bir dosya olduğundan dolayı işimiz gayet kolaydır. Sayfanın sonunda sizelere bir çok html ve script kodlarının bulunduğu sayfalarda nasıl işlem yapılacağını dair ipuçları vericem.

3 - Bu script e ele alınan konu son deprem bilgileridir. Fakat kullanılan teknik ile; son döviz kurları, borsa bilgileri, spor ligleri, piyango sonuçları gibi pek çok güncel bilgilere ulaşabilirsiniz. İleride bu teknik ile ilgili dökümanlar yazmayı düşünüyorum.

Not : Bu script ile Kandilli Rasathanesi tarafından bildirilmiş olan en son güncel deprem bilgilerine ulaşabilirsiniz. Yani deprem bilgilerini sizin girmeniz gerekmiyor. ( Url : http://www.koeri.boun.edu.tr/scripts/sondepremler.asp )

Not : Scripti çalıştırdığınızda " Fatal error: Maximum execution time of 30 seconds exceeded in x:\xxxxx\apache\htdocs\xxxx\deprem2.php on line 7 " bu türde bir hata alırsanız. Anlıycağınız gibi bağlantı yavaşlığından işlem hedefe ulaşamadığı için sona vermiş. Bunu php.ini den ayarlıyabilirsiniz.

Şimdi asıl olaya girelim ve hemen kodlarımızı yazmaya başlıyalım. Ben aşağıda bu iş için en sade kodu anlatıcam, fakat altta bu kodlar ile geliştirdiğim diğer scriptlere ulaşabilirsiniz.
Deprem1.php ( Orjinal Kodlar )
Deprem2.php ( Table içindeki kodlar )
Deprem3.php ( Java Script ile kayan yazı şeklindeki kodlar )

PHP:
<?

$sayfa = file ('http://www.koeri.boun.edu.tr/scripts/sondepremler.asp');


while (list ($satir, $deger) = each ($sayfa)) {
if($satir == 48 || $satir == 49 || $satir == 50 || $satir == 51 || $satir == 52 )
 {

$sonucsatiri = split(" ", $deger);

$tarihbilgisi = split("\.", $sonucsatiri['0']);
$saatbilgisi = split(":", $sonucsatiri['1']);
$depremsiddeti = $sonucsatiri['24'] . $sonucsatiri['25'];
$yer = $sonucsatiri['30'] . $sonucsatiri['31'];

echo $tarihbilgisi['2'] . "-" . $tarihbilgisi['1'] . " tarihinde ";
echo $saatbilgisi['0'] . ":" . $saatbilgisi['1'] . " saatinde ";
echo $depremsiddeti . " siddetinde ";
echo $yer . " bölgesinde ";

echo "<br>";

}
}

?>

Şimdi satır satır kodlarımızı inceleyelim ve konuyu anlayalım.

$sayfa = file ('http://www.koeri.boun.edu.tr/scripts/sondepremler.asp'); // bu satır ile $sayfa adında bir değişken atıyoruz. Bu değişkenin değeri içinse php deki file fonksiyonunu kullanarak http://www.koeri.boun.edu.tr/scripts/ adresindeki sondepremler.asp dosyasının içeriğini alıyoruz.

while (list ($satir, $deger) = each ($sayfa)) { // bu satır ile php deki döngü fonksiyonlarından biri olan while() ile bir döngü başlatıyoruz. Bu sayede $sayfa değişkeninin tüm içeriği bitene kadar satır satır işleme fırsatı bulucaz. Parantez içindeki list() ve each() fonksiyonları ile satırlardaki değerleri değişken dizelerine atıyoruz. Bu konu aslında karışık bir konu ama scriptimiz ilerledikçe konuya daha hakim olacaksınız.

Burada kısa bir ara verip bazı açıklamalar yapmam gerekiyor. http://www.koeri.boun.edu.tr/scripts/sondepremler.asp bu adrese girdiğiniz zaman. Karşınıza Kandilli Rasathanesi tarafından hazırlanmış son deprem bilgilerini içeren güncel bir sayfa görüceksiniz. Dikkat ettiyseniz sayfa düz bir metin gibi hazırlanmış.

Bizim yapacağımız kodlar ile bu sayfada son deprem bilgilerinin bulunduğu satırları değişkenlere atamak ve bunları ekrana bastırmak. Bu teknik ile benzer türdeki sayfalarda istediğiniz işlemi yapabiirsiniz. ( Ör : Piyango sonuçları, borsa, döviz kurları vs. vs. )

Şimdi kodlarımıza devam edelim.

if($satir == 48 || $satir == 49 || $satir == 50 || $satir == 51 || $satir == 52 ) { // bu satır bir koşul satırıdır. Bunun için if() fonksiyonunu kullanıyoruz. Yukarıda biraz bahsettiğim gibi list komutu ile satırlara $sayfa ( each ($sayfa) ) deişkeninden gelen dizeler ile satır numarası ( $satir ) ve değerler ( $deger ) vermiştik. Yani bizim istediğimiz satır numarası okunduğu anda if() koşul unun altındaki işlemleri yap diyoruz.

if() fonksiyonu ile biraz uğraşanlar bilecektir; $satir == 48 || $satir == 49 || $satir == 50 || $satir == 51 || $satir == 52 burada satır numarasının 48 ( $satir == 48 ) veya ( || ) 49 veya vs... ile 52 olması halinde if() koşulunun { } arasındaki işlemleri yap diyoruz.

48 ile 52 arasındaki satırlarda bize lazım olacak olan son 5 deprem bilgisi bulunduğu için bu şekilde ayarladık. Eğer size son 3 deprem gerekseydi ne yapmanız gerektiğini sanırım artık anladınız :)

$sonucsatiri = split(" ", $deger); // normal olarak $değer değişkenin değeri while() döngüsünün her tekrarında;

2002.03.28 01:03:20 38.6295 30.9337 5.5 3.1 ÇAY (AFYON)

yukarıdaki gibi dir. Bize gerekli olanlar kısaca Tarih, Saat, Deprem Şiddeti ve Bölgesi dir. Böyle bir satırda istediğimiz bilgileri almak için , yukarıdaki satıra baktığımızda en uygun yöntemin satırı boşluklarına bölmek ve her boşluk öncesindeki değeri bir değişkenin dizesine atamaktır. ( Ör. Dize : $degisken['dize'] )

Deprem bilgi satırlarını boşluklarından bölmek için ve her boşluk öncesindeki - sonrasındaki bilgileri değişken dizelerine atamak için split() fonksiyonunu kullanıyoruz.

$sonucsatiri = split(" ", $deger); // burada split(" " kısmı ile " " işaretleri arasına boşluk bırakarak boşluklardan böldük. Eğer "." şeklinde yapsaydık satırdaki bilgileri . ( noktalardan ) bölerdi.

Sonuç olarak bu satır ile $deger değişkenindeki satırı split yardımı ile boşluklarından böldük ve $sonucsatiri değişkeninin dizelerine atadık.

$tarihbilgisi = split("\.", $sonucsatiri['0']); // burada yukarıdaki koddan gelen $sonucsatiri değişkeninin 0 . dizesinde bulunan değeri $tarihbilgisi değişkenine atadık. Bu da 2002.03.28 değerinin split ile . ( nokta ) larına bölünmüş halidir. ( 2002 yıl bilgisi bize lazım olmadığı için . ( nokta ) lardan bölerek sadece ay ve gün bilgisini alıcaz. ) ( Buı işlemler ile dizelerden gelen değerleri tekrar yeni bir değişkenin dizelerine atıyoruz. )

$saatbilgisi = split(":", $sonucsatiri['1']); // bu satırda $sonucsatiri değişkeninin 1. dizesinde bulunan ( 01:03:20 ) değeri aldık ve yine tarihte olduğu gibi saniye bilgisini çıkarmak için split() ile ":" ( ikinokta ) larından böldük. Ve bu değeri $saatbilgisi değişkeninin değerine atadık. ( Buı işlemler ile dizelerden gelen değerleri tekrar yeni bir değişkenin dizelerine atıyoruz. )

$depremsiddeti = $sonucsatiri['24'] . $sonucsatiri['25']; // bu satır yardımı ilede boşluklarına bölünmüş satırın 24 ve 25 . boşluklarındaki deprem şiddeti bilgilerini aldık ve $depremsiddeti değişkenine atadık. Deprem şiddeti rakamının arasında boşluk olmadığı halde neden 24 ve 25 . dizeleri aldığımızı anlıyabilirmisiniz?

Hemen söliyim bazen depremin derinliği çift basamaklı bir sayı olduğundan boşluklar deişiyor bu yüzden yanlış bir dize elde etmemek için her ikisinide giriyoruz. Derinlik tek yada çift basamaklı olsa bile her zaman doğru sonuç elde edebiliriz.

$yer = $sonucsatiri['30'] . $sonucsatiri['31']; // bu satır ilede deprem bölgesini anıyoruz. ÇAY (AFYON) satırında iki boşluk olduğu için 30 ve 31. boşluk sonrası değerleri alıyoruz.

echo $tarihbilgisi['2'] . "-" . $tarihbilgisi['1'] . " tarihinde "; az önce bahsettiğimiz ; hani yıl bilgisinin bize gerekmediği için split() ile böldüğümüz bir tarih değeri vardı. İşte bu değerin 2. ve 1. dizesi ay ve gün değerine denk geldiği için bu şekilde echo() komutu ile ekrana bastırdık.

Eğer konuya hakim olduysanız;

echo $saatbilgisi['0'] . ":" . $saatbilgisi['1'] . " saatinde ";
echo $depremsiddeti . " şiddetinde ";
echo $yer . " bölgesinde ";

bu satırlarda artık ne yaptığımızı anlamışsınızdır.

Sonuç olarak buna benzer uygulamalar yaparken herzaman düz metin girdileri bulamıyabilirsiniz işte bunun için aşağıda size bir kaç önerim olucak.

1 - While() döngüsü içine echo "$satir: " . htmlspecialchars (strip_tags($deger)) . "\n"; gibi bir satır eklerseniz. Html kodlarından arındırılmış ve satır satır size içeriği gösteren bir çıktı elde edersiniz.

2 - Web sayfalarında göze hoş gelmesi için genellikle table lar ve çeşitli html kodları kullanılmaktadır. Eğer 1. ipucunda sölediğim taktik ile bunun üstesinden gelemiyorsanız table lar için kullanılan <td> kelimlerini aratabilir ve onları baz alarak işlem yapabilirsiniz. Aynı şey <script> kelimelerindede geçerlidir.

3 - Çıktı için baz aldığınız sayfalardaki değişikliklerden ( satır numarası, table değişikliği vs. ) etkilenmemek için mümkün olduğunda basit ve etkili kaynaklar bulunuz.
 
üzgünüm kod çalışmıyor :(
 
kardes anlattigin sey bayagi yararli oldu ama okuma ve deneme yanilmalar galiba 1 hft alir simdilik biraz basmadi kafa ama bana acil mac sonuclari ve dunya ligleri nin bir(livescore.............vb) herhangi bir siteden alinmis duzenlenmis html kodlari lazim galiba senin icin bir kac dakka alir bana yazabilirmisin tesekkurler buradan veya kendi forumum olan www.candancerit.phpBB2 den yazabilirsin yapmasanda tesekkurler
 
kardes anlattigin sey bayagi yararli oldu ama okuma ve deneme yanilmalar galiba 1 hft alir simdilik biraz basmadi kafa ama bana acil mac sonuclari ve dunya ligleri nin bir(livescore.............vb) herhangi bir siteden alinmis duzenlenmis html kodlari lazim galiba senin icin bir kac dakka alir bana yazabilirmisin tesekkurler buradan veya kendi forumum olan www.candancerit.info/phpBB2 den yazabilirsin yapmasanda tesekkurler
 
<?
$sayfa = file ('http://www.koeri.boun.edu.tr/scripts/sondepremler.asp');

echo "<pre>";
for($ii=74; $ii<280; $ii++) {
echo $sayfa[$ii];
}
echo "</pre>";
?>
 
Geri
Üst