Codeigniter RSS

Codeigniter framework kullanılarak yapmış olduğum rss oluşturma ve spor internethaber sitesinden çekilen futbol haberlerinin olduğu bir uygulamayı paylaşıyorum.

Uygulamanın kaynak kodlarına github hesabım üzerinden erişebilirsiniz.

Uygulama içeriği

Uygulamayı anlatacak olursak ilk önce her zaman codeigniter ile uygulama oluşturduğumuz gibi standart düzenlemeleri yapıyoruz.Feed controller ana controller olup aşağıdaki gibi tanımladık.Ana controller tanımlamak için config/routes.php kısmından default controllerımızı feed olarak belirledik.Construct kısmında yani controller ilk çağrılında işlem yapacak olan kısmımızda xml helperı ve model (database)’i çağırdık.Autoload.php dosyamızda daha önceden her zaman çağrılacak şekilde tanımladığımız database kütüphanesini , text,html ve url helperlarını çağırmıştık.

index fonksiyonumuz bizim uygulama browserdan çağrılınca gelecek fonksiyonumuzdur.Buradan ulaştığımız view anasayfamızdır oradaki gerekli yönlendirmelerle rss oluşturucu veya haber çekilen kısımlara ulaşabiliyoruz.

Create fonksiyonumuzda rss oluşturmak için gerekli tanımlamaları dizi olarak tanımlayıp , $this->load->view(‘rss’,$data); olarak rss viewe atıyoruz.

$data[‘posts’] = $this->post->getPosts() bu kısımda veritabanında rss oluşturmak için kaydettiğimiz verilerimizi elde edip data dizisi içine attık.

xmlparse() kısmında haberleri çekeceğimiz kısıma yönlendirme işlemi yapmaktadır.O kısımda yapacağımız işlemleri view dosyasında yapacağız o yüzden ana kontrollerda sadece oraya yönlendirme işlemi yaptık.

Feed.php (main controller)

class Feed extends CI_Controller {
 
 public function __construct() {
    parent::__construct();
    $this->load->helper(array('xml'));
    $this->load->model('Post_model', 'posts');
 }
 
 public function index(){
    $this->load->view('index');
 }
 
 public function create(){
    // standart tanımlamaları yaptık.
    $data['feed_name'] = 'asd.com';
    $data['encoding'] = 'utf-8';
    $data['feed_url'] = 'http://www.asd.com/feed';
    $data['page_description'] = 'some text bla bla';
    $data['page_language'] = 'en-en';
    $data['creator_email'] = 'ekiny018@gmail.com';
    // veritabanından verileri çektik.
    $data['posts'] = $this->posts->getPosts();
    // bu kısmı eklemezsek düzenli olarak rss gözükmez.
    header("Content-Type: application/rss+xml;");
 
    $this->load->view('rss',$data);
 }
 
 public function xmlparse(){
    $this->load->view('xmlparse');
 }
 
}

Post_model.php (database)

class Post_model extends CI_Model {
    function getPosts($limit = NULL){
       return $this->db->get('posts',$limit);
    }
 }

Active record sınıfını kullanarak veritabanından verilerimizi çekiyoruz.Limitin değerini null olarak tanımladık istersek kaç tane veriyi çekebileceğimizi belirtebiliriz.

Rss.php

<?php echo '<?xml version="1.0" encoding="' . $encoding . '"?>' . "\n"; ?>
<rss version="2.0"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/">
 
 <channel>
 
 <title><?php echo $feed_name; ?></title>
 
 <link><?php echo $feed_url; ?></link>
 <description><?php echo $page_description; ?></description>
 <dc:language><?php echo $page_language; ?></dc:language>
 <dc:creator><?php echo $creator_email; ?></dc:creator>
 
 <dc:rights>Copyright <?php echo gmdate("Y", time()); ?></dc:rights>
 <admin:generatorAgent rdf:resource="http://www.codeigniter.com/" />
 
// foreach ile diziye attığımız posts değerlerini yazdırdık.
 <?php foreach($posts->result() as $post): ?>
 
 <item>
 
 <title><?php echo xml_convert($post->title); ?></title>
 <link><?php echo $post->id; ?></link>
 <guid><?php echo $post->id; ?></guid>
 
// önemli kısım
 <description><![CDATA[ <?php echo character_limiter($post->text, 200); ?> ]]></description>
 <pubDate><?php echo $post->date; ?></pubDate>
 </item>
 
 
 <?php endforeach; ?>
 
 </channel>
</rss>

Xmlparse.php

Haberleri çekmek istediğimiz yerden simplexml_load_file metodu ile çekip gerekli her bilgiye ulaşabiliyoruz.Veriler çekeceğimiz xml dosyasının görüntüsü aşağıdaki gibidir.

xml

$news->channel->item diyerek tüm tanımlanan itemları ulaşıyoruz.Itemlardaki içeriklere ->title , ->link diyerek ulaştık

<ul class="menu">
 <div class="haber">
 <?php 
 $news = simplexml_load_file('http://spor.internethaber.com/rss/futbol.rss');
 $count = 0;
 foreach ($news->channel->item as $newsinfo):
 if($count == 10){
 break;
 }
 $title = $newsinfo->title;
 $link = $newsinfo->link;
 echo '<li><div class="title"><a href='.$link.'>'.$title.'</a></div></li>';
 $count++;
 endforeach;
 ?>
 </div>
 </ul>

 Ekran Görüntüleri

index
index.php
rss.php
rss.php

 

 

haberxml
haberxml.php

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s