RSS Haber
RSS ile düzenli olarak içerik sunan sitelere abone olabilir, içeriklerin başlık ve özetlerini alabilirsiniz.
Bu işlem için simplexml_load_file() işlevini kullanarak içeriği alıp şu şekilde ekrana basıyorum.
Özet olarak, sitenin RSS, XML vs. abonelik adresinden veriyi çekip düzenleyerek, cache klasöründe ki yarım saatte bir güncellediğim haber.js dosyama kayıt ediyorum. Gerisi zevke göre style kodlarına kalıyor.
Çalışma için haberleri Google amcadan alacağım, içeriği de bu dosyaya göre düzenleyeceğim. Diğer sitelerin dosyalarında ufak tefek farklılık olabilir, dosyayı okuduktan sonra gerisi bir şekilde düzenlenir. Mesela temel bir farklılık; rss dosyasından veri alıyorum, veriler channel etiketi altındaki itemlerde. Atom dosyalarında feed altında entry etiketinde oluyor gibi. Dosyaya göre ayarlamak lazım.
Önce rss-haber klasörümde index.php dosyası açıp kodları yazmaya başlıyorum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php date_default_timezone_set('Europe/Istanbul'); setlocale(LC_TIME, 'tr_TR.UTF-8'); setlocale(LC_ALL,'turkish'); /* İbrahim AY //ibrahimay.net (2022) */ function sayiharf($icerik) { $icerik=preg_replace("/ /", " ", $icerik); $icerik=strip_tags($icerik,""); $icerik=preg_replace("/\"/", "", $icerik); $icerik=preg_replace("/'/", "", $icerik); $icerik=preg_replace("/`/", "", $icerik); return $icerik; } |
8. satırda koyduğum fonksiyonu içeriğin description kısmını temizlemek için kullanıyorum. İhtiyaç duymazsanız eklemeyebilirsiniz. Şimdi cache tutacağım klasörü ve dosyayı ayarlayıp dosyaya 30 dakika ömür biçiyorum 🙂
16 17 18 19 |
//cache klasörü ayarlıyoruz $cachedir=dirname(__FILE__)."/cache"; if(!file_exists($cachedir)){$olustur = mkdir($cachedir);}else{} //cache klasörü yoksa oluşturuyoruz $cacdosjs=$cachedir."/haber.js"; //cache dosyamız $validity = 30*60; |
Aşağıdaki if sorgusunda sırasıyla dosya yoksa veya dosya 30 dakikadan eskiyse işlem yapmaya başlıyorum. Bu kısımda alacağım verileri ekrana basmayacağım için 22. satırda arabellek oluşturuyorum.
20 21 22 |
if (!file_exists($cacdosjs) OR (time() - filemtime($cacdosjs))>$validity) { ob_start(); |
Şimdi veri dosyasını xml değişkenine alıp item etiketlerini items değişkenine alıyorum. Buradaki items dizi (array) şeklindedir.
23 24 |
$xml=simplexml_load_file("http://news.google.com/news?pz=1&cf=all&ned=tr_tr&hl=tr&output=rss"); $items=$xml->channel->item; |
İçeriği javascript arrayında kullanmak istiyorum, bu nedenle değişkenlerimi tanımlıyorum.
25 26 27 28 29 |
echo "var rssbaslik = new Array();\n"; echo "var rssadres = new Array();\n"; echo "var rssdesc = new Array();\n"; echo "var rsstrh = new Array();\n"; echo "var rssktrh = new Array();\n"; |
Ve her girdiyi bir dizi elemanı olarak yazıyorum.
30 31 32 33 34 35 36 37 38 39 40 41 42 |
$i=0; foreach($items AS $item) { $update=$item->pubDate; $trtarih=iconv('windows-1254' , 'UTF-8' , strftime("%d %B %A %Y %H:%M", strtotime("$update"))); $ktarih=iconv('windows-1254' , 'UTF-8' , strftime("%H:%M", strtotime("$update"))); echo "rssbaslik[$i] = `".$item->title."`;\n"; echo "rssadres[$i] = `".$item->link."`;\n"; echo "rssdesc[$i] = `".sayiharf($item->description)."`;\n"; echo "rsstrh[$i] = `".$trtarih."`;\n"; echo "rssktrh[$i] = `".$ktarih."`;\n"; $i++; } |
Ekrana basmadan yazdığım içeriği cache değişkenine alıp dosyama yazıyorum.
43 44 45 46 47 48 49 50 51 52 53 |
$cache = ob_get_contents(); ob_end_clean(); //echo $cache; //<!-- js basıyoruz kayıt $cacyaz=fopen($cacdosjs , "w+"); fwrite($cacyaz , "/** CACHE START \n"); fwrite($cacyaz , "ibrahimay.net \n Sitemizden bahsetmeyi unutmayın :)\n "); fwrite($cacyaz , "Nasıl Yapılır : //ibrahimay.net/?p=514\n **/\n"); fwrite($cacyaz , $cache); fwrite($cacyaz , "\n/** CACHE END **/ \n"); fclose ($cacyaz); |
Dosya yoksa veya eski ise bu işlemleri yapayım diye if açmıştım, kapatıyorum.
55 56 57 |
} else{} ?> |
Dosyayı tarayıcıda açtığımda boş sayfa görmekle beraber cache klasöründe haber.js dosyam oluşmuş oluyor (olmalı). Bu dosyayı güncelenerek kullanmak için yine bu index dosyasını kullanacağım demiştim. Şöyle yapıyorum.
58 59 60 61 62 63 64 |
<?php if(isset($_GET["tip"]) AND $_GET["tip"]=="js") { header("Content-type: text/javascript; charset=utf-8"); require_once("$cacdosjs"); } ?> |
Böylece index adresimin sonuna ?tip=js yazarak javascript dosyası gibi ekleyebiliyorum.
1 |
<script type="text/javascript" src="/rss-haber/index.php?tip=js"></script> |
Bu scripti eklediğimde içindeki değişkenleri ayarladığım tasarımın içine atıyorum. Dikkat edeceğim şey inner.html kullandığım için bu scripti içeriği göstereceğim yerden sonra eklemeliyim. Yukarıda gördüğünüz örnek için kullandığım kodlar şöyle:
1 2 3 4 5 6 7 8 9 10 11 |
<a href="//ibrahimay.net/?p=514" target="_blank" title="Nasıl Yapılır?">Haberler</a><br> <link rel='stylesheet' href='/rss-haber/styles/style.css'> <div id='rssdiv'> <marquee id='rsshaber' direction='up' scrollamount='3' onmouseover='this.stop();' onmouseout='this.start();'> <ul id='rssuliki'><ul> </marquee> </div> <script type="text/javascript" src="/rss-haber/index.php?tip=js"></script> <script>for (let i = 0; i < rssbaslik.length; i++) { document.getElementById('rssuliki').innerHTML += `<li><a target='_blank' href='`+rssadres[i]+`' title='`+rssdesc[i]+`'>`+rssbaslik[i]+`</a><small> `+rssktrh[i]+` </small></li>\n`;}</script> |
Yukarıda dizi şeklindeki içeriğimi teker teker li etiketinde rssuliki idli ul içine eklemiş oldum. Title kısmına descriptionu ekleyebildim. İlk başta koyduğum fonksiyon title gösterimine engel olan işaret, tag vs hepsini sildi. Kaçırdığım bir işaret vs varsa da henüz denk gelmedim, böyle iyi gidiyor şimdilik.
2. satıra tasarım için kullandığım style dosyasını ekledim, buraya yazsam da olurdu. Örnekteki için style kodlarım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#rsshaber { --anawid:80%; --anahei:200px; --ulbcolor:""; --libcolor:""; --acolor:#000000; --fofam:Tahoma; --fovant: small-caps; --fosz: 0.8em; } #rssdiv {border: 0px solid var(--acolor); height:var(--anahei); width:var(--anawid); background:var(--ulbcolor); display:block;} #rsshaber {border: 0px solid var(--acolor); height:var(--anahei); width:var(--anawid); background:var(--ulbcolor);} #rsshaber ul {list-style-type:none; margin:0; padding:0; background:var(--ulbcolor);} #rsshaber ul li {background:var(--libcolor); border-bottom:1px solid var(--acolor); margin:0; padding:0;} #rsshaber ul li::first-letter {font-size:calc(var(--fosz)*2);} #rsshaber ul li a {text-decoration:none; color:var(--acolor); font-size:var(--fosz); font-family:var(--fofam);} #rsshaber ul li small {color:var(--acolor); font-family:var(--fovant);} |
İşlem bu kadar.
Değişik örnekler için demolar sayfama bakabilirsiniz.Hazır dosyaları indirmek isterseniz :
Dosyalar üyelere özeldir: Giriş Yap
Yeni misin? Kayıt ol