Skip to content

Instantly share code, notes, and snippets.

@duarteguilherme
Created August 3, 2018 04:27
Show Gist options
  • Save duarteguilherme/7c81b415383745c7129e381a3b83e0f6 to your computer and use it in GitHub Desktop.
Save duarteguilherme/7c81b415383745c7129e381a3b83e0f6 to your computer and use it in GitHub Desktop.
import os
from itertools import repeat
import requests
import json
from multiprocessing.dummy import Pool as ThreadPool
def le_json():
""" Carrega arquivo de dados json para leitura
"""
if os.path.isfile('./dados.json') is False:
open('dados.json','w').write('')
dados_json = open('dados.json','r').read()
dados_json = dados_json.split('\n')
dados_json = list(filter(lambda x: x != '', dados_json))
dados_json = '[' + ','.join(dados_json) + ']'
dados_json = json.loads(dados_json)
return dados_json
def post_crm(uf,numero):
""" Realiza um post na api da crm e baixa dados de um determinado medic
o
com base em seu numero e uf
"""
print(f"Baixando {numero}/{uf}")
url = "http://portal.cfm.org.br/index.php?option=com_medicos&dadosDoMed
ico=true"
pagina = requests.post(url, { 'crm': numero, 'uf': uf })
if pagina.text == '[]':
return json.dumps({'CRM':numero, 'UF_CRM': uf, 'NOME': 'inexistente
'})
else:
resultado = pagina.text.replace('[','').replace(']','')
return resultado
def salva_dado(dado):
""" Recebe ums string de json e salva no arquivo 'dados.json'
"""
open('dados.json','a').write(dado + '\n')
def retorna_lista_crm():
""" Esta procedure retorna lista de crms ainda nao baixados
"""
# Dicionario define uf e valores possíveis de crm, contando o valor max
imo para cada
# Testar mais se for necessário
comb_possiveis_crm_dicionario = {
'SP': 150000,
'RJ': 1400000,
'MG': 60000,
'RS': 40000,
'BA': 30000,
'PR': 30000,
'DF': 20000,
'GO': 20000,
'PE': 20000,
'SC': 20000,
'CE': 15000,
'ES': 15000,
'PA': 15000,
'AM': 10000,
'AL': 10000,
'MA': 10000,
'MS': 10000,
'MT': 10000,
'PB': 10000,
'RN': 10000,
'TO': 5000,
'SE': 5000,
'AC': 5000,
'RR': 5000,
'RO': 5000,
'AP': 5000
}
comb_possiveis_crm = [ list( zip( list(repeat(k, v)), list(range(v))))
for k,v in comb_possiveis_crm_dicionario.items() ]
comb_possiveis_crm = [ i for j in comb_possiveis_crm for i in j ]
comb_baixados = [ (i['UF_CRM'], i['CRM']) for i in le_json() ]
comb_restantes = list(set(comb_possiveis_crm) - set(comb_baixados))
print(f"Sao possiveis {len(comb_possiveis_crm)} combinacoes de UF e crm
")
print(f"Ja foram baixados {len(comb_baixados)}")
print(f"Faltam {len(comb_restantes)}")
input("Começar?")
return comb_restantes
# Executa a busca com 10 threads
pool = ThreadPool(10) # 10 Threads
pool.map(lambda x: salva_dado(post_crm(*x)), retorna_lista_crm())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment