PHP ile bir sistem geliştirirken kimi zaman RSS & XML ile veri okumanız gerekebilir. Özellikle e-ticaret veya içerik yönetim sistemi gibi bir yapı kodluyorsanız XML üzerinden veri entegrasyonu gibi seçenekleri eklemeniz gerekecektir.
Bu gibi örnekler için file_get_contents, cURL read veya dosya okuma işlemleri
yerine daha profesyonel fonksiyon ve yapılar kullanabilirsiniz. Basit
bir işlem için curl çalıştırmak yerine PHP içerisinde bulunan simplexml_load_file fonksiyonu işinizi çözecektir.
Belirtmek istediğim bir nokta var ki o da belirttiğim diğer şekillerde de verilerin okunabileceği. File_get_contents ile veri çekmek için aynı sunucunuzdaki dosyaları kapsayacak farklı ayarlar yapmanız gerekebilir. Her zaman
uzak sunucudaki bir XML verisini çekmeyebilirsiniz.
Bu nedenle daha çok
sunucunuzu yoracak ve sayfa yüklenmesiyle load işlemini artıracak
şeylerden kaçınarak daha basite indirgenmiş hazır fonksiyonları
kullanabilirsiniz. Basit şekildeki entegrasyon işlemleriniz
için simplexml_load_file fonksiyonunu inceleyelim.
(Bu fonksiyonu simplexml_load_string
şeklinde, sayfa üzerinde bir değişkene atanmış olan veriler için de
kullanmanız mümkün. Aynı şekilde XML yapısına sadık kalan veritabanında
depolanmış bilgileri de bu şekilde çekebilirsiniz.)
Gelelim bu standart sınıfın kullanışına;
İlk olarak XML sayfasına erişmemiz gerekiyor, ben simplexml_load_string sınıfını kullanarak buna erişim için örnek bir değişken verisi hazırladım;
$veri = ‘<?xml version=”1.0″ encoding=”UTF-8″ ?>
<rss>
<urunler>
<urunbilgileri>
<urunadi><![CDATA[Beyaz Eşya – Bulaşık Makinesi]]></urunadi>
</urunbilgileri>
</urunler>
</rss>';
<urunler>
<urunbilgileri>
<urunadi><![CDATA[Beyaz Eşya – Bulaşık Makinesi]]></urunadi>
</urunbilgileri>
</urunler>
</rss>';
simplexml_load_file ve simplexml_load_string
arasındaki ana büyük fark, birisinde dosyaların aynı sayfada bulunmayan
bir kaynaktan çekilmesidir. Haliyle bu da diğer yönteme göre milisaniye
boyutunda da olsa zaman kaybı şeklinde değerlendirilebilir. Verilerin
daha sıkışık ve rahat saklanabilir şekilde bir değişkene atandığını
düşünüyorum.
PHP sayfama $veri şeklinde bir değişken oluşturdum ve içerisinde XML yapımı girdim.
Bu yapım hiyerarşik olarak depolandığı için okunmasında da hazır bir sınıf kullanabiliriz. XML yapısı (ee haliyle RSS yapısı) belirli bir hiyerarşiye göre oluşturulduğu için okunma noktasında da bu bize kolaylık sağlayacaktır.
Verilerime ulaşabilmek için;
- Ürünler -> Ürün bilgileri -> Ürün adı
şeklinde bir yapıyı izlemem gerekiyor. Daha fazla veri ve değer
oluşturabildiği gibi, varsayılan olarak herhangi bir kısıtlamamız
yoktur. Ben örnek teşkil etmesi için bir tane değer atamayı uygun
gördüm. Gelelim oluşturulmuş olan verimizi PHP ile okumaya;
$xml = simplexml_load_string($veri);
echo $xml->urunler->urunbilgileri->urunadi;
İlk adımda fonksiyonumuzu bir değerle birlikte
çalıştırıyoruz. simplexml_load_string fonksiyonu içerisinde $veri
değişkenini göndererek dönen sonucu $xml değişkenine atıyorum. Burada
dönen sonucu bir dizi olarak veya standart bir sınıf olarak çekmem
mümkün.
XML fonksiyonları PHP içerisinde sınıflandırılarak depolandığı için
varsayılan class yapısıyla bu verilere ikinci satırdaki gibi
ulaşabilirim. İkinci satırda da ulaştığım verileri ekrana basıyorum.
Hiyerarşik yapıyı takip ederek ürün adına ulaşıyorum.
Bu değer return edilmiş olan ve varsayılan olarak string olarak karşımıza çıkan bir değerdir. Bu nedenle kullanımı esnasında ham olarak işlenebilir. (Bu
da demek oluyor ki sayısal işlem yapmamız gerektiğinde çekilen
verilerin -artık hangi sınıfta bulunuyorsa- integer gibi bir grupta
belirtilmesi gerekebilir.)
Yüklenen değeri bir dosyadan çektiğimizde ise ilk olarak bu adresten çekilen veriyi bir değere atayıp string fonksiyonu ile çalışabiliriz. İkinci yolumuz ise okunan verileri (string fonksiyonuna atamadan) direkt olarak okuyabiliriz.
Sizin sisteminizde hangisi kullanılması gerekiyorsa, ihtiyaçlarınızı değerlendirerek uygun olanı kullanabilirsiniz.