Redaktor:Wizzo-Bot/wizzo-bot planetka.py
Vzhled
#!/usr/bin/python2.4 # -*- coding: utf-8 -*- import urllib2, wikipedia, string from atomobot_language import AtomobotLanguageSlovak lang = AtomobotLanguageSlovak() print u"Od akej planétky mám začať? "; MIN = int( input() ) print u"Pri akej planétke mám skončiť? "; MAX = int( input() ) pripravene_planetky = {} def vygeneruj_rozpatie( cislo ): start = ( ( cislo - 1 ) / 250 ) * 250 + 1 koniec = start + 249 return u'%s-%s' % ( start, koniec ) def vytvor_planetku( cislo ): planetka = pripravene_planetky[ cislo ] predch_planetka = pripravene_planetky[ cislo-1 ] nasl_planetka = pripravene_planetky[ cislo+1 ] udaje = {} udaje.update(planetka) udaje['nazov_predch'] = predch_planetka['nazov'] udaje['nazov_nasl'] = nasl_planetka['nazov'] udaje['kat_rozpatie'] = vygeneruj_rozpatie( cislo ) clanok = u"""{{Planétka | Meno = %(nazov)s | Absolútna veľkosť = %(velkost)s | Albedo = %(albedo)s | Rozmery = %(priemer)s | Objaviteľ = %(objav)s | Dátum objavenia = %(datum)s | Označenie = %(oznacenie)s | Kategória = | Epocha = [[Juliánsky dátum|JD]] %(epocha)s | Excentricita = %(excentricita)s | Veľká polos = | Perihélium = %(perihelium)s [[AU]] | Afélium = | Obežná doba = | Obežná rýchlosť = | Uhol sklonu dráhy = %(uhol)s° | Dĺžka výstupného uzla = %(uzol)s° | Argument perihélia = %(argument)s° | Stredná anomália = | Hmotnosť = | Hustota = | Gravitácia = | Úniková rýchlosť = | Rotačná perióda = | Spektrálna trieda = | Teplota = | }} '''%(nazov)s''' je [[planétka]] s priemerom %(priemer)s, ktorú objavil %(objav)s %(datuma)s. {{navigátor|%(nazov_predch)s|%(nazov_nasl)s}} {{astronomický výhonok}} [[Kategória:Planétky %(kat_rozpatie)s]] [[en:%(nazov)s]] """ % udaje site = wikipedia.getSite() stranka = wikipedia.Page( site, planetka['nazov'] ) povodny = stranka.get() print clanok if stranka.exists() and (len(povodny) > 256): return if planetka['vsetko_ok']: stranka.put(clanok, u"pridanie planétky") def upravmeno( meno ): if not meno.endswith('.'): meno += '.' priezvisko, mena = meno.split(', ') return mena + ' ' + priezvisko def priprav_planetku( params, objavs, elems ): param = params.split() objav = objavs.split() elem = elems.split() planetka = {} planetka['cislo'] = int( params[:6] ) if objavs[9:29] != " ": planetka['nazov'] = "%s %s" % ( params[:6], objavs[9:29] ) else: planetka['nazov'] = "%s %s" % ( params[:6], params[7:24] ) planetka['nazov'] = planetka['nazov'].strip() planetka['velkost'] = lang.format_number( params[24:30], 2 ) planetka['albedo'] = lang.format_number( params[30:35], 2 ) planetka['priemer'] = "%s km" % lang.format_number( params[43:49], 0 ) objav_mes = int( objavs[46:48] ) objav_den = int( objavs[49:51] ) objav_rok = int( objavs[41:45] ) datum_mes = lang.MONTH_NAME[ objav_mes ] datuma_mes = lang.MONTH_NAME_GEN[ objav_mes ] planetka['datum'] = "[[%s. %s]] [[%s]]" % ( objav_den, datum_mes, objav_rok ) planetka['datuma'] = "[[%s. %s|%s. %s]] [[%s]]" % ( objav_den, datum_mes, objav_den, datuma_mes, objav_rok ) planetka['obj'] = objavs[78:-1] # retazec obsahujuci objavitela if ".," in planetka['obj']: # ak je to viac mien planetka['obj'] = planetka['obj'].split( "., " ) # rozdel to na mensie planetka['objav'] = "" for i in planetka['obj']: planetka['objav'] += "[[%s]], " % upravmeno( i ) planetka['objav'] = planetka['objav'][:-2] else: if "," in planetka['obj']: # ak je to aspon jedno meno planetka['objav'] = "[[%s]]" % upravmeno( planetka['obj'] ) else: planetka['objav'] = "[[%s]]" % planetka['obj'] # ak je to univerzita alebo observatorium planetka['oznacenie'] = objavs[29:40].strip() planetka['epocha'] = lang.format_number( elem[7], 1 ) planetka['argument'] = lang.format_number( elem[2], 7 ) planetka['uzol'] = lang.format_number( elem[3], 7 ) planetka['uhol'] = lang.format_number( elem[4], 7 ) planetka['excentricita'] = lang.format_number( elem[5], 7 ) planetka['perihelium'] = lang.format_number( elem[6], 7 ) planetka['vsetko_ok'] = param[0] == elem[0] == objav[0][1:-1] pripravene_planetky[planetka['cislo']] = planetka def main(): parametre = urllib2.urlopen('http://www.psi.edu/pds/archive/astdata04/simps04/addl.tab') objavitel = urllib2.urlopen('http://cfa-www.harvard.edu/iau/lists/NumberedMPs000001.html') elementy = urllib2.urlopen('http://www.psi.edu/pds/archive/astdata04/simps04/elem3.tab') for i in range( MIN - 2 ): parametre.readline() for i in range( MIN + 20 ): objavitel.readline() for i in range( MIN - 2 ): elementy.readline() for i in range( MAX - MIN + 3 ): params = parametre.readline() objavs = objavitel.readline() elems = elementy.readline() priprav_planetku( params, objavs, elems ) cisla = pripravene_planetky.keys() cisla.sort() for i in cisla[1:-1]: vytvor_planetku( i ) main()