Redaktor:Wizzo-Bot/wizzo-bot planetka.py


#!/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()