WordPress blogunuzun RSS kaynağına girdi görselleri eklemek

WordPress’in ön tanımlı gelen temlarındaki rss kaynaklarında sadece girdi detayları bulunur. Eğer sayfalarınızda girdilerinizi listelerken görsel olarak girdinize eklenen birincil imajı kullanıyorsanız (bir çok tema bu şekilde girdi görseli tanımlaması yapmaktadır), rsslerinize girdilerin birincil görselini (varsa) eklemek oldukça kolay olacaktır.

WordPress’in kanca mimarisi sayesinde tema klasörünüzdeki fonksiyon tanımlamaları yapılan dosyaya ekleyeceğiniz bir fonksiyonu, rss girdileri işlenirken çağırtabilirsiniz. Bu sayede rss çıktısında gösterilecek girdileri manipule ederek rss çıktılarına girdi görsellerini ekleyebiliriz.

Bunun için, tema klasörünüzde (muhtemelen var olan) functions.php’ye

kodunu ekleyelim. Rss girdilerini manipule edecek bir fonksiyon tanımladıktan sonra iki rss’i oluşturan methodların kancalarını kullanarak tanımladığımız fonksiyonu çağırtıyoruz. WordPress, fonksiyona, manipule edilecek girdiye ait bazı bilgileri parametre olarak gönderiyor. İlk parametre, işimize yarıyacak tek parametre aslında. Basitçe; girdiye ait eklentileri sorgulayıp eğer girdi görseli varsa, ilk parametreyle aldığımız girdi içeriğine html kodu olarak ekliyor ve fonksiyon cevabı olarak geri dönüyoruz. WordPress gerisini hallediyor zaten.

Yukarıda kodun son 2 satırında gördüğünüz rss kaynakları, yorumlar ve girdilere ait rss’ler. İsterseniz sadece girdilere ait rss kaynağına (the_content_rss) thumbnail eklemeyi tercih edebilirsiniz.

RSS’leri işlemek ve Lifestream

Geçen haftalarda Lifestream diye bir proje yayınlamıştım. O projeyi yapmadan önce yazdığım bir döküman olan simplepie ile rss işleme; bu döküman ve lifestream projesiyle ilintili olarak da “rsslerden lifestream” hakkında yazdığım dökümanı yayınlayabildim.

  • Simplepie ile rss işlemek (okumak) dökümanına buradan,
  • RSS’lerden Lifestream dökümanına buradan ulaşabilirsiniz.

RSS’lerden Lifestream

Lifestream da nesi?

Kelime açılımından anlyabileceğiniz birşey ama bilmeyenler için özetliyim. Şu an sağda solda bir sürü web servisinde, hayatınıza dair bilgisayarda yaptığınız herşeyi paylaştığınız servisler var ve bunları kullanıyorsunuzdur illaki. Örneğin :

  • last.fm ile müziğinizi,
  • delicious ile linklerinizi,
  • tumblr, wordpress vs ile yazılarınızı,
  • flickr ile fotograflarınızı

Bu servislerin neredeyse hepsi RSS ile içeriklerinizi paylaşıyorlar. Bu dökümanda bunun gibi çeşitli servislere ait içerikleri RSS aracılığı ile süzgeçleyip kronolojik bir sıraya sokup sosyal geçmişinizi listelemeye yönelik bir uygulama yazacağım. Nasıl birşey olduğunu merak ediyorsanız http://mfyz.org adresinden benim sosyal servislerdeki akışımı görüntüleyebilirsiniz.

Tamamiyle dinamik

Bu işin güzel yanı, hazırladığınız sayfa tamamen organik bir yapıda sürekli sizin farkında olmadan kaydettiğiniz sosyal verilerinizi derleyecektir. Mesela müzik dinlerken beğendiğim bir şarkı veya bookmarklarıma eklediğim bir link bu servislere herhangi bir çabama gerek kalmadan ekleniyor. Bu eklenen içerikler yine hiçbir müdahale olmadan benim lifestream sayfamda görüntüleniyor.

Simple pie

Bunu yapmak için bu sosyal medya servislerindeki rss kaynaklarınızı işleyerek yapacağız. Bunun için php’de simple pie kütüphanesini kullanacağız ve bu kütüphanenin kullanımı ve rss okumak için yardımcı fonksiyon açılımı için önce Simplepie ile rss işlemek (okumak) dökümanını inceleyin.

Simple pie ile rss okuma konusunda bilgi sahibi olduğunuzu varsayarak dökümana devam ediyorum (eğer yoksa öncelikle verdiğim dökümanı uygulayın).

Hazırlık ve Başlangıç

Öncelikle içerik kaynaklarınızı (rss) bir dosyada çıkartın. Bu kaynakları bir dizi şeklinde tanımları tutacağımız dosyaya yazalım. Bunun için config.php diye bir dosyada $feeds adında bir dizi içerisinde kaynak url’i ve adı olarak saklayacağım. Örnek kaynak dizisi şöyle olacaktır :

Bu şekilde istediğiniz kadar rss kaynağı tanımlayabilirsiniz. Az sonra simplepie kullanarak bu kaynakları okuyacak, kronolojik sıralayıp çıktısı sayfalar halinde oluşturacağız.

Şimdi index.php dosyasında kaynakları okumaya başlayalım.

Yukarıda config ve mypie dosyalarını include ettik. Config’de rss kaynakları tanımları var, mypie’de ise simplepie kullanarak rss kaynağı okuyan fonksiyonumuz var. Bu fonksiyon hakkında daha detaylı bilgi almak için Simplepie ile rss işlemek (okumak) dökümanını inceleyin.

$feeds dizisini dönerek feed bilgilerini ve anahtar kelimesini alıyoruz. Döngü içinde ise feed url’deki kaynağı okuyoruz. Eğer hata olursa o feed ingore edilip bir sonrakine geçiliyor. Eğer okundu ise $allItems adlı bir diziye okunan veri ekleniyor. Tabi haber eklenirken tür olarak da o feed’in anahtar kelimesi ekleniyor. Bu sayede ekrana basarken, farklı haber kaynakları için farklı çıktı verebileceğiz.

Şimdi elimizde tüm kaynaklardaki tüm haberler $allItems adlı dizide tutulmakta. Bu dizideki veri yapısın daha iyi anlamanız için dizideki ilk elemanı verelim :

Gördüğünüz gibi tarih, başlık, url, kaynağı ve içerik olarak basit anahtarlarla ihtiyacımız olan tüm bilgiler mevcut. Şimdi bu diziyi tarihsel sıraya sokalım. Bunun için multi-dimmension dizilerde kolona göre sıralama yapan yardımcı bir fonksiyon kullanacağız.

Bu fonksiyonu çağıdrıktan sonra $allItems dizisindeki haberler artık kronolojik sıraya girmiş oldu. Tam istediğimiz kıvama geldi fakat elimizdeki dizide yüzlerce haber olabilir isterseniz bu diziyi belirli bir tarihe kadar kırpabilirsiniz. Mesela son 2 haftaki haberleri listelemek isterseniz $allItems’i dönerek date alanını timestamp’a çevirip 2 haftadan eski haberleri tespit edebilirsiniz. Doğal olarak onları temizleme şansınız da olur.

Ben herhangi bir kırpma işlemi yapmadan tüm haberleri sayfalayarak göstereceğim.

config.php dosyasında $limit adında bir değişkende her sayfada kaç girdi gösterileceğini belirleyin. Bunu bu sayfa içinde de yapabilirsiniz ama config.php’de tüm tanımların durması daha mantıklı olacaktır. Yukarıda bilinen sayfalama algoritması kullanarak sayfa sayısı ve şu anki sayfa hesabı yapılıyor. array_slice ile de o sayfada gösterilecek haberler $pagedItems dizisine parçalanıyor. Artık sayfada:

  • $page
  • $pageCount
  • $pagedItems

değişkenlerini kullanarak sayfalamayı ve haber içeriklerini basabiliriz. Gerekli basit html yapısını da kullanarak haberleri ekrana basacak html kodu da şöyle olacak (yani index.php dosyasının devamı)

Bu dökümanda anlatılan kod, proje olarak http://projects.mfyz.com/lifestream/ adresinde Lifestream olarak bulunabilir. Buradaki kodun çıktısını merak ediyorsanız : http://projects.mfyz.com/lifestream/demo/ adresinde biraz şekillendirilmiş şekilde bulabilirsiniz.

Bu kodu biraz daha özelleştirerek http://mfyz.org‘daki gibi bir lifestream elde edebilirsiniz.

Simplepie ile rss işlemek (okumak)

Nerede kullanacağız?

Rss şu anda nerdeyse veri kaynağı oluşturma/kullanma konusunda standartlaşmaya başladı. Artık her sitede, başka sitelerden alınana içerikleri görebiliyorsunuz. Bunun en büyük nedeni, her sitenin (aslında hazır bloglardaki rss kaynakları sayesinde) bir rss kaynağı var ve verilen bilgileri bu kanallarla belirli standartlarda internette yayıyoruz. Bu kaynakları alıp/derleyip çeşitli alanlarda kullanabilirsiniz. Bu konuda hayal gücünüze ne geliyorsa uygulamak mümkün.

Bu dökümanda kısaca bir rss kaynağını php ile yazılmış simple pie kütüphanesi ile basitçe nasıl diziye çevirebileceğimizi, geçici olarak belleğe alabileceğinizi (cache) göstereceğim.

Bu konu ile ilgili Türkçe kaynak var aslında, bu yazıyı yazarak aynı şeylerden bahsetmek pek içimden gelmiyor fakat mfyz.com’daki diğer dökümanlarda sık sık rss işleme ile ilgili konulardan bahsedeceğim için bu dökümanı iç bir kaynak olarak özet de olsa yazmak zorundayım. Olabildiğince farklı bir açıdan ele almaya çalışacağım.

Simple Pie Nedir?

Php ile yazılmış bir xml parser sınıfıdır. Spesifik olarak da RSS tipi xml dosyalarını okumak için tasarlanmış, cache gibi güzellikleri bulunan bir sınıftır. Bu sınıfı kullanarak bir rss dosyasını nasıl parse edeceğimizi basitçe göstereceğim.

Öncelikle sitesinden simplepie kütüphanesini indirin.
http://simplepie.org/ adresinden download bölümünde son sürüme ait indirme bağlantısı bulabilirsiniz.

İndirdiğiniz paket içerisinde demo bir uygulama, dökümantasyon ve api test dosyaları bulacaksınız. Bizim burada kullanacağımız aslında tek dosya simplepie.inc dosyasıdır.
Bu dosyanın uzantısını .php olarak kullanmanızı tavsiye ederim (simplepie.inc.php).

Simplepie otomatik olarak okuduğu feedleri 1 saatlik belleklemektedir. Bunu kaldırabilirsiniz fakat 1 saatlik belleğe almak oldukça iyi bir performans kazandıracaktır. Bu noktada uygulama dizininizde “cache” adında bir dizin oluşturup yazma haklarını ayarlamanız gerekmektedir (755 veya 777).

Basitçe kullanımı

Bir örnek uygulama ile anlatacağım. İnidirdiğiniz simplepie paketi içindeki simplepie.inc dosyasını uygulamanızın içine koyun. index.php içerisinde include ederek kullanacağız. Cache dizinini de oluşturup izinlerini ayarlayın.

Örnek olarak bir uygulama yapsak da ben burada yardımcı bir fonksiyon kullanacağım. Bu fonksiyon ile basitçe url’sini verdiğimiz feed’i geniş bir dizi olarak döndürecek.

Koddan simplepie kullanımını özetleyeceğim.

readRSS fonksiyonunun parametreleri:
– url
– expire

Bu parametreleri dizi olarak vermelisiniz. Ya da doğrudan tek parametre ile string verirseniz sadece url parametresi ayarlanacaktır.

expire, bellekte ne kadar sürede çürüyeceğini ifade eder. Oraya 300 saniye olarak belirtirseniz kullanıcılar sürekli sayfanızı derlese bile 5 dakikada (300sn) bir rss kaynağı okunacaktır. Bu süreyi belirtmezseniz 1 saat olarak ayarlanacaktır.

Neyse, şimdi sırayla simplepie kullanarak bir rss feed’i nasıl parse ettiğimi anlatayım :

ile yeni bir nesne oluşturup feed adresini ayarlıyoruz.

ile de rss kaynağını alıp okuma işlemini yapıyoruz.

ile de method adından anlayacağınız gibi bellek süresini belirtebiliyoruz. Belirtmezsek 1 saat olarak ayarlanacaktır.
Bu sayede bu rss kaynağı sürekli okunmak yerine internetten saate 1 kere alınıp işlenip belleklenecektir.

Ben her fonksiyonda genel olarak sonuç dizisi oluşturur ve onu dönerim. Burada bir feed için :
– feed’e ait meta data
– feed içindeki konulara ait bir multiarray
söz konusudur.

Bunun için sonuç dizimi “feed” ve “items” olarak 2 alt diziye ayırıyorum ve “feed” dizisine o rss kaynağı için xml içinde belirtilen feed adı, adresi, açıklamasını kaydediyorum. Bunu da sırayla :

methodları ile alabiliyoruz. Bu konuda daha derin açıklama yazmaya gerek yok.

feed içindeki konuları da $feed->get_items() methodu ile aslında dizi olarak alabiliyoruz.
Ben de bu diziyi foreach ile dönerek içindeki nesnelerin alt methodlarını kullanarak her konu için gerekli bilgileri alıp sonuç dizisine “items” alt dizisi içine ekliyorum.
Bu foreach içinde bazı methodlarla sıradaki konuya ait bilgileri alıyorum. Bu methodlar :

Bu methodlarla konu içeriklerini alıp sonuç dizisine yazıyorum.

Fonksiyon sonunda da sonuç dizisini dönüyorum.

Bu fonksiyonun kullanımı için bir örnek vermek gerekirse :

Çıktısı şöyle olacaktır :

Bu noktadan sonra bu diziyi ekrana basma konusunda gerisi sizin hayal gücünüze kalmış.
Bununla ilgili örnek uygulama için benim sosyal medya akışımı (lifestream) inceleyebilirsiniz : http://mfyz.org

İşin görsel kısmını da başka bir dökümanda özetleyeceğim.

mfyz.org’un kodları açıldı: LifeStream

Yavaş yavaş ufak tefek parça parça kodlar sunmaya başlıyorum.
http://projeler.mfyz.com/ subdomaini altında yayınlayacağım. Şimdilik ilkel ve sade/basit sayfalarla yakında daha da çoğalacak bir bölüm orası. Sonra şekillendiririm gerekirse.

mfyz.org’u biliyorsunuz (ya da bilmiyorsanız : http://mfyz.org ) çeşitli sosyal ağlarımdaki rss kaynaklarını işleyerek organik bir sayfa yapmıştım. Onun kodlarını paylaştım, hatta birkaç gün içinde nasıl yapıldığını da anlattığım 2 döküman yayınlayacağım.

Test/Demo : http://projeler.mfyz.com/lifestream/demo/

Proje sayfası ve ayrıntılar :
http://projeler.mfyz.com/lifestream/

Allah bütün iş olmayanlara blog versin

Yine 3-4 günde bir rss okuma girişimlerimde 400-500 tane rss girdisini okur gibi oluyorum. Bazıları destan bazıları tadında oluyor ama sonuç olarak çok vakit de alıyorlar.

Daha önceki yazılarımda bir sürü kopya blog olduğunu söylemiştim. Az önce google chrome haberini 15+ blogda okuyunca dayanamayıp tekrar yazmak istedim. Allah bu başıboş arkadaşlara akıl fikir, uğraşacak iş güç ve benzeri şeyler versin. İnsanlar interneti maliyeti ucuz diye niye bu kadar gerzekçe kullanırlar bilmem.

Yani google chrome’un çıktığını sadece ilgisi olan bloglar gösterse, ne biliyim web tasarımcılarının takıldığı bloglar, mozillazine fln gösterse tamam, ama bu neydiği belirsiz poweriser bile tanıtan bloglardan okudukça sinirlerim bozuluyor. Bu insanların çoğunun Türk olması daha da deli ediyor insanı. Rahat bırakın interneti ya, biraz soğusun, bişeyler yazmadan durun iki dakka. Hani yeni şeyler yazıyor olsanız neyse… Sağdan soldan…

Yakında çıldırıp “rss’e hayır” kampanyası başlatabilirim. “Gereksizse söndür” kadar popüler bir slogan olacağına eminim 🙂

Web İkonları

v0.7’de sitenin alt kısmına yerleştirmek üzere tasarladığım, web 2.0 button görünümüne sahip ikonları Dosyalar bölümünde Grafik dizininde “rss_xhtml_icons.psd” ve “valid_css_xhtml_icons.psd” dosyaları olarak bulabilirsiniz. (Her ne kadar sayfalar valid olmasa da 🙂 )

http://www.mfyz.com/Files/Grafik

Kullanımı Creative Commons 4.0 lisansına uygun olmalıdır. Lisans hakkında bilgi almak için de http://www.mfyz.com/lisans/ adresini ziyaret edebilirsiniz.

Günlüklerin (blog) özgün(süz)lüğü ve kalabalık

4 saat önce 1 haftadır okumadığım rss’leri bi elden geçireyim diye rss okuyucumu açtığımda azım da açık kaldı. Okunmayan rss girdi sayısı 1000’i geçmişti. Şimdi 4 saat aradan sonra 272 tane kaldı. Hala bitiremedim. Üstelik adam gibi okumadan göz atarak, yani okuacaklarımı işaretleyip ilerliyorum, sonra dönüyorum.

Neyse konu başlığına değinmek için bu yazıyı yazdım. Çünkü artık internette blog olarak görünen şeyler blog kavramını geçmiş ve alakasız + gereksiz bir hal almaya başlamış. Bunu zaten az çok hissediyorduk 3-5 aydır. Şu an iş çığrından çıkmış. Şaka yapmıyorum 1000 tane rss girdisi içerisinde elle tutulur kaliteli 500 tane başlık anca vardır. Şu an rss okuyucumda 30 civarı kaynak var bunların 20’si Türk sitelerden 10-15 taneside Yabancı kaynaklardan. Bu 50% kalitesiz içeriği sağlayan kaynakların genelinin Türk kaynaklardan oluşmacı ise üzücü bir durum.

Yabancı kaynaklarda yazılan (startupmeme, smashing magazine vs) lider kaynakların 1-1 kopyası olan bazı siteler var ve artık can sıkıcı hal almaya başladılar. Yani blog olayını geçtik bu sitelerin yerelleştirmesini yapar olduk.

Bir yandan da kopya içerik yazmayan kişiler/gruplar var. Bunlar ya çok eleştirel/otorite kişiler veya gerçekten kaliteli, özgün, üretken şeyler yapıyorlar. Ancak kopya içerik yazmayan bu grupların da yarısı işe yaramaz şeyler yazıyorlar. Her ne kadar kişisel şeylerden bahsedilse de yazılma tarzına göre hem kendini okutturan hem de işe yarar sonuçlar çıkaran insanlar yok değil (örneğin, Fatmanur Erdoğan kariyeryolculgu.com veya Tunç Kılınç fikiratolyesi.com). Yani sonuçta sitenizin uçuk tasarımlara sahip olması gerekmiyor. Ya da girenleri orada tutmak için göz alıcı kalmanız gerekmiyor. Zaten bu devirde böyle bir mantalite iş yapmıyor (örn: eksisozluk, vikipedi).

Bu yazı eleştiri ve protesto olarak algılanmasını isterim aslında. Çünkü eleştirilecek bir konu. İlk “Türk Blog Yazarları” Ankara buluşmasında tüm tartışma boyunca “özgünlüğün veya blog kavramının basitliğinin karıştırılmaması”nın savunucusu oldum. “Veya” diyorum çünkü bu iki kavramı bir araya getirdiğinizde güzel şeyler olmuyor. Bir araya gelemiyor daha doğrusu, bu rss “testi” bunun ispatı olmuş oldu açıkcası. Blogların da gereksiz içerik sağlamasından kimse tırsmıyor. Basitleşmekten kimse korkmuyor, enteresan… Kimse “benim internete katkım ne oldu?” diye sormuyor.

Çok kalabalık yapıyor çok…

RSS desteği

RSS desteği ekledim. Sitenni alt kısmında hiçbir işe yaramadan, çalışmayan link olarak duran RSS ikonu artık işe yarıyor 🙂 Şimdilik 3 kaynak sunabildim :
– Günlük girdileri
– Dökümanlar ve
– Son yazılanlar
İleride rss ile takip edilebilecek yerler oluştukça bu desteği eklerim.

http://www.mfyz.com/rss/ adresinden kaynakların listesine ulaşabilirsiniz. Nasıl ekleyeceğinizi sormuyorum 🙂

RSS’in ne olduğunu bilmiyor ve RSS hakkında bilgi edinmek istiyorsanız RSS nedir, ne işe yarar, ne yapmalıyız? dökümanını okuyabilirsiniz.

Forum konuları, döküman yorumlarını rss olarak dağıtmak şu an mantıklı gelmiyor. Bu özelliği kullanan var mı diğer sitelerde? Yani rss okuyucusu ile forum konusu veya yorum takip eden?