Google Search API ile ajax arama

Eğer bir kaynak arıyorsanız, indexlerin güncelliği, genişliği gibi nedenlerden dolayı, diğer arama motorları yerine Google’ı tercih etmek, iyi bir karar olarak düşünülebilir. Yaptığınız Google aramalarını programatik olarak yapmak ve sonuçları herhangi bir şekilde kullanmanın sayısız örneği verilebilir.

Örneğin, sayfanıza site içi arama eklemek istiyorsunuz. Sayfanıza ait içeriği eğer Google zaten tarıyorsa, site içi aramanız aslında basit bir Google araması ile yapılabilir. Biliyorsunuz Google’da “site:mfyz.com” şeklinde arama yapılacak domaini filtreleyebiliyorsunuz. Dolayısıyla site içi aramanızı, herhangi bir algoritma yazmaya gerek kalmadan, hatta sadece tarayıcıda javascript ile yapabilirsiniz.

Google’un istemci altyapıları için sunduğu JSON tabanlı bir arama APIsi var. Bu api sayesinde normal bir Google araması yapabiliyorsunuz.

Bu API’yi basit bir HTTP isteği ile kullanabiliyorsunuz. Herhangi bir Google araması yapıyormuş gibi bir sorgu gönderip cevabını json olarak alıp işleyebiliyorsunuz.

http://ajax.googleapis.com/ajax/services/search/web?v=1.0

Aramanızı bu URL’e gerekli parametreleri ekleyerek yaptığınızda Google en fazla 8 sonuç verecek şekilde dönüyor.

Cevap olarak dönen JSON içeriği uzun olduğu için burada göstermeyeceğim. Ama birkaç parametreyle gelen sonuç kümesini kullanabilir, sayfalama ve sonuç boyutu gibi parametreler ile sayfalama yapabilirsiniz.

Asıl kullanacağınız sonuç değeri, arama sonuçlarının bulunduğu **response.responseData.results** sonuç kümesi olacaktır. Basit bir nesne dizisi olan bu değeri javascript ile ekrana doğrudan basabilir veya sunucu taraflı bir kod ile işleyebilirsiniz.

Google bu API ile tek istekte en fazla 8 sonuç döndürüyor. Nedenini kesin bir şekilde bilmiyorum fakat güvenlik nedeniyle olduğunu tahmin ediyorum. Eğer 8’den fazla sonuç göstermek istiyorsanız birden fazla api çağrısı yapmak zorundasınız veya istemci tarafında sayfalama yaparak sonuçları sayfalama ile gösterebilirsiniz.

Sayfalama için API çağırısında göndereceğiniz **start** parametresi, arama sonuçlarının başlangıç sırasını belirtiyor. Eğer belirtilmezse geçerli değeri 0 olacaktır. Bundan sonra 8, 16, 24… şeklinde ikinci, üçüncü sayfaya ait sonuçları, ek çağrı yaparak yükleyebilirsiniz.

Burada kontrol etmeniz gereken tek şey, toplam bulunan sonuç kümenizde yeterli sonuç olup olmamasıdır. Yani eğer kullanıcı son sayfada ise “Sonraki Sayfa” linkini göstermemeniz gerekir. Basit bir sayfalama için;

toplam sayfa sayısı = toplam sonuç sayısı / sayfa başına düşen sonuç sayısı

bölümünün üste yuvarlanması ile bulunur. Bunu Google size toplam bulunan sonuç sayısını tahmini şekilde söylüyor.

Sonuç kümesindeki **response.responseData.cursor.estimatedResultCount** parametresi size sayısal olarak tahmini sonuç sayısını söyleyecektir. Sayfa sayısını hesaplayarak gerekli sayfalama navigasyonunu oluşturabilirsiniz.

Örneği kodlayalım

Yazının başlarında verdiğim site içi arama örneğini javascript ile kodlayalım. Doğrudan tüm kodu verip açıklayacağım.

HTML tarafında ihtiyacınız olan iki ana parça, arama formu ve sonuçları listeleyeceğiniz bir tablo veya liste.

Javascript tarafını jQuery kullanarak yazarak HTTP çağrısını, JSON sonucunu işleme, html elemanlarını yönetme gibi birçok kısmı kolayca halledebilirsiniz.

İlk yapmamız gereken şey arama formundan arama sorgusunu yakalamak ve arama butonundaki tıklama hareketini yakalamak olacak. Bunun için butonun tıklama olayını yakalayıp text alanının içeriğini alıyoruz.

Google’un arama APIsini basit bir HTTP isteği ile kullanacağımızı söylemiştim, sonuç bir json nesnesi olduğu için jQuery’nin http istek yardımcı methodlarından **getJSON** methodunu kullanarak hem isteği yönetebilir hem de cevabı işleyebiliriz.

Yukarıdaki javascript methodu basit bir HTTP çağrısı yapıp gelen json cevabını işliyor. Basitçe bir liste elemanı (ul) içeriği oluşturuyoruz. Gelen sonuç dizisini bir HTML koduna dönüştürüyoruz. Methodun sonunda ise oluşturulan HTML kodunu liste elemanınımıza ekliyoruz.

Bu methodda gördüğünüzü ilk parametre, arama formundan gelen arama sorgusu, ikinci parametre ise, sayfalama için Google APIsine gönderilecek olan sonuç başlangıç indeksi. Bu sayede bu fonksiyonu tekrar çağırarak ikinci, üçüncü ve diğer sayfalardaki arama sonuçlarını yükletebiliyoruz. İlk arama yapılırken yani yukarıda ilk verdiğim javascript kodunda çağırılan arama methodu “0” başlangıç parametresi ile çağrılıyor.

Bu methodda dikkatinizi çekmiş olan bir nokta da arama parametresin sonuna “site:mfyz.com” eklemiş olmam. Sorguya eklenen bu kısım, yapılan aramanın sonuçlarında sadece o domain’deki sayfaları döndürmesini sağlayacaktır.

Yukarıdaki HTML çıktısını CSS ile işleyebilirsiniz veya arama formunu “ara” butonu ile değil eş zamanlı arama gibi her tuşa basıldığında belirli bir zaman aşımı ile girilen kelimeyi yakalayıp arama yapabilirsiniz.

Yeni arama kutusu

Site içi arama, mfyz.com’un öneki sürümlerinde vardı fakat son iki sürümde kaldırmıştım bu özelliği. Daha doğrusu tekrar yazmam gerekiyordu fakat zaman bulup tekrardan yazamamıştım.

Tepedeki navigasyonun sağ kısmını yani üye işlemleriyle ilgili kısmını daha da ufaltarak arama kutusu koydum. Tıkarsanız kutu büyüyecek ve yazdığınız sorguya göre anlık arama yapacak sitede. Bunun için google ajax api’lerini kullandım ve basit bir javascript sonucunda anlık arama sağlayabiliyorum artık.

Genellikle döküman ve forum konuları sonuçları bulsa da sitede aradığınız birşeyi bulma konusunda çok yardımı dokunacaktır diye düşünüyorum.

Siz de sitenize buna benzer bir live search koymak isterseniz, google Ajax api ile web veya görsel araması gibi işlemler için çok güzel hazırlanmış bir jquery örneği var, ekteki linke tıkalayarak örneği inceleyebilirsiniz.

http://tutorialzine.com/2010/09/google-powered-site-search-ajax-jquery/

URL kısaltma servisleri taranabilirliği azaltıyor mu?

URL kısaltma servisleri şu an özellikle sosyal ağlarda otomasyonlarla fln çok fazla kullanılıyor. Uzun url’leri kısa url’lere çeviriyor fakat acaba arama motorlarının botları bu url’leri takip ederken gerçekten son yönlendirilen url’i mi hesaba katıyor?

Arama motorlarına göre dış bağlantı sayısı oldukça önemli bir kriter biliyorsunuz, ama kısa url’lerle aslında dışarıda kaç bağlantının geldiğini tam olarak sayamıyor oluyor botlar.

Belki de friendfeed veya twitter gibi servisler bunu engellemek için bu servisleri kullanıyorlardır. Mesela friendfeed ff.im domainini kullanıyor, yani kendi servisi ve public bir servis değil. Yani google’a göre friendfeed ile ff.im adresleri birbirlerini besliyor ama dışarı bağlantı vermiyorlar.

Tabi arama motoru botlarına bu konudaki problemin çözümünü öğretmek zor değil.

SEO Optimizasyonu

SEO Nedir?

SEO’nun açılımı “Search Engine Optimization” yani Arama Motoru En iyileme’dir. İnternette insanlar veri aramaya ihtiyaç duyduğundan beri (90’ların sonuna doğru) arama motorlarının ihtiyaçları, popülerliği arttı. Özellikle google, yahoo gibi arama motorları daha çok kullanılır oldu. Hatta o kadar kullanılmaya başladı ki artık insanlar internet adresi yazmak yerine google’a yazıp sitelere öyle erişir oldu. Daha da abartılmışı olarak hesap makinesi, “profesör” muamelesi bile gördü bu arama motorları. Örneğin “Bu akşam tv’de ne var?”, “necip hablemitoğlu kimdir?” fln gibi soru işaretli arama sorguları yapanlar da olmadı değil 🙂

Çoğu site için “gelen ziyaretçi kaynağı” eskiden doğrudan trafikken 90’larda bağlantı olmaya başladı ve 2000’den sonra büyük bir yüzde farklı ile arama motorları olmaya başladı. Hatta site yöneticileri sitelerinde “arama motorlarından gelen anahtar sözcükler”e göre içeriklerini değiştirmeye başladı. Buraya kadar biraz tarih işledik, sadede geleyim :

Artık bir site için arama motorlarındaki sırası bile bir değerlendirme kriteri. Daha doğrusu “ziyaretçi sayısını artırmak” veya “doğru arama sonuçlarında çıkmak” için insanlar daha fazla çaba göstermeye başladı. Bu amaca göre değişik teknikler kullanılmaya başlandı. Eskiden html meta etiketleri, sayfa başlığı ve içerikteki sadeliğe gösterilmeyen önem arttı. URL’lerin şekilleri değişti. Bağlantı şekilleri değişmeye başladı 🙂

Bu dökümanda sitenizi optimize ederek arama motorlarında doğru aramalarda çıkmak için yapmanız gereken birkaç anahtar noktayı anlatacağım. Önce sosyal noktalara değinelim, yani işin tekniğinden çok mantalitenizi belirleyen kriterleri gözden geçirelim.

Sade html yazın, css kullanın

Sayfa arayüzlerini oluştururken veya daha güzel arayüzler çizmek için çok fazla etiket, tablo vs kullanırdık. Kullanıyoruz da bazen. Ancak arama motorları her ne kadar etiketleri algılayıp işlem yapsa da en sade olanı en iyi indexleyecektir. Onun için arayüz çizdirirken css kullanın. Okumaya devam et “SEO Optimizasyonu”