Jump to content


Sr. ARM

Member Since 03/07/2011
Offline Last Active 16/07/2014, 13:05
-----

Topics I've Started

Webservice Infraero

30/11/2012, 20:18

Achei este código em python https://github.com/e...ter/Infraero.py
Porém preciso que este gere um xml pra cada voo.
Como faço?


Uso:

importação Infraero
infra Infraero.Harvester = ()
vôo = infra.request_flight ('SBSP', 3100)
aeroporto = infra.request_airport ('SBSP')
'' '
__all__  =  [ 'ceifa' , 'Formater' ]

importar  cookielib
importação  urllib2
importar  urllib
de  HTMLParser  importação  HTMLParser
importar  re

classe  RequestVarsHTMLParser ( HTMLParser ):
    def  __init__ ( auto ):
        HTMLParser . __init__ ( auto )
        auto . requestvars  =  []

    def  handle_starttag ( auto ,  tag ,  attrs ):
        se  ( tag  ==  'input' ):
            dic  =  dict ( attrs )
            se  dic . obter ( 'nome' )  em  [ '__VIEWSTATE' ,  '__EVENTVALIDATION' ]:
                auto . requestvars . append ( tuple ([ dic . obter ( 'nome' ), dic . obter ( 'valor' )]))
                
    def  get_request_vars ( auto ):
        retornar  auto . requestvars

classe  FlightDataHTMLParser ( HTMLParser ):
    def  __init__ ( auto ):
        HTMLParser . __init__ ( auto )
        auto . OpenSpan  =  ''
        auto . openpagination  =  False
        auto . flightdata  =  []
        auto . vôos  =  []
        auto . pagedate  =  ''
        auto . pagemax  =  0
        auto . re_name  =  re . compilação ( "_ ([^ _] *) (_voo |) $" )
        auto . re_page  =  re . compilação ( "javascript: __doPostBack \ ('grd_voos', 'Página \ $ ([0-9] +)' \)" )

    def  handle_starttag ( auto ,  tag ,  attrs ):
        auto . OpenSpan  =  ''
        se  ( tag  ==  'extensão' ):
            dic  =  dict ( attrs )
            se  ( dic . has_key ( "id" )):
                se  ( dic . obter ( "id" ) . startswith ( 'grd_voos_ctl' )  ou  ( dic . obter ( "id" )  ==  'lbl_data_pagedate' )):
                    auto . OpenSpan  =  dic . ficar ( "id" )

        elif  ( tag  ==  'tr' ):
            dic  =  dict ( attrs )
            se  ( dic . has_key ( "classe" )):
                se  ( dic . obter ( "classe" )  ==  'pagina' ):
                    auto . openpagination  =  Verdadeiro

        elif  ( auto . openpagination ):
            se  ( tag  ==  "a" ):
                dic  =  dict ( attrs )
                se  ( dic . has_key ( 'href' )):
                    página  =  auto . re_page . pesquisa ( dic . obter ( 'href' ))
                    se  ( página  =!  Nenhum ):
                        página  =  int ( página . grupo ( 1 ))
                        se  ( página  >  auto . pagemax ):
                            auto . pagemax  =  página

    def  handle_data ( auto ,  dados ):
        se  ( auto . OpenSpan  ==  'lbl_data_pagedate' ):
            auto . pagedate  =  dados
        elif  ( auto . OpenSpan  =!  '' ):
            chave  =  auto . re_name . pesquisa ( auto . OpenSpan ) . grupo ( 1 ) . diminuir ()
            auto . flightdata . append ( tupla ([ chave , dados ]))
            se  ( auto . OpenSpan . startswith ( 'grd_voos_ctl' )  e  auto . OpenSpan . endswith ( 'Estado' )):
                auto . vôos . anexar ( auto . flightdata )
                auto . flightdata  =  []
        se  ( auto . OpenSpan  =!  '' ):
            auto . OpenSpan  =  ''

    def  get_flights ( auto ):
        retornar  auto . vôos
    
    def  get_date ( auto ):
        retornar  auto . pagedate
    
    def  get_pages ( auto ):
        retornar  auto . pagemax

classe  Harvester :
    def  __init__ ( auto ):
        biscoito  =  cookielib . cookiejar ()
        auto . abridor  =  urllib2 . build_opener ( urllib2 . HTTPCookieProcessor ( biscoito ))
        auto . pagedate  =  ''
        auto . pagemax  =  0
        auto . requestvars  =  []

    def  get_date ( auto ):
        retornar  auto . pagedate

    def  get_pages ( auto ):
        retornar  auto . pagemax

    def  request_session_page ( auto , url ):
        pedido  =  auto . abridor . abrir ( url , urllib . urlencode ( auto . requestvars ))
        dados  =  pedido . ler ()
        analisador  =  RequestVarsHTMLParser ()
        analisador . alimentação ( de dados )
        analisador . fechar ()
        auto . requestvars  =  analisador . get_request_vars ()

    def  request_start ( auto ):
        auto . pagedate  =  ''
        auto . request_session_page ( 'http://www.infraero.gov.br/voos/index.aspx' )

    def  request_intermediate ( auto ,  alvo ):
        gerente  =  'atualização |'  +  alvo
        auto . request_start ()
        auto . requestvars . append ( tuple ([ 'ScriptManager1' ,  gerente ]))
        auto . requestvars . append ( tuple ([ '__EVENTTARGET' ,  alvo ]))
        auto . requestvars . append ( tuple ([ '__EVENTARGUMENT' ,  '' ]))
        auto . requestvars . append ( tuple ([ 'opcoes' ,  '0 ' ]))
        auto . requestvars . append ( tuple ([ 'pode_pesquisar_aeroporto' ,  'S' ]))

        auto . request_session_page ( 'http://www.infraero.gov.br/voos/index.aspx' )

    def  request_data_page ( auto , url ):
        pedido  =  auto . abridor . abrir ( url , urllib . urlencode ( auto . requestvars ))
        dados  =  pedido . ler ()
        analisador  =  RequestVarsHTMLParser ()
        analisador . alimentação ( de dados )
        analisador . fechar ()
        auto . requestvars  =  analisador . get_request_vars ()

        analisador  =  FlightDataHTMLParser ()
        analisador . alimentação ( de dados )
        analisador . fechar ()

        se  ( auto . pagedate  ==  '' ):
            auto . pagedate  =  analisador . get_date ()
        se  ( auto . pagemax  <  analisador . get_pages ()):
            auto . pagemax  =  analisador . get_pages ()

        voltar  analisador . get_flights ()    

    def  request_airport_pages ( auto ,  aeroporto ,  página ):
        argumento  =  'Página $'  +  str ( página )
        auto . requestvars . append ( tuple ([ 'ScriptManager1' ,  'update_grid | grd_voos' ]))
        auto . requestvars . append ( tuple ([ '__EVENTTARGET' ,  'grd_voos' ]))
        auto . requestvars . append ( tuple ([ '__EVENTARGUMENT " ,  argumento ]))
        auto . requestvars . append ( tuple ([ 'opcoes' ,  '0 ' ]))
        auto . requestvars . append ( tuple ([ 'dpl_aeroporto' ,  aeroporto ]))
        auto . requestvars . append ( tuple ([ 'txt_num_voo' ,  '' ]))
        auto . requestvars . append ( tuple ([ '__LASTFOCUS' ,  '' ]))

        retornar  auto . request_data_page ( 'http://www.infraero.gov.br/voos/index_2.aspx' )

    def  request_flight ( auto ,  aeroporto ,  vôo ):
        auto . pagemax  =  1

        vôo  =  ''  +  str ( vôo )
        enquanto  ( len ( vôo )  <  5 ):
            vôo  =  '0 '  +  vôo

        auto . request_intermediate ( 'hl_3' )
        auto . requestvars . append ( tuple ([ 'ScriptManager1' ,  'update | btn_aeroporto' ]))
        auto . requestvars . append ( tuple ([ '__EVENTTARGET' ,  '' ]))
        auto . requestvars . append ( tuple ([ '__EVENTARGUMENT' ,  '' ]))
        auto . requestvars . append ( tuple ([ 'opcoes' ,  '0 ' ]))
        auto . requestvars . append ( tuple ([ 'pode_pesquisar_aeroporto' ,  'S' ]))
        auto . requestvars . append ( tuple ([ 'aeroportos_chegada_1' ,  aeroporto ]))
        auto . requestvars . append ( tuple ([ 'txt_num_voo' , vôo ]))
        auto . requestvars . append ( tuple ([ 'txt_water_box_ClientState' ,  '' ]))
        auto . requestvars . append ( tuple ([ 'btn_aeroporto " ,  "Consultar V \ xc3 \ XB4 os " ]))

        retornar  auto . request_data_page ( 'http://www.infraero.gov.br/voos/index.aspx' )
    
    def  request_airport ( auto ,  aeroporto ):
        auto . pagemax  =  1

        auto . request_intermediate ( 'hl_1' )
        auto . requestvars . append ( tuple ([ 'ScriptManager1' ,  'update | btn_aeroporto_3' ]))
        auto . requestvars . append ( tuple ([ '__EVENTTARGET' ,  '' ]))
        auto . requestvars . append ( tuple ([ '__EVENTARGUMENT' ,  '' ]))
        auto . requestvars . append ( tuple ([ 'opcoes' ,  '0 ' ]))
        auto . requestvars . append ( tuple ([ 'pode_pesquisar_aeroporto' ,  'S' ]))
        auto . requestvars . append ( tuple ([ 'aero_companias_1' ,  aeroporto ]))
        auto . requestvars . append ( tuple ([ 'btn_aeroporto_3 " ,  "Consultar V \ xc3 \ XB4 os " ]))

        dados  =  auto . request_data_page ( 'http://www.infraero.gov.br/voos/index.aspx' )

        i  =  1
        enquanto  ( i  <  auto . pagemax ):
            i  =  i + 1
            dados  =  dados  +  auto . request_airport_pages ( aeroporto ,  i )

        retornar  dados

classe  Formater :
    def  __init__ ( auto ,  vôos ):
        auto . vôos  =  vôos

    def  print_table_row ( auto ,  vôo ,  cabeça ):
        se  ( cabeça  ==  verdadeiro ):
            hd  =  'h'
            índice  =  0
        outra coisa :
            hd  =  'd'
            índice  =  1

        dic  =  dict ( vôo )
        cor  =  'black'
        se  ( dic . obter ( "status" ) . inferior ()  ==  'Cancelado' ):
            cor  =  'vermelho'

        print  '<tr>'
        para  dados  em  vôo :
            imprimir  '<t'  +  hd  +  "style =" color: '  +  cores  +  ">"
            imprimir  dados [ índice ]
            print  '</ t'  +  hd  +  '>'
        print  '</ tr>'

    def  print_table ( auto ,  ID ):
        primeiro  =  verdadeiro
        print  '<tabela id = ""  +  ID  +  ">"
        de  vôo  em  auto . vôos :
            se  primeiro :
                print  '<thead>'
                auto . print_table_row ( vôo , Verdadeira )
                print  '</ thead> <tbody>'
                primeiro  =  False
            auto . print_table_row ( vôo , Falso )
        print  '</ tbody> </ table>'

IPB Skin By Virteq