Yahoo! Pipes Nedir, Nasıl Çalışır?

Internet'teki haberleri RSS kullanarak takip etmek isteyenler ntvmsnbc.com'un son haftalarda yaptığı bir değişiklikten pek mamnun olmadılar. ntvmsnbc.com kaynaklı RSS'lere kayıtlı olanlar eskiden RSS feed içinde gelen haber özetini artık alamaz oldular. Bu durumda RSS yalnızca haberlerin başlıklarını taşımaya başladı. Çoğu zaman haberin yalnızca başlığına bakıp ilgi çekici olup olmadığı bilinemeyeceğinden bu durum kullanıcılar açısından ciddi bir sorun oluşturuyordu. Sorunu ntvmsnbc.com'a ilettik, ancak bu satırların yazıldığı tarihe kadar sorularımıza ve taleplerimize bir yanıt alamadık. Bu durumda tek bir seçenek kalıyordu, haberi başka kaynaklardan derlemek. Bu her ne kadar büyük ölçüde sorunu çözmüş olsa da yeterince tatmin edici değildi. Tam bununla uğraşırken Yahoo! Pipes geldi aklıma. Ben de biraz çalışarak ntvmsnbc.com RSS feedlerini eski haline getirmeye uğraştım. Bunu başarmakla kalmadım, eskisinden daha bile iyi olduğunu düşünüyorum RSS feed'lerin. Nasıl mı? Anlatayım...

ntv_spor_1
Yukarıdaki ekran çıktısı ntvmsnbc.com RSS beslemelerinin son halinin ekran çıktısı. Görüldüğü gibi haberin başlığından başka hiçbir bilgi yok. Dahası, spor haberlerinde haberin başlığına tıklandığında önce ntvmsnbc.com sayfasına gidiyorsunuz, orada haberin özetini okuduktan sonra altta bir link görünüyor. Onda da haberin devamını okumak için ntvspor.net'e yönlendirileceğimiz söyleniyor (ekran çıktısı aşağıda). Yani ntvmsnbc.com RSS beslemesiyle haber arasında iki tıklama var (spor haberleri için). Haber özeti de olmadığı için aslında okuyacağınız haberin ilgi çekici olup olmadığı hakkında pek az bilginiz var.
ntv_spor_2
Yahoo! Pipes Nedir?
Yahoo! Pipes, Internet'te halihazırda var olan içeriği derleyip yeni bir şekle sokmak için kullanılabilecek script (betik) tabanlı bir altyapıdır. Sisteme girdi olarak Web sayfası adresleri RSS feed linkleri ya da sabit metin gibi öğeler verip RSS feed formatında bir çıktı alabiliyorsunuz. Perl benzeri regex kullanım olanağı sistemi oldukça güçlü kılıyor. Sistemi daha ayrıntılı inceleyebilmek için bazı özelliklerini ntvmsnbc.com'un Internet mantığıyla uyuşmayan RSS beslemesine uygulayalım.
Fetch Feed
Burada (daha basit olduğu için) NTV Güncel Haberler RSS beslemesini inceleyeceğiz. Öncelikle RSS beslemesini Fetch Feed (Soruces > Fetch Feed) aracını kullanarak aluyoruz (Sistem sürükle-bırak yöntemiyle çalıştığından üzerinde çalışmak oldukça kolay). Bu RSS beslemesinin bize sağladığı her bir öğe (item) yukarıda örneklediğimiz gibi yalnızca haberin başlığını ve ntvmsnbc.com sitesindeki adresini içeriyor. Daha fazla bilgi edinebilmek için o adrese gidip istediğimiz bilgileri edinmemiz gerekiyor. Ancak bunun için bu adresi aynen kullanmak yerine haberin yazıcıya gönderildiği halinin bulunduğu sitedeki adresini kullanmak performans açısından daha uygun (ayrıca Yahoo! Pipes'ın indirilecek sayfanın 200KB'dan az olması gerektiği konusundaki sınırlaması uzun haberler için bunu yapmayı zorunlu kılıyor).

ntvmsnbc.com'da bir haberin adresi tipik olarka şöyle oluyor:
http://www.ntvmsnbc.com/news/467726.asp

Aynı haberin yazıcıya gönderildiğindeki adresiyse şöyle oluyor (bunu sayfanın altındaki "Yazdır" linkine tıklayarak görebilirsiniz):

http://www.ntvmsnbc.com/print.asp?pid=467726

Burada esas önemli olan bilgi koyu olarak işaretlenen haber numarası. İlk adresi ikinci adrese dönüştürmek için Regex aracını kullanacağız (Operators > Regex). (Regex konusunda daha fazla bilgiye şu linkten ulaşabilirsiniz: Düzenli İfadeler (Regular Expressions).)
regex
Adresimizi istediğimiz gibi düzenlediğimize göre sıra o adrese gidip ihtiyaç duyduğumuz içeriği toplamaya geldi. Bu RSS beslemesindeki her  öğe için adrese gidip iöeriği toplamak isteyeceğimizden bunu bir döngü içinde yapıyoruz (Operators > Loop).
loop
Döngünün içinde Fetch Page (Sources > Fetch Page) aracını kullanarak söz konusu yazıcı çıktı sayfasının içeriğini topluyoruz. İçeriği item.content değişkenine atıyoruz (en altta). Böylelikle daha sonra bu içerik içerisinde dilediğimiz değişiklikleri yapabileceğiz.
rename
item.content değişkenine yüklediğimiz sayfa içeriğini item.description içerisine yüklememiz gerekiyor. Çünkü RSS okuyucular standart olarak item.description içindeki bilgiyi kullanıcıya gösteriyorlar. Bizim de görmek istediğimiz bu olduğundan yolumuzda ilerliyoruz. Bunun için Rename (Operators > Rename) aracını kullanıyoruz.

Son aşamada elde ettiğimiz içerikten istemediğimiz bölümleri ayıklayıp RSS beslememizi son haline getirmemiz gerekiyor. Bunun için tekrar Regex aracına başvuruyoruz:
regex
item.description içinde <div class="deckStory" style="margin-top:20px;"> ifadesinden önceki ve ondan sonra gelen ilk </div> ifadesinden sonraki her şeyi siliyoruz (ilk iki satır). RSS beslemesinde author olarak gelen "webmaster" hiçbir şey ifade etmediği için (gösterimde bir satır kazanabilmek için) onu da siliyoruz. Son olarak item.link değişkenini yazıcı sayfasından önceki haline alıyoruz (son satır). Son haline getirdiğimiz beslemeyi Pipe Output'a bağlayıp işlemimizi sonlandırıyoruz.

Pipe'ımızı kaydedip sayfanın üstünde beliren "Run Pipe" linkine tıklayarak sonucu test edebilirsiniz. Bu arada bu çalışma boyunca sayfanın en alt bölümünde bulunan hata ayıklayıcıyı (debugger) işlemlerin değişik aşamalarını gözlemlemek için kullanabilirsiniz. Sonuç olarak elde ettiğimiz RSS beslemesinin çıktısı şöyle oluyor:
sonuc
Görüldüğü gibi bütün haberlerin altında haber özetleri bulunuyor.
sonuc
http://pipes.yahoo.com/eren/ntv_guncel adresinden "View Source" linkine tıklayarak NTV Güncel RSS beslemesinin kaynağını görüntüleyebilir, "Clone" linkini kullanarak kolanlayıp kendi Pipe'larınızı başlatabilir, ya da hemen alttaki bağlantıları kullanarak RSS beslemesini RSS okuyucunuza ekleyebilirsiniz.

NTV Spor için biraz farklı bir yöntem kullanarak yazıcı sayfasını değil haber sayfasını kullanıp oradaki ntvspor.net linkini devşirerek onu da RSS feed'le gelen link olarak belirleyerek habere ulaşabilmek için defalarda tıklamak derdinden kurtulabiliriz. NTV Spor RSS beslemesiyle ilgili bilgilere de http://pipes.yahoo.com/eren/ntv_spor linkinden ulaşılabilir.

Bütün ntvmsnbc.com RSS beslemelerinin alternatifleri hazlihazırda yaratılmış durumda. İlginize sunuyoruz: 

5 yorum:

  1. Benden başkalarının da bu konudan muzdarip olması hoşuma gitti!! ntvmsnbc'nin durumu düzeltmemesine şaşırdım doğrusu. Artık, yazıda sunulandan daha iyisini vermedikleri sürece özgün feed'lere dönmek için pek motivasyon da olmaz herhalde. Eline sağlık.

    YanıtlaSil
  2. rss feed vermeyen bir web sitesinden feed alabilir miyiz?mesela sabah gazetesinden haşmet babaoğlunun köşe yazılarını düzenli olarak aktran bir rss adresi yapabilir miyiz?

    YanıtlaSil
  3. Evet, Yahoo Pipes'la sözünü ettiğiniz şey de mümkün. Fetch Page modülü bunun için biçilmiş kaftan...

    YanıtlaSil
  4. Bu arada bir güncelleme yapmakta yarar var. Bu postun altında verilen linkler artık çalışmıyor, zira ntvmsnbc.com RSS formatını değiştirdi. Ondan sonra zaten RSS feedler doğru düzgün bir hal aldı, bir daha da güncellemek gerekmedi.

    YanıtlaSil
  5. Haşmet Babaoğlu meselesine daha yakından bakabilmek için biraz boş vakit buldum. Sonuçta yalnızca Babaoğlu için bir RSS feed hazırladım (Haşmet Babaoğlu Köşe Yazıları RSS). Umarım içinizi görür.

    YanıtlaSil