Created
August 3, 2018 04:27
-
-
Save duarteguilherme/7c81b415383745c7129e381a3b83e0f6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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