PHP Dersleri

PHP ile Dinamik RSS Yapımı

Bu makalede, PHP Programlama dilinde dinamik bir şekilde RSS XML beslemesinin nasıl yapılacağından bahsedeceğim. Bu işlemi PHP içerisinde yer alan DOM nesnesi ile oluşturacağız.

RSS Nedir?

RSS beslemesi, web sayfasına eklenen yeni içeriklerin belirli bir düzen doğrultusunda sunulmasını sağlayan XML yapıdır. Bu yapının amacı, RSS okuyucu ile bir çok sitenin bilgilerinin bir yerde toplanması ve onlarca siteyi gezmeden güncel bilgilerden haberdar olmanızdır. Standar bir yapısı olduğu içinde belirli kurallar doğrultusunda yapı oluşturulmalı ve sunulmalıdır.

DOMDocument Sınıfı İl RSS Oluşturma

PHP Programlama dili ile Rss beslemesi oluşturmak için DOMDocument sınıfını kullanacağız. Bu sınıfı kullanmak zorunda değilsiniz fakat bu tarz işlemler için oldukça kolaylık sağlamakta. Bu yapıyı oluşturmak için pek tabiki de hazır bir veritabanı ve tablo olmalı. Bunun sizde zaten hazır olduğunu düşünerek bu bölümü atlıyorum.

Veritabanı Bağlantısı Oluşturma

RSS besleesi oluşturmak için ilk olarak veritabanı bağlantısı oluşturuyoruz. Bunun için bağlantı bilgilerini tanımlayıp, bağlantıyı  oluşturuyoruz. Ardından sayfanın XML olarak tanımlanması için header() tanımlaması yapıyoruz.

$mysql_hostadi    = 'localhost';
$mysql_kullanici  = 'root';
$mysql_sifre      = '';
$mysql_veritabani = 'veritabani';
## Veritabanı Bağlantısı
try{
   $db = new PDO("mysql:host=$mysql_hostadi;dbname=$mysql_veritabani;", $mysql_kullanici, $mysql_sifre);
}catch(PDOException $a){
   echo $a->getMessage();
}

Başarlı bir şekilde oluşturulan veritabanı bağlantısı sonrasında ilk olarak bu sayfanın XML olarak okunabilmesi için header() tanımlaması yapıyoruz.

## Sayfayı XML olarak gösteriyoruz
header('Content-Type: text/xml; charset=utf-8', true);

Yukarıdaki tanımlamayla çalışmış olduğumuz PHP dosyası artık XML olarak yorumlanacaktır. Böylelikle PHP kodlarını kullanarak dinamik RSS oluşturmuş oluyoruz.

RSS Genel Tanımlamaları

Şimdi de XML yapısını oluşturmak için sınıfı çağırıp gerekli etiket yapısını oluşturalım. Etiket yapısı ve site hakkında genel bilgilerin verileceği bölümleri doldurup sonrasında verileri listeleyelim.

## Sınıfı çağırıp XML yapısını oluşturuyoruz.
$xml           = new DOMDocument("1.0", "UTF-8");
## RSS Oluşturuyoruz
$rss           = $xml->createElement("rss"); 
$rss_olustur   = $xml->appendChild($rss);
$rss_olustur->setAttribute("version","2.0");
## RSS Özelliklerini tanımlıyoruz.
$rss_olustur->setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/");
$rss_olustur->setAttribute("xmlns:content","http://purl.org/rss/1.0/modules/content/");
$rss_olustur->setAttribute("xmlns:atom","http://www.w3.org/2005/Atom");
## RFC822 Uyumlu Tarih değer bilgisi oluşturuyoruz.
$rss_tarih        = date("D, d M Y H:i:s T", time());
$olusumTarih      = gmdate(DATE_RFC2822, strtotime($rss_tarih));
## RSS içerisindeki CHANNEL bölümünü oluşturuyoruz.
$channel          = $xml->createElement("channel");  
$channelOlustur   = $rss_olustur->appendChild($channel);
## ATOM Link yapısını oluşturuyoruz.
$atomLinkOlustur  = $xml->createElement("atom:link");  
$atomLinkOlustur->setAttribute("href","SİTE ADRESİNİ YAZINIZ");
$atomLinkOlustur->setAttribute("rel","self");
$atomLinkOlustur->setAttribute("type","application/rss+xml");
$channelOlustur->appendChild($atomLinkOlustur);
## CHANNEL Değerinin altına ilk tanımlama değerlerini yazıyoruz.
$channelOlustur->appendChild($xml->createElement("title", "SİTE TİTLE YAZINIZ"));
$channelOlustur->appendChild($xml->createElement("description", "SİTE AÇIKLAMASINI YAZINIZ"));
$channelOlustur->appendChild($xml->createElement("link", "SİTE LİNKİNİ YAZINIZ"));
$channelOlustur->appendChild($xml->createElement("language", "tr-TR"));
$channelOlustur->appendChild($xml->createElement("lastBuildDate", $olusumTarih));
$channelOlustur->appendChild($xml->createElement("generator", "PHP DOMDocument ile Oluşturuldu"));

Yukarıda yer alan kodları da ekledikten sonra sıra verilerin listelenmesine geliyor.

RSS Beslemesi için Verileri Listeleme

Bu bölümde veritabanı bağlantısından yararlanarak ilgili tablodan değerleri alıp, ilgili yerlere yazıyoruz.

## Veritabanından ilgili tabloya ulaşıyoruz ve verileri listeniyoruz.
$veriler    = $db->query("SELECT * FROM TABLOADINIYAZINIZ ");
## Verileri Listeliyoruz
foreach($veriler as $veri){
   ## item Etiketini oluşturuyoruz.
   $itemOlustur        = $channelOlustur->appendChild($xml->createElement("item"));
      ## item etiketinin altına TİTLE - LİNK değerlerini oluşturuyoruz.
      $titleOlustur    = $itemOlustur->appendChild($xml->createElement("title", "POST BAŞLIĞI YER ALACAK"));
      $linkOlustur     = $itemOlustur->appendChild($xml->createElement("link", "KONU LİNK DEĞERİ YER ALACAK"));
      ## Benzersiz GUİD etiketini oluşturuyoruz.
      $guidOlustur     = $xml->createElement("guid", "KONU BENZERSİZ LİNK DEĞERİ YER ALACAK");  
      $guidOlustur->setAttribute("isPermaLink","false");
      $guidEkle        = $itemOlustur->appendChild($guidOlustur);
   ## Description Etiketini oluşturuyoruz.
   $aciklamaOlustur    = $itemOlustur->appendChild($xml->createElement("description"));
      ## Description değerini yazıyoruz.
      $aciklamaEkle    = $xml->createCDATASection("KONU AÇIKLAMASI YER ALACAK");  
      $aciklamaOlustur->appendChild($aciklamaEkle);
   ## Gönderi Tarihi için pubDate Etiketini oluşturuyoruz.
   $tarihFormati       = gmdate(DATE_RFC2822, strtotime("KONU TARİHİ YER ALACAK 2019-11-17 FORMATINDA"));
   $tarihOlustur       = $xml->createElement("pubDate", $tarihFormati);  
   $tarihEkle          = $itemOlustur->appendChild($tarihOlustur);
}
## XML Çıktısı alıyoruz.
echo $xml->saveXML();

Yukarıda yer alan foreach döngüsü ile belirli XML etiketleri döndürülecektir. Bu kod alanında gerekli yerlere ilgili değişkenler yazılarak verilerin sağlıklı bir şekilde çalışmasını sağlayabilirsiniz. Tablo ve sütun isimleri farklılık göstereceği için hiç değer yazmadan sadece neyin yer alacağını belittim.

Sonuç Olarak RSS Beslemesi

Yukarıdaki adımları gerçekleştirmeniz durumunda başarılı bir şekilde RSS besleme yapısını oluşturabilirsiniz. Belirli standarları bulunan bir XML yapısı bulunduğu için yukarıda yer alan etiketler sırası ile tanımlanmalıdır. Genel standart yapısı bulunduğundan ve RSS okuyucu değerlerinden dolayı standartlar dışına çıkılmamalıdır.

<?php
$mysql_hostadi    = 'localhost';
$mysql_kullanici  = 'root';
$mysql_sifre      = '';
$mysql_veritabani = 'veritabani';
## Veritabanı Bağlantısı
try{
   $db = new PDO("mysql:host=$mysql_hostadi;dbname=$mysql_veritabani;", $mysql_kullanici, $mysql_sifre);
}catch(PDOException $a){
   echo $a->getMessage();
}
## Sayfayı XML olarak gösteriyoruz
header('Content-Type: text/xml; charset=utf-8', true);
## Sınıfı çağırıp XML yapısını oluşturuyoruz.
$xml           = new DOMDocument("1.0", "UTF-8");
## RSS Oluşturuyoruz
$rss           = $xml->createElement("rss"); 
$rss_olustur   = $xml->appendChild($rss);
$rss_olustur->setAttribute("version","2.0");
## RSS Özelliklerini tanımlıyoruz.
$rss_olustur->setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/");
$rss_olustur->setAttribute("xmlns:content","http://purl.org/rss/1.0/modules/content/");
$rss_olustur->setAttribute("xmlns:atom","http://www.w3.org/2005/Atom");
## RFC822 Uyumlu Tarih değer bilgisi oluşturuyoruz.
$rss_tarih        = date("D, d M Y H:i:s T", time());
$olusumTarih      = gmdate(DATE_RFC2822, strtotime($rss_tarih));
## RSS içerisindeki CHANNEL bölümünü oluşturuyoruz.
$channel          = $xml->createElement("channel");  
$channelOlustur   = $rss_olustur->appendChild($channel);
## ATOM Link yapısını oluşturuyoruz.
$atomLinkOlustur  = $xml->createElement("atom:link");  
$atomLinkOlustur->setAttribute("href","SİTE ADRESİNİ YAZINIZ");
$atomLinkOlustur->setAttribute("rel","self");
$atomLinkOlustur->setAttribute("type","application/rss+xml");
$channelOlustur->appendChild($atomLinkOlustur);
## CHANNEL Değerinin altına ilk tanımlama değerlerini yazıyoruz.
$channelOlustur->appendChild($xml->createElement("title", "SİTE TİTLE YAZINIZ"));
$channelOlustur->appendChild($xml->createElement("description", "SİTE AÇIKLAMASINI YAZINIZ"));
$channelOlustur->appendChild($xml->createElement("link", "SİTE LİNKİNİ YAZINIZ"));
$channelOlustur->appendChild($xml->createElement("language", "tr-TR"));
$channelOlustur->appendChild($xml->createElement("lastBuildDate", $olusumTarih));
$channelOlustur->appendChild($xml->createElement("generator", "PHP DOMDocument ile Oluşturuldu"));
## Veritabanından ilgili tabloya ulaşıyoruz ve verileri listeniyoruz.
$veriler    = $db->query("SELECT * FROM TABLOADINIYAZINIZ ");
## Verileri Listeliyoruz
foreach($veriler as $veri){
   ## item Etiketini oluşturuyoruz.
   $itemOlustur        = $channelOlustur->appendChild($xml->createElement("item"));
      ## item etiketinin altına TİTLE - LİNK değerlerini oluşturuyoruz.
      $titleOlustur    = $itemOlustur->appendChild($xml->createElement("title", "POST BAŞLIĞI YER ALACAK"));
      $linkOlustur     = $itemOlustur->appendChild($xml->createElement("link", "KONU LİNK DEĞERİ YER ALACAK"));
      ## Benzersiz GUİD etiketini oluşturuyoruz.
      $guidOlustur     = $xml->createElement("guid", "KONU BENZERSİZ LİNK DEĞERİ YER ALACAK");  
      $guidOlustur->setAttribute("isPermaLink","false");
      $guidEkle        = $itemOlustur->appendChild($guidOlustur);
   ## Description Etiketini oluşturuyoruz.
   $aciklamaOlustur    = $itemOlustur->appendChild($xml->createElement("description"));
      ## Description değerini yazıyoruz.
      $aciklamaEkle    = $xml->createCDATASection("KONU AÇIKLAMASI YER ALACAK");  
      $aciklamaOlustur->appendChild($aciklamaEkle);
   ## Gönderi Tarihi için pubDate Etiketini oluşturuyoruz.
   $tarihFormati       = gmdate(DATE_RFC2822, strtotime("KONU TARİHİ YER ALACAK 2019-11-17 FORMATINDA"));
   $tarihOlustur       = $xml->createElement("pubDate", $tarihFormati);  
   $tarihEkle          = $itemOlustur->appendChild($tarihOlustur);
}
## XML Çıktısı alıyoruz.
echo $xml->saveXML();
?>

Aşama aşama olarak gerçekleştirmiş olduğumuz RSS beslemesinin toparlanmış haline yukarıdaki kodlardan ulaşabilirsiniz. İlgili yerleri düzenleyerek bu yapının sağlıklı bir şekilde çalışmasını sağlayabilirsiniz.

Daha Fazla Göster

İlgili Makaleler

Kapalı