Bugüne kadar pek çok Firefox eklentisi ile, "plug-in"i ile
karşılaşmıştım ancak hiçbiri beni GreaseMonkey kadar heyecanlandırmamıştı.
Hiçbirini bu kadar güçlü bir araç olarak görmemiştim. Hiçbiri
benim gibi bir programcıya çok fazla hitap etmemişti. Hiçbirinin
bu kadar fark yaratacağını düşünmemiştim.
GreaseMonkey temelde basit bir fikre dayanıyor ve iyi uygulanmış
pek çok basit fikir gibi gayet etkili, gücü, basitliğinde belki
de. Yaptığı şey, Firefox'a gelen bir sayfanın istemci yani
kullanıcı tarafında programlanabilir şekilde düzenlenmesi. Bir
başka deyişle sevdiğiniz bir sitenin görüntüsünden, tasarımından
tutun da işlevselliğine dek hemen her şeyi, o sitenin sunucu
tarafını etkilemeyecek ve site programcılarının ruhu dahi
duymayacak şekilde kendi kafanıza göre değiştirebiliyorsunuz.
IMDB'de bulduğunuz bir artistin isminin hemen yanında yaşının
da görünmesini ister misiniz? Mümkün. Ya da Amazon.com'da
gezinirken gördüğünüz kitapların yanında rakip satıcıların
verdiği fiyatların görünmesine ne dersiniz? Bu da mümkün. Slashdot'un
tasarımı ve bazı blokları, sütunları hoşunuza gitmedi mi ve
de bazı işlevsellikler mi eklemek istiyorsunuz? Hay hay, GreaseMonkey
varsa, her türlü maymunluk da var. Artık güç tamamı ile son
kullanıcıda ve farklı bir görüntü ya da tonla işlevsellik için
ilgili web sitesini ya da siteyi yapan programcıların keyfini
beklemek zorunda değiliz. Bir kez daha Internet teknolojileri
özgürlüğü genele yaymak için çalışıyor ve Firefox dolayısı ile Mozilla
ekibi gönüllerimizdeki yerini sağlamlaştırıyor.
Yukarıda anlatılan güce nasıl erişeceğiz? Bunun için tabii ki
ruhumuzu satmamıza ya da karanlık tarafa geçmeye gerek, yapılması
gereken tek şey GreaseMonkey isimli Firefox eklentisini
şu adresten kurmak:
http://greasemonkey.mozdev.org.
Daha önceki Firefox eklentilerini (extension) nasıl kurdu iseniz GreaseMonkey
de benzer şekilde kuruluyor, yok eğer Firefox'u olduğu gibi kullanıyorsanız
ve daha önce herhangi bir ek kurmadı iseniz o zaman da gözünüz korkmasın
tek yapmanız gereken sayfadaki "Install GreaseMonkey 0.3.3." linkine
tıklamak ve Firefox'un .xpi dosyasını yüklemesini izlemek. Unutmamanız
gereken tek şey ise eklenti yüklendikten sonra Firefox'u bir kapatıp
açmanız gerektiği (GNU/Linux kullananlar kızacak, MS Windows kullananlar
ise gayet doğal karşılayacaktır sanırım ;-)
Her şey yolunda gitti ise, Firefox'u yeniden başlattığınızda
üstteki ana menüden Tools menüsünü açtığınızda "Install User Scripts...",
"Manage User Scripts..." gibi öğelerin eklendiğini görürseniz GreaseMonkey
yüklenmiş demektir.
GreaseMonkey yüklendiğine göre artık pek çok site için hazırlanmış
pek çok GreaseMonkey betiğinden ('script'inden) birini ya da birkaçını
seçebilirsiniz. IMBD, GMail, Yahoo, DeviantArt, Slashdot gibi yüzlerce
popüler siteyi çok daha farklı ve işlevsel görmek isterseniz yapmanız
gereken tek şey uluslararası GreaseMonkey betik deposuna gitmek
ve betiklerden betik beğenmek:
http://dunck.us/collab/GreaseMonkeyUserScripts.
Yukarıdaki adresi ziyaret ettiğinizde ve pek çok GM (GreaseMonkey) betiği
ile karşılaştığınızda size uygun gelenleri yüklemek için tek
yapmanız gereken ilgili betik dosyasının üzerine gelip (.user.js uzantılı
linkler) sağ tıklayıp gelen menüden "Install User Script" maddesini
seçmek. İşte bu kadar. Hayır, Firefox'u bu tür işler için yeniden
başlatmanıza gerek yok (çok şükür! ;-)
Tabii eğer yüklediğiniz GM betiklerinden biri hoşunuza gitmez ya da
geçici bir süreliğine bunun etkisinden kurtulmak isterseniz tek yapmanız
gereken Firefox ana menüsündeki Tools menü maddesini seçip "Manage User Scripts"
seçeneğinden GM betikleri yöneticisini kullanarak dilediğiniz betiği durdurmak
ya da çıkarmak. Güç sizinle.
Programcılar için GreaseMonkey
Yukarıdakiler son kullanıcılar için yeterli olabilir ancak
GM gibi güçlü bir araç söz konusu olduğunda başkalarının
hazırladığı GM programları ile sınırlı değilsiniz. Kolayca kendi GM
betiklerinizi yazmamanız için bir sebep yok. Eğer biraz HTML, JavaScript ve XPath
biliyorsanız kolları sıvayıp favori sitelerinizi "dönüştürmeye" ve
sonra da yaptıklarınızı .user.js uzantılı dosyalara kaydedip arkadaşlarınızla
paylaşmaya başlayabilirsiniz.
GM için tavsiye edilebilecek en iyi başlangıç öğreticisi (Python'dan esinlenerek)
Dive Into GreaseMonkey isimli kitap. Bu güzel kitaba
http://diveintogreasemonkey.org adresinden
erişebilir ve HTML ya da PDF olarak okuyabilirsiniz. Adım adım takip ettiğiniz
takdirde kısa sürede GM programcısı olmanız mümkün. Buradaki bilgileri özümsedikten
sonra hazır GM betiklerini de inceleyerek deneyim kazanbilirsiniz.
Bunca laf ettikten basit bir örnek vermemizde fayda var. Örneğimizde favori sitemiz
olan fazlamesai.net'e küçük bir neşter atacağız. Yapacağımız şey tepedeki (resmin
hemen altında) link çubuğuna müdahalede bulunmak ve FM TV linkini kaldırıp bunun
yerine hesaplattığımız toplam yorum adedini bastırmak (sadece o anda ana sayfada
görünen haberlerin yorumları).
Bunun için yapmamız gereken ilk şey tabii ki FM TV yazısına ulaşabilmek. XPath
burada devreye giriyor:
var allLinks, thisLink;
allLinks = document.evaluate(
'//a[@href='http://fazlamesai.net/modules.php?name=News&new_topic=54']',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
thisLink = allLinks.snapshotItem(0);
Firefox, GreaseMonkey ve XPath sayesinde artık thisLink değişkeni
fazlamesai.net sitesindeki ilk FM TV yazısına (linkine) işaret ediyor. İşin
püf noktası ise
//a[@href='http://fazlamesai.net/modules.php?name=News&new_topic=54']
satırında gizli. XPath bilgisinin faydalı olacağını söylerken bunu kast
ediyordum. XPath dilini kullanarak bir HTML belgesi üzerinde örüntü işleme
yapmanız mümkün (pattern matching). XPath'e çok basit ve somut bir giriş
için
bu adrese
göz atabilirsiniz.
Artık değiştireceğimiz linki bulduğumuza göre yorum saydırma işine geçebiliriz:
var CommentCounter = 0;
var str = document.body.innerHTML.match(/[0-9]+ yorum/g);
for (i = 0; i < str.length; i++) {
var CommentCount = str[i].match(/[0-9]+/);
CommentCounter += parseInt(CommentCount);
}
Biraz JavaScript ve biraz da RegEx (Regular Expressions - Düzenli İfadeler)
bilgisi ile "xxx yorum" kalıbına uyan metinleri elde ediyor ve sonra
da sayı kısmını çekip toplamı elde ediyoruz (tabii siz de pis pis sırıtıyorsunuz,
gider haber metninin içine ya da bir ana sayfada görüntülenen
bir forum başlığına "197 yorum" lafını sokuştururum ve böylece senin betik patlar,
kötüyüm ben çoook kötü! :).
Ve sıra geliyor FM TV yazısını tepedeki yerinden alaşağı edip yerine elde ettiğimiz
sayıyı yazmaya, bunu da thisLink'in gösterdiği nesnenin innerHTML özelliğine
erişerek yapmamız mümkün:
thisLink.innerHTML = 'Yorum adedi: ' + CommentCounter;
Artık yapılması gereken yukarıdaki işlevselliği bir GM betik dosyası içine
uygun şekilde yerleştirmek:
// ==UserScript==
// @name fazlamesai
// @namespace http://fazlamesai.net
// @description example script to alert "Hello world!" on every page
// @include http://fazlamesai.net/
// @include http://www.fazlamesai.net/
// @exclude http://diveintogreasemonkey.org/*
// @exclude http://www.diveintogreasemonkey.org/*
// ==/UserScript==
var CommentCounter = 0;
var str = document.body.innerHTML.match(/[0-9]+ yorum/g);
for (i = 0; i < str.length; i++) {
var CommentCount = str[i].match(/[0-9]+/);
CommentCounter += parseInt(CommentCount);
}
var allLinks, thisLink;
allLinks = document.evaluate(
'//a[@href='http://fazlamesai.net/modules.php?name=News&new_topic=54']',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
thisLink = allLinks.snapshotItem(0);
thisLink.innerHTML = 'Yorum adedi: ' + CommentCounter;
GM betiğinin tepesinde gördüğümüz ve ==UserScript== ile
==/UserScript== arasında kalan bölge betiğe dair meta bilgi
içermekte ve betiğin hangi koşullar altında çalışacağını belirtmekte.
Bizim örneğimizde fazlamesai isimli bu GM betiği fazlamesai.net ana
sayfa için çalışmaya ve diveintogreasemonkey.org için çalışmamaya
ayarlı (evet biliyorum, ben çok tembel bir adamım, huyum kurusun).
Şimdi, GM'nin etkisini kendi başınıza test etmek için lütfen yeni bir Firefox
sayfasında
fazlamesai.net sitesini açın
ve tepedeki resmin altında yer alan link menüsüne dikkat edin: "Forumlar | Haber Yolla | Hesabınız |
İletişim | İstatistikler | Arama | FM TV" gibi bir link dizisi göreceksiniz. Eğer yukarıdaki
GM betiğini hemen denemek isterseniz ve Firefox için GreaseMonkey kurduysanız
bu linke sağ tıklayıp
"Instal User Script..." maddesini seçin ve karşınıza çıkan pencerenin altındaki OK düğmesine
basın. Her şey yolunda gitti ise size "Success! Refresh page" gibi minik bir uyarı
penceresi çıkaracak, OK deyip geçin ve fazlamesai.net'i açtığınız sayfaya gidip
FM sitesini yeniden yükleyin ve resmin hemen altında gelen link satırının son öğesine
dikkat edin. Artık FM TV yerine "Yorum adedi: XXX" gibi bir şey yazdığını göreceksiniz.
Sonuç
GM ile yukarıda görüldüğü gibi pek çok şey gerçekleştirmeniz mümkün, tamamen
hayal gücünüzle sınırlısınız. Uluslararası GM deposuna baktığımda meşhur
Türk Internet siteleri için yazılmış GM betiklerine pek rastlamadım, bu da
demek oluyor ki yetenekli JavaScript programcıları Türkiye'deki siteler için
de pek çok şey yapabilirler.
Önceki bölümde çok çok basit şekilde FM sitesinin nasıl değiştirilebileceğini
gösterdikten sonra şöyle bir teklifte bulunuyorum: FM'yi çok daha faydalı
ve işlevsel kılacak GM betiklerini yazıp paylaşmaya ne dersiniz? Unutmayalım
ki FM sadece FazlaMesai değil aynı zamanda
Fark yaratalı
M demek ;-)
Fonda Jethro Tull'ın "Steel Monkey" parçası çalarken GM ile yapılabilecek
fantastik işleri düşünüyor ve bu makalenin güzelliklere yol açması ümidi ile
herkese iyi günler diliyorum...
Emre "FZ" Sevinç
emres at bilgi nokta edu nokta tr
2005-05-31
Yorumlar yazarlarına aittir. İçeriklerinden hiçbir şekilde sorumlu değiliz.