Izgleda da je ovo tjedan 5 lajnera u pythonu. Anywho, radim neki backend za jedan hax0rski portal. U biti, radim neuspješnu reinkarnaciju Metafeeda-a u vidu naslovnice za site Razmjena vještina. Svečana prezentacija bi trebala biti na "Ništa se neće dogoditi". Nakon toga siguran sam da će to biti vaš prvi (ako ne i jedini) feed uz koji ćete ujutro pijuckati kavu.

Daklem... jedna od stvari koja mi treba za backend portala je operacija "uzmi mi random sliku sa images.google.com". Mislio sam da će biti nekog HTML parsanja sa BeautifulSoup ali moj dragi Google me lijepo iznenadio. Pljunu natrag gomilu JavaScripta koji izgenerira stranicu u samom Browseru. Koristeći najobičniji regular expression uzmem sadržaj tog JavaScript Arraya (kao string). Zgodno je što je u ovom slučaju sintaksa za Array polja u JavaScriptu identična Pythonovim listama pa iskoristim običan Pythonov eval da od toga dobijem Pythonovu listu. Da sam i imao želju za Djeda Mraza (iliti lika sa Coca-Coline reklame) ne bi bilo ovako lako na kraju.

Naravno, cijela ova fora će raditi dok Google ne odluči promjeniti sintaksu. Cilj skripte je pokazati ukratko kako sam rješio problem dobivanja URL-a slike (a i da popunim blog ovom trivijalijom). Zbog toga i nisam onečistio code sa provjerama u slučaju grešaka i neispravnih rezultata. Baš mi nešto i ne radi num argument za podešavanje broja rezultata na stranici. Zato koristim argument -p koji mi kaže na koju stranicu rezultata da odem.

Upotreba:

skini.py -p 4 krava muzara
skini.py -r svinjska gripa
 

Skripta skini.py:

#!/usr/bin/python

import urllib2, urllib, re, sys, getopt, random

def fetchURL(query, start = 0):
    req = urllib2.Request('http://images.google.com/images?hl=en&q=%s&gbv=2&aq=f&oq=&aqi=g10&start=%s' % (urllib.quote_plus(query), start))
    req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1pre) Gecko/20090701 Ubuntu/8.10 (intrepid) Shiretoko/3.5.1pre')
    req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
    req.add_header('Accept-Language', 'en-us,en;q=0.5')
    req.add_header('Accept-Encoding', 'deflate')
    req.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7')
    req.add_header('Connection', 'close')
    r = urllib2.urlopen(req)
    data =  r.read()
    return data

def parseImages(data):
    p = re.compile(";dyn\.setResults\(\[(.+)\]\);\<\/script\>")
    m = p.search(data)
    lst = eval(m.group(1))
    return lst

if __name__ == '__main__':
    try:
        optlist, args = getopt.getopt(sys.argv[1:], 'rp:')
    except getopt.GetoptError, err:
        print "skini.py [-p <page number>] [-r] args\n"
        print str(err)
        sys.exit(-1)
    start, isRandom = 0, False
    for arg, value in optlist:
        if arg == '-p': start = value
        if arg == '-r': isRandom = True
    data = fetchURL(' '.join(args), start = start)
    images = parseImages(data)
    if not isRandom:
        for img in images:
            print img[3]
    else:
        print random.choice(images)[3]
 

Numero uno

Fri, 08/08/2008 - 09:40 | Add new comment

Za one koji ne znaju "Kulturpunkt" je kulturni portal orjentiran na nezavisnu scenu. Ako ste prije voljeli čitati "Nomad" rubrika "Poptika" bi kao mjesto gdje "Tonći Kožul" povremeno nešto objavi mogla biti just the mjesto za vas (da samo vidite kako statistika skače taj dan kad najave njegov članak na monitor.hr-u). Povijest zašto i kako sam ja sve bio angažiran oko ovog projekta je preduga ali trenutno sam kao "the lik" koji radi site i brine se za sve one popratne poslove oko održavanja i supporta. Odgovoran za neke nelogičnosti i glitčeve u siteu zbog nedovoljnog poznavanja CSS-a i povremene grafičke uratke smontirane u GIMP-u (obratite pažnju na crnu slikicu koja kaže REKLAMA u gornjem kutu....a..a.. jelda!)


Uglavnom nakon dosta muke i ponajviše mog odugovlačenja prešli smo na novi redesign (koji još nije ni dovršen... da, uskoro tagovi i na vašem omiljenom kulturnom portalu!). Napokon smo FRAME-ovima i Java Script magiji resizeanja rekli doviđenja, nema više stotina malih slikica već je sve čisti text + css, prešli smo na pametnije URL mapiranje (čim nadjem malo vremena i taj će se dio poboljšati), prešli sa mi2 servera na croadriju, stavili CAPTCHA da nas ne spamaju svakojaki botovi, iskoristili neke vanjske sisteme kao što je flickr i google calendar itd.. itd... Bio je to jedan dugi put nečije edukacije i jelte tako razvoja, ali sad su se stvari nekako pročistile na puno različitih mjesta i sve nekako puno bolje funkcionira.

Sve u svemu, nakon dosta godina "a zašto se mi ne vidimo na googleu" su se stvari promjenili. Kad se upiše (ok, ja imam ipak personaliziran google search koji prati što ja inače tražim) ta lijepa hrvatska riječ "kulturpunkt" se dobije ono što se godinama trebalo dobiti! Sreći i veselju među kulturpunktašima nema kraja! To definitivno zahtjeva neko slavlje. Ali to nije sve! Ako pogledate malo bolje vidjet ćete na slici da se sad vide kod searcha i posebne kategorije sitea! Sad si sigurno mrmljate u bradu "super je to Aco, ali što sa svim onim starim referencama na članke na siteu! sad kad si stavio novo URL mapiranje to više neće raditi!". Marljivi umovi u binarnome labu su i tome doskočili na kraj! Radit će isto kao i prije i kao dodati feature će vas redirektirati na novi URL! Pitam ja vas, zar ste više mogli očekivati od vašeg kulturnog portala?!

Eto... uživajte u novostima na siteu a ja uskoro poispravljam i neke bugove i nedostatke koji su se zamjetili.

Tags: