osa1 feed

Nautilus için CleanCSS scripti

December 19, 2010 - Tagged as: python, tr.

Yarın fizik finalim var ve nautilus için basit bir CleanCSS scripti yazdım.

Scriptin yaptığı şey, seçtiğiniz CSS dosyasını CleanCSS’e gönderip, çıktığı isminde bir değişiklik yaparak gönderdiğiniz dosyayla aynı yere kaydediyor. Sıkıştırma düzeyi, satır 19’da belirtiliyor(default 3, yani en küçük çıktıyı alırsınız).

Program çok küçük olduğu için kodu buraya yapıştıracağım. Yapmanız gereken, scripte istediğiniz adı verip(formatı olmak zorunda değil, .py gerekli değil yani), çalıştırılabilir hale getirip, ~/.gnome2/nautilus-scripts/ klasörüne atmak. Daha sonra 1 veya daha fazla CSS dosyasını seçip sağ tıklayıp nautilus scriptleri bölümünden bu scripti seçmek.

#!/usr/bin/env python
import mechanize, BeautifulSoup, os.path
dosyalar = [f.strip() for f in os.environ['NAUTILUS_SCRIPT_SELECTED_URIS'].split('file://') if len(f) > 0]
#dosyalar = ["/home/osa1/Desktop/deneme.css"]
forms = mechanize.ParseFile(mechanize.urlopen("http://www.cleancss.com"), "http://www.cleancss.com")
form = forms[^0]for dosya in dosyalar:
    dosya_ = open(dosya, "r")
    css = dosya_.read()
    dosya_.close()
    form["css_text"] = css
    template = form.find_control("template", type="select")
    template.value = ["3"] # s1k1st1ma seviyesi
    request = form.click()
    response = BeautifulSoup.BeautifulSoup(mechanize.urlopen(request).read())
    yeni_kod = "".join(response.findAll("code")[^0]text.split("\n"))
    yeni_kod = unicode(BeautifulSoup.BeautifulStoneSoup(yeni_kod,
        convertEntities=BeautifulSoup.BeautifulStoneSoup.HTML_ENTITIES)) 
    dosya_adi = os.path.basename(dosya_.name).split(".")[^0]    yeni_dosya_adi = os.path.join(os.path.dirname(dosya_.name), dosya_adi + "_duzenli.css")
    yeni_dosya = open(yeni_dosya_adi, "w")
    yeni_dosya.write(yeni_kod)
    yeni_dosya.close()

Bu arada, bağımlılıklar mechanize ve BeautifulSoup. İkisi de Ubuntu(ve sanırım Debian) depolarında var. Paket adları; python-mechanize ve python-beautifulsoup. Bu boyutta bir program için bağımlılıklar biraz abartı kaçmış gibi gözükebilir, ama zaten bu kütüphaneleri kullandığım için script bu boyutta.

Bu arada, iki kütüphane de mükemmel. BeautifulSoup’un zaten hastasıyız, uzun süredir kullanıyordum, mechanize’ı da bu iş için keşfettim. Webde neredeyse tarayıcı rahatlığında gezinmenizi sağlıyor. Aslında sanırım html parse için de kullanılabiliyor, ben BeautifulSoup bildiğim için hiç dökümantasyon okumakla falan uğraşmak istemedim, onu kullandım.

Asıl amacım bu scripti Vim için yazmaktı. Kendi belirlediğim bir kısayol tuşuyla .css formatlı dosyalara bu işlemi yapacaktım, fakat henüz Vim’e Python ile nasıl eklenti yazabileceğimi çözebilmiş değilim. Ondan önce birkaç deneme yapayım dedim, ortaya bu çıktı.

küçük bir bug düzeltildi