def carrega_plano(): URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-plano.php' parametros = {'id_operadora':19, 'formatacao_texto':2, 'conv_id':'', 'default_label_sessao_outros_planos':'Outros planos', 'default_label_sessao_meus_planos':'Meu plano'} tipo = 'html' metodo = 'get' plano = None # Chamada da função para criar um BS a partir de uma url while True: try: erro, msg_erro, bs = busca_pagina(URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: planos = bs.find_all('li') except Exception as e: msg_erro = gera_msg_erro(e, 'Falhou no bs.find_all') grava_msg_erro(msg_erro) return if not planos: msg_erro = gera_msg_erro(None, 'Falhou no bs.find_all') grava_msg_erro(msg_erro) return for plano in planos: try: id_plano = plano.find('div').get('data-id') nome = plano.find('div').get('data-nome') ans = plano.find('em').text.split('|')[0].strip().split(':')[1].strip() tipo = plano.find('em').text.split('|')[1].strip() status = plano.find('strong').text.strip() except Exception as e: msg_erro = gera_msg_erro(e, 'Falhou na busca de atributos') grava_msg_erro(msg_erro) return erro, msg_erro = grava_plano(id_plano, nome, ans, tipo, status) if erro: grava_msg_erro(msg_erro) return
def grava_especialidade(id_plano, cd_especialidade, nm_especialidade): '''Grava uma UF no banco de dados Parameters ---------- id_plano : int Identificador do Plano. cd_especialidade : string Código da especialidade. nm_especialidade : string Nome da especialidade. Returns ------- erro : int Flag de erro. msg_erro : string Mensagem de erro formatada. ''' erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_especialidade (id_plano, cd_especialidade, nm_especialidade) ' sql += 'VALUES (%s, %s, %s)' cursor.execute(sql, (id_plano, cd_especialidade, nm_especialidade)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na gravação da especialidade: ' + nm_especialidade + ' (' + str(cd_especialidade) + ')') return erro, msg_erro
def grava_municipio_temp(id_uf, cd_municipio, nm_municipio): '''Grava uma UF no banco de dados Parameters ---------- id_uf : int Identificador da UF. cd_municipio : string Código de identificação do município. nm_municipio : string Nome do municpio. Returns ------- erro : int Flag de erro. msg_erro : string Mensagem de erro formatada. ''' erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_municipio_temp (id_uf, cd_municipio, nm_municipio) ' sql += 'VALUES (%s, %s, %s)' cursor.execute(sql, (id_uf, cd_municipio, nm_municipio)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na gravação do municipio: ' + nm_municipio) return erro, msg_erro
def busca_uf(id_uf=None): '''Busca UFs no banco de dados Parameters ---------- id_uf : int Identificador da UF (opcional). Returns ------- erro : string Indicador de erro. msg_erro : string Mensagem de erro formatada. ufs : list Lista de UFs. ''' erro = 0 msg_erro = None ufs = None try: con = conecta_banco() cursor = con.cursor() sql = 'SELECT id_uf, id_plano, cd_uf, sg_uf, nm_uf, cd_ibge from tb_uf' if id_uf is not None: sql += ' where id_uf = ' + str(id_uf) cursor.execute(sql) ufs = cursor.fetchall() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na consulta da UF') return erro, msg_erro, ufs
def grava_uf(id_plano, cd_uf, sg, nome, codigo_IBGE): '''Grava uma UF no banco de dados Parameters ---------- id : int identificador da UF. sg : string Sigla da UF. nome : string Nome da UF. codigo_IBGE : string Código da UF no IBGE. Returns ------- msg_erro : string Mensagem de erro formatada. ''' erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_uf (id_plano, cd_uf, sg_uf, nm_uf, cd_IBGE) ' sql += 'VALUES (%s, %s, %s, %s, %s)' cursor.execute(sql, (id_plano, cd_uf, sg, nome, codigo_IBGE)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na gravação da uf') return erro, msg_erro
def grava_plano(id_plano, nome, ans, tipo, status): '''Grava um plano no banco de dados Parameters ---------- nome : string Nome do plano. ans : string Número do plano na ANS. tipo : string Tipo do plano (empresarial, individual etc). status : string Status do plano (ativo, inativo etc). Returns ------- msg_erro : string Mensagem de rro formatada. ''' erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_plano (id_plano, nm_plano, cd_ans, tp_plano, st_plano) ' sql += 'VALUES (%s, %s, %s, %s, %s)' cursor.execute(sql, (id_plano, nome, ans, tipo, status)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na gravação do plano: ' + nome) return erro, msg_erro
def grava_tipo_prestador_bairro(id_tipo_prestador, id_bairro): '''Grava uma UF no banco de dados Parameters ---------- id_bairro : int Identificador do Bairro. nm_tipo_prestador : string Nome do Tipo prestador. Returns ------- erro : int Flag de erro. msg_erro : string Mensagem de erro formatada. ''' erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_tipo_prestador_bairro (id_tipo_prestador, id_bairro) ' sql += 'VALUES (%s, %s)' cursor.execute(sql, (id_tipo_prestador, id_bairro)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro( e, 'Falhou na gravação do tipo prestador bairro: ' + str(id_tipo_prestador) + ' (' + str(id_bairro) + ')') return erro, msg_erro
def carrega_municipio(): erro, msg_erro, ufs = busca_uf() if erro: # Salva log de erro grava_msg_erro(msg_erro) return for uf in ufs: id_uf = uf[0] id_plano = uf[1] sg_uf = uf[3] URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-cidade.php' parametros = { 'id_operadora': 19, 'id_estado': sg_uf, 'id_plano': id_plano, 'formatacao_texto': '1590362791956' } tipo = 'html' metodo = 'get' while True: try: erro, msg_erro, bs = busca_pagina(URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: municipios = bs.find('ul').find_all('a') for municipio in municipios: cd_municipio = municipio.get('data-id') nm_municipio = municipio.text erro, msg_erro = grava_municipio(id_uf, cd_municipio, nm_municipio) except Exception as e: msg_erro = gera_msg_erro( e, 'Falhou na busca montagem dos municipios') grava_msg_erro(msg_erro) return #erro, msg_erro = grava_plano(nome, ans, tipo, status) if erro: grava_msg_erro(msg_erro) return
def carrega_uf(): erro, msg_erro, planos = busca_plano() if erro: # Salva log de erro grava_msg_erro(msg_erro) return for plano in planos: id_plano = plano[0] URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-estado-unico.php' parametros = { 'true': '', 'id_operadora': 19, 'id_plano': id_plano, '_': '1590356909735' } tipo = 'json' metodo = 'get' # Chamada da função para criar um BS a partir de uma url while True: try: erro, msg_erro, bs = busca_pagina(URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: for uf in bs['estados']: cd_uf = uf['id'] sg = uf['uf'] nome = uf['nome'] codigo_IBGE = uf['codigo_IBGE'] erro, msg_erro = grava_uf(id_plano, cd_uf, sg, nome, codigo_IBGE) if erro: grava_msg_erro(msg_erro) return except Exception as e: msg_erro = gera_msg_erro(e, 'Falhou na busca de estados') grava_msg_erro(msg_erro) return
def carrega_especialidade(): erro, msg_erro, planos = busca_plano() if erro: # Salva log de erro grava_msg_erro(msg_erro) return for plano in planos: id_plano = plano[0] URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-especialidade.php' parametros = {'id_operadora':19, 'id_cidade': '', 'id_plano': id_plano, 'id_estado': '', 'bairro': '', 'formatacao_texto':'2', 'force_especialidade':'S', 'id_tipo_prestador': ''} tipo = 'html' metodo = 'get' while True: try: erro, msg_erro, bs = busca_pagina(URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: especialidades = bs.find('ul').find_all('a') for especialidade in especialidades: cd_especialidade = especialidade.get('data-id') nm_especialidade = especialidade.text erro, msg_erro = grava_especialidade(id_plano, cd_especialidade, nm_especialidade) except Exception as e: msg_erro = gera_msg_erro(e, 'Falhou na busca montagem dos bairros') grava_msg_erro(msg_erro) return if erro: grava_msg_erro(msg_erro) return
def busca_especialidade(id_especialidade = None, id_plano = None, cd_especialidade = None, nm_especialidade = None): '''Busca Especialidade no banco de dados Parameters ---------- id_especialidade : int Identificador da Especialidade (opcional). id_plano : int Identificador do Plano (opcional) cd_especialidade : int Código da Especialidade no Plano (opcional). nm_especialidade : string Nome da especialidade (opcional) Returns ------- erro : string Indicador de erro. msg_erro : string Mensagem de erro formatada. bairros : list Lista de Bairros. ''' erro = 0 msg_erro = None tipos_prestador = None try: con = conecta_banco() cursor = con.cursor() sql = 'SELECT id_especialidade, id_plano, cd_especialidade, nm_especialidade' sql += ' from tb_especialidade where 1 = 1' if id_especialidade is not None: sql += ' and id_especialidade = ' + str(id_especialidade) if id_plano is not None: sql += ' and id_plano = ' + str(id_plano) if cd_especialidade is not None: sql += ' and cd_especialidade = \'' + str(cd_especialidade) + '\'' if nm_especialidade is not None: sql += ' and nm_especialidade = \'' + str(nm_especialidade) + '\'' cursor.execute(sql) tipos_prestador = cursor.fetchall() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na consulta da Especialidade: ' + str(id_especialidade)) return erro, msg_erro, tipos_prestador
def busca_tipo_prestador(id_tipo_prestador=None, id_plano=None, cd_tipo_prestador=None): '''Busca Tipos Prestador no banco de dados Parameters ---------- id_tipo_prestador : int Identificador do Tipo Prestador (opcional). cd_tipo_prestador_bairro : int Código do Tipo Prestador (opcional). Returns ------- erro : string Indicador de erro. msg_erro : string Mensagem de erro formatada. bairros : list Lista de Bairros. ''' erro = 0 msg_erro = None tipos_prestador = None try: con = conecta_banco() cursor = con.cursor() sql = 'SELECT id_tipo_prestador, id_plano, cd_tipo_prestador, nm_tipo_prestador' sql += ' from tb_tipo_prestador where 1 = 1' if id_tipo_prestador is not None: sql += ' and id_tipo_prestador = ' + str(id_tipo_prestador) if id_plano is not None: sql += ' and id_plano = ' + str(id_plano) if cd_tipo_prestador is not None: sql += ' and cd_tipo_prestador = ' + str(cd_tipo_prestador) cursor.execute(sql) tipos_prestador = cursor.fetchall() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro( e, 'Falhou na consulta do Tipo Prestador: ' + str(id_tipo_prestador)) return erro, msg_erro, tipos_prestador
def grava_tipo_prestador_bairro_especialidade(id_tipo_prestador, id_bairro, id_especialidade): erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_tipo_prestador_bairro_especialidade (id_tipo_prestador, id_bairro, id_especialidade) ' sql += 'VALUES (%s, %s, %s)' cursor.execute(sql, (id_tipo_prestador, id_bairro, id_especialidade)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro( e, 'Falhou na gravação do tipo prestador bairro especialidade: ' + str(id_tipo_prestador) + ' (' + str(id_bairro) + ')') return erro, msg_erro
def busca_uf_temp(id_uf=None): erro = 0 msg_erro = None ufs = None try: con = conecta_banco() cursor = con.cursor() sql = 'SELECT id_uf, id_plano, cd_uf, sg_uf, nm_uf, cd_ibge from tb_uf' sql += ' where id_uf >= 106' if id_uf is not None: sql += ' where id_uf = ' + str(id_uf) cursor.execute(sql) ufs = cursor.fetchall() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro(e, 'Falhou na consulta da UF') return erro, msg_erro, ufs
def busca_bairro_temp(id_municipio, id_bairro=None): erro = 0 msg_erro = None bairros = None try: con = conecta_banco() cursor = con.cursor() sql = 'SELECT id_bairro, id_municipio, nm_bairro' sql += ' from tb_bairro where id_municipio = ' + str(id_municipio) sql += ' and id_bairro >= 24393' if id_bairro is not None: sql += ' and id_municipio = ' + str(id_bairro) cursor.execute(sql) bairros = cursor.fetchall() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro( e, 'Falhou na consulta do Municipio: ' + id_municipio) return erro, msg_erro, bairros
def busca_municipio(id_uf, id_municipio=None): '''Busca UFs no banco de dados Parameters ---------- id_uf : int Identificador da UF. id_municipio : int Identificador do Município (opcional). Returns ------- erro : string Indicador de erro. msg_erro : string Mensagem de erro formatada. municipios : list Lista de Municípios. ''' erro = 0 msg_erro = None municipios = None try: con = conecta_banco() cursor = con.cursor() sql = 'SELECT id_municipio, id_uf, cd_municipio, nm_municipio' sql += ' from tb_municipio where id_uf = ' + str(id_uf) if id_municipio is not None: sql += ' and id_municipio = ' + str(id_municipio) cursor.execute(sql) municipios = cursor.fetchall() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro( e, 'Falhou na consulta do Municipio: ' + id_municipio) return erro, msg_erro, municipios
def carrega_tipo_prestador(): erro, msg_erro, planos = busca_plano() if erro: # Salva log de erro grava_msg_erro(msg_erro) return for plano in planos: id_plano = plano[0] URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-tipo-prestador.php' parametros = { 'id_operadora': 19, 'id_cidade': '', 'id_plano': id_plano, 'id_estado': '', 'bairro': '', 'formatacao_texto': '2', '_': '1590376516866', 'force_especialidade': 'S' } tipo = 'html' metodo = 'get' while True: try: erro, msg_erro, bs = busca_pagina(URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: tipos_prestador = bs.find('ul').find_all('a') for tp in tipos_prestador: cd_tipo_prestador = tp.get('data-id') if cd_tipo_prestador: nm_tipo_prestador = tp.text else: continue erro, msg_erro = grava_tipo_prestador(id_plano, cd_tipo_prestador, nm_tipo_prestador) except Exception as e: msg_erro = gera_msg_erro(e, 'Falhou na busca montagem dos bairros') grava_msg_erro(msg_erro) return #erro, msg_erro = grava_plano(nome, ans, tipo, status) if erro: grava_msg_erro(msg_erro) return
def carrega_lista_prestador(): erro, msg_erro, prestador_bairro_especialidade = busca_tipo_prestador_bairro_especialidade( ) if erro: # Salva log de erro grava_msg_erro(msg_erro) return for pbe in prestador_bairro_especialidade: id_plano = pbe[0] id_uf = pbe[2] id_cidade = pbe[3] id_bairro = pbe[5] bairro = pbe[6] id_tipo_prestador = pbe[7] cd_tipo_prestador = pbe[8] id_especialidade = pbe[10] cd_especialidade = pbe[11] URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-busca.php' parametros = { 'id_operadora': 19, 'id_plano': id_plano, 'id_estado': id_uf, 'id_cidade': id_cidade, 'bairro': bairro, 'id_tipo_prestador': cd_tipo_prestador, 'id_especialidade': cd_especialidade, 'regiao_tipo': 'endereco', 'utiliza_secoes': 'N', 'agrupa_espec': 'N', 'formatacao_texto': '2', 'paged': '0' } tipo = 'html' metodo = 'get' while True: try: erro, msg_erro, bs = busca_pagina(URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: prestadores = bs.find_all('table', {'class': 'resultados-lista'}) if prestadores is None: prestadores = bs.find_all('table', {'class': 'resultados-lista '}) for prestador in prestadores: cd_prestador = prestador.get('data-id') nome = prestador.find('h5') if nome is not None: nm_prestador = nome.text.strip() else: nm_prestador = '' especialidade = prestador.find("span", {"class": "color-2"}) if especialidade is not None: nm_especialidade = especialidade.text.strip() else: nm_especialidade = '' tel_todos = '' telefones = prestador.find('div', { 'class': 'telefones' }).find_all('p') if telefones is not None: for telefone in telefones: if tel_todos == '': tel_todos += f'{telefone.span.text}' else: tel_todos += f'|{telefone.span.text}' endereco = prestador.find('h6') if endereco is not None: nm_logradouro_ampliado = endereco.text.strip() else: nm_logradouro_ampliado = '' bairro = endereco.next_sibling.next_sibling nm_bairro = bairro.span.text mun_uf = bairro.next_sibling.next_sibling.span.text nm_municipio = mun_uf.split('/')[0] sg_uf = mun_uf.split('/')[1] # print(cd_prestador) # print(nome) # print(especialidade) # print(f'Nome: {nm_prestador}, especialidade: {nm_especialidade}') # print(tel_todos) # print(nm_logradouro_ampliado) # print(nm_bairro) # print(f'{nm_municipio}/{sg_uf}') erro, msg_erro = grava_lista_prestador( id_tipo_prestador, id_bairro, id_especialidade, cd_prestador, nm_prestador, nm_especialidade, nm_logradouro_ampliado, nm_bairro, nm_municipio, sg_uf, tel_todos) except Exception as e: msg_erro = gera_msg_erro(e, 'Falhou na busca montagem dos bairros') grava_msg_erro(msg_erro) return # erro, msg_erro = grava_plano(nome, ans, tipo, status) if erro: grava_msg_erro(msg_erro) return
def grava_lista_prestador(id_tipo_prestador, id_bairro, id_especialidade, cd_prestador, nm_prestador, nm_especialidade, nm_logradouro_ampliado, nm_bairro, nm_municipio, sg_uf, tel_todos): '''Grava um registro de prestador no tipo lista no banco de dados Parameters ---------- id_tipo_prestador : int Identificador do Tipo Prestador. id_bairro: int Identificador do bairro. id_especialidade : int Identificador da especialidade. cd_prestador : int Código do prestador no sistema de origem nm_prestador : string Nome do prestador nm_especialidade : string Nome da especialidade nm_logradouro_ampliado : string Nome do logradouro, número e complemento nm_bairro : string Nome do bairro nm_municipio : string Nome do município sg_uf : string Sigla da UF tel_todos : string Lista de telefones do prestador separado por | Returns ------- erro : int Flag de erro. msg_erro : string Mensagem de erro formatada. ''' erro = 0 msg_erro = None try: con = conecta_banco() cursor = con.cursor() sql = 'INSERT INTO tb_lista_prestador(id_tipo_prestador, id_bairro, ' \ 'id_especialidade, cd_prestador, nm_prestador, ' \ 'nm_especialidade, nm_logradouro_ampliado, ' \ 'nm_bairro, nm_municipio, sg_uf, nr_telefones) ' sql += 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' cursor.execute( sql, (id_tipo_prestador, id_bairro, id_especialidade, cd_prestador, nm_prestador, nm_especialidade, nm_logradouro_ampliado, nm_bairro, nm_municipio, sg_uf, tel_todos)) con.commit() con.close() except Exception as e: erro = 1 msg_erro = gera_msg_erro( e, f'Falhou na gravação de lista prestador: ' f'id_tipo_prestador: {id_tipo_prestador}, id_bairro: {id_bairro}, ' f'id_especialidade: {id_especialidade}, ' f'cd_prestador: {cd_prestador}') return erro, msg_erro
def carrega_tipo_prestador_bairro_especialidade_temp(): erro, msg_erro, ufs = busca_uf_temp() if erro: # Salva log de erro grava_msg_erro(msg_erro) return for uf in ufs: id_uf = uf[0] id_plano = uf[1] sg_uf = uf[3] erro, msg_erro, municipios = busca_municipio_temp(id_uf) if erro: # Salva log de erro grava_msg_erro(msg_erro) return for municipio in municipios: id_municipio = municipio[0] cd_municipio = municipio[2] erro, msg_erro, bairros = busca_bairro_temp(id_municipio) if erro: # Salva log de erro grava_msg_erro(msg_erro) return for bairro in bairros: id_bairro = bairro[0] nm_bairro = remover_acentos(bairro[2].strip().upper()) erro, msg_erro, tipos_prestador_bairros = busca_tipo_prestador_bairro( None, id_bairro) if erro: grava_msg_erro(msg_erro) return for tipo_prestador_bairro in tipos_prestador_bairros: id_tipo_prestador = tipo_prestador_bairro[0] erro, msg_erro, tipo_prestador = busca_tipo_prestador( id_tipo_prestador, id_plano) if erro: grava_msg_erro(msg_erro) return cd_tipo_prestador = tipo_prestador[0][2] URL = 'https://www.redecredenciada.mobi/mobile-guia/v2/ws-especialidade.php' parametros = { 'id_operadora': 19, 'id_cidade': cd_municipio, 'id_plano': id_plano, 'id_estado': sg_uf, 'bairro': nm_bairro, 'id_tipo_prestador': cd_tipo_prestador, 'formatacao_texto': '2', '_': '1590376516866', 'force_especialidade': 'S' } tipo = 'html' metodo = 'get' while True: try: erro, msg_erro, bs = busca_pagina( URL, tipo, parametros, metodo) break except Exception as e: print(e) print(parametros) continue if erro: # Salva log de erro grava_msg_erro(msg_erro) return try: especialidades = bs.find('ul').find_all('a') for especialidade in especialidades: cd_especialidade = especialidade.get('data-id') erro, msg_erro, especialidade = busca_especialidade( None, id_plano, cd_especialidade, None) if erro: grava_msg_erro(msg_erro) return id_especialidade = especialidade[0][0] erro, msg_erro = grava_tipo_prestador_bairro_especialidade( id_tipo_prestador, id_bairro, id_especialidade) except Exception as e: msg_erro = gera_msg_erro( e, 'Falhou na busca montagem dos bairros') grava_msg_erro(msg_erro) return if erro: grava_msg_erro(msg_erro) return