From cd7d64a2b640e9ebf7cff01c3cc457662a196a78 Mon Sep 17 00:00:00 2001 From: Eudes Oliveira Date: Sat, 22 Jan 2022 23:36:08 -0300 Subject: [PATCH] New method added "get tipo participante" and other fixes --- brFinance/backend.py | 49 +++++++----- brFinance/http_client.py | 15 +++- brFinance/responses.py | 24 ++++++ setup.py | 1 + simple.ipynb | 161 +++++++++++++++++++++++---------------- 5 files changed, 164 insertions(+), 86 deletions(-) diff --git a/brFinance/backend.py b/brFinance/backend.py index 6b09947..5dd814d 100644 --- a/brFinance/backend.py +++ b/brFinance/backend.py @@ -7,11 +7,12 @@ GetCategoriesResponse, GetSearchResponse, GetReportResponse, + GetTipoParticipanteResponse, GetCadastroInstrumentosTokenResponse, GetCadastroInstrumentosResponse, GetEmissorResponse, GetPesquisaCiaAbertaResponse - ) +) POOL_CONNECTOR = CVMHttpClientConnector() @@ -25,25 +26,32 @@ def __init__(self) -> None: def _http_client(self): return CVMHttpClient( session=self._connector - ) + ) def get_consulta_externa_cvm_results( self, - start_date: date = date.today(), - end_date: date = date.today(), + start_date: date = None, + end_date: date = None, cod_cvm: list = [], + participant_type: list = [1], category: list = None, last_ref_date: bool = False - ): - + ): + if (not category) or (category is None): category = ['EST_-1', 'IPE_-1_-1_-1'] + if (not participant_type) or (participant_type is None): + participant_type = ['-1'] + response = self._http_client().get_search_results( - cod_cvm=",".join(cod_cvm), + cod_cvm=str( + ",".join([str(item) for item in cod_cvm])), start_date=start_date, end_date=end_date, category=",".join(category), + participant_type=str( + ",".join([str(item) for item in participant_type])), last_ref_date=last_ref_date) response_class = GetSearchResponse(response=response) @@ -73,34 +81,41 @@ def get_consulta_externa_cvm_categories(self): response_class = GetCategoriesResponse(response=response) return response_class.data() - + + def get_consulta_externa_cvm_tipo_participante(self): + response = self._http_client().get_enet_consulta_externa() + response_class = GetTipoParticipanteResponse(response=response) + + return response_class.data() + def get_consulta_externa_cvm_categories(self): response = self._http_client().get_enet_consulta_externa() response_class = GetCategoriesResponse(response=response) return response_class.data() - + def get_cadastro_instrumentos(self, ref_date: date = date.today()): - - token_response = self._http_client().get_cadastro_de_instrumentos_token(ref_date=ref_date) - token = GetCadastroInstrumentosTokenResponse(response=token_response).data() - + + token_response = self._http_client( + ).get_cadastro_de_instrumentos_token(ref_date=ref_date) + token = GetCadastroInstrumentosTokenResponse( + response=token_response).data() + response = self._http_client().get_cadastro_de_instrumentos(token=token) response_class = GetCadastroInstrumentosResponse(response=response) return response_class.data() def get_emissor(self): - + response = self._http_client().get_emissor() response_class = GetEmissorResponse(response=response) return response_class.data() - + def get_pesquisa_cia_aberta(self): - + response = self._http_client().get_pesquisa_cia_aberta() response_class = GetPesquisaCiaAbertaResponse(response=response) return response_class.data() - diff --git a/brFinance/http_client.py b/brFinance/http_client.py index 586335f..5acc99f 100644 --- a/brFinance/http_client.py +++ b/brFinance/http_client.py @@ -26,6 +26,7 @@ def get_search_results( cod_cvm: str, start_date: date, end_date: date, + participant_type: str, category: str, last_ref_date ): @@ -33,8 +34,14 @@ def get_search_results( if (str(cod_cvm)) and (str(cod_cvm) is not None): cod_cvm = str(cod_cvm).zfill(6) - dataDe = start_date.strftime("%d/%m/%Y") - dataAte = end_date.strftime("%d/%m/%Y") + if start_date and end_date: + dataDe = start_date.strftime("%d/%m/%Y") + dataAte = end_date.strftime("%d/%m/%Y") + periodo = "2" + else: + dataDe = "" + dataAte = "" + periodo = "0" categoria = category ultimaDtRef = BOOL_STRING_MAPPER[last_ref_date] @@ -62,10 +69,10 @@ def get_search_results( setorAtividade: '-1', categoriaEmissor: '-1', situacaoEmissor: '-1', - tipoParticipante: '-1', + tipoParticipante: '{participant_type}', dataReferencia: '', categoria: '{categoria}', - periodo: '2', + periodo: '{periodo}', horaIni: '', horaFim: '', palavraChave:'', diff --git a/brFinance/responses.py b/brFinance/responses.py index 6cf98a4..acdeb26 100644 --- a/brFinance/responses.py +++ b/brFinance/responses.py @@ -185,6 +185,30 @@ def _parse_get_consulta_externa_cvm_categories(self, html): return categories +class GetTipoParticipanteResponse(): + def __init__(self, response) -> None: + self.response = response + + def data(self): + data = self._parse_get_consulta_externa_cvm_tipo_participante( + self.response.text) + return data + + def _parse_get_consulta_externa_cvm_tipo_participante(self, html): + cboTipoParticipante = BeautifulSoup( + html, features="lxml").find(id='cboTipoParticipante') + + cboTipoParticipante = cboTipoParticipante.find_all('option') + + tipo_participante = {} + + for option in cboTipoParticipante: + tipo_participante[option.attrs["value"] + ] = option.getText() + + return tipo_participante + + class GetCadastroInstrumentosTokenResponse(): def __init__(self, response) -> None: self.response = response diff --git a/setup.py b/setup.py index 386f608..151c0ca 100644 --- a/setup.py +++ b/setup.py @@ -13,6 +13,7 @@ 'requests', 'pandas', 'beautifulsoup4', + 'lxml' ] diff --git a/simple.ipynb b/simple.ipynb index b2b0ca7..f086575 100644 --- a/simple.ipynb +++ b/simple.ipynb @@ -174,6 +174,7 @@ " '000264': 'ALCOA ALUMINIO SA (REGISTRO CANCELADO)',\n", " '050113': 'ALCOA INC.',\n", " '913764': 'ALCOESTE BIOENERGIA FERNANDÓPOLIS S.A. (REGISTRO ATIVO)',\n", + " '057983': 'ALCON INC',\n", " '900209': 'ALESAT COMBUSTIVEIS S/A (REGISTRO ATIVO)',\n", " '916130': 'ALEX ENERGIA PARTICIPACOES S.A.',\n", " '055255': 'ALEXANDRIA REAL ESTATE EQUITIES INC (REGISTRO ATIVO)',\n", @@ -243,6 +244,7 @@ " '520187': 'AMAZÔNIA GOLF HOTELARIA E TURISMO S/A (REGISTRO ATIVO)',\n", " '912170': 'AMBAR ENERGIA LTDA (REGISTRO ATIVO)',\n", " '915983': 'AMBAR URUGUAIANA ENERGIA S.A.',\n", + " '057991': 'AMBARELLA INC',\n", " '023264': 'AMBEV S.A. (REGISTRO ATIVO)',\n", " '909721': 'AMBIENT-SERV.AMBIENT.RIBEIRAO PRETO S.A. (REGISTRO ATIVO)',\n", " '914663': 'AMBIENTAL MS PANTANAL SPE S.A (REGISTRO ATIVO)',\n", @@ -252,6 +254,7 @@ " '057398': 'AMC ENTERTAINMENT HOLDINGS INC (REGISTRO ATIVO)',\n", " '515523': 'AMCOR EMBALAGENS DA AMAZÔNIA S.A. (REGISTRO SUSPENSO)',\n", " '055980': 'AMCOR PLC (REGISTRO ATIVO)',\n", + " '058009': 'AMDOCS LTD',\n", " '012750': 'AMELCO SA IND ELETRONICA (REGISTRO CANCELADO)',\n", " '053538': 'AMEREN CORP (REGISTRO ATIVO)',\n", " '000388': 'AMERICA DO SUL LEAS SA ARR MER (REGISTRO CANCELADO)',\n", @@ -276,6 +279,7 @@ " '003050': 'AMPLA ENERGIA E SERVICOS S.A. (REGISTRO ATIVO)',\n", " '020214': 'AMPLA INVESTIMENTOS E SERVIÇOS S/A (REGISTRO CANCELADO)',\n", " '052680': 'ANALOG DEVICES INC (REGISTRO ATIVO)',\n", + " '058017': 'ANAPLAN INC',\n", " '019259': 'ANCAR EMPREENDIMENTOS COMERCIAIS S/A (REGISTRO CANCELADO)',\n", " '015326': 'ANCAR SHOPPING SA (REGISTRO CANCELADO)',\n", " '000396': 'ANCORA COMERCIAL SA (REGISTRO CANCELADO)',\n", @@ -293,6 +297,7 @@ " '018961': 'ANHANGUERA EDUCACIONAL PARTICIPAÇÕES S.A. (REGISTRO CANCELADO)',\n", " '052620': 'ANHEUSER-BUSCH INBEV SA/NV (REGISTRO ATIVO)',\n", " '023248': 'ANIMA HOLDING S.A. (REGISTRO ATIVO)',\n", + " '058025': 'ANNALY CAPITAL MANAGEMENT INC',\n", " '012416': 'ANSON SA ENG FUND RECUPERACOES (REGISTRO CANCELADO)',\n", " '055301': 'ANSYS INC (REGISTRO ATIVO)',\n", " '053597': 'ANTHEM INC (REGISTRO ATIVO)',\n", @@ -331,6 +336,7 @@ " '911883': 'AREIA ENERGIA S/A (REGISTRO ATIVO)',\n", " '000000': 'AREIAS BELAS AGRIC IRRIGADA S.A.- ABAISA (REGISTRO ATIVO)',\n", " '914473': 'ARES 2 PARTICIPAÇÕES S.A. (REGISTRO ATIVO)',\n", + " '058033': 'ARES MANAGEMENT CORP',\n", " '914085': 'ARES ONE PARTICIPACOES S.A. (REGISTRO ATIVO)',\n", " '022349': 'AREZZO INDÚSTRIA E COMÉRCIO S.A. (REGISTRO ATIVO)',\n", " '016888': 'ARGENTUM PARTICIPACOES SA (REGISTRO CANCELADO)',\n", @@ -348,6 +354,8 @@ " '051543': 'ARMSTRONG WORLD INDUSTRIES INC (REGISTRO ATIVO)',\n", " '000523': 'ARNO SA (REGISTRO CANCELADO)',\n", " '514420': 'AROSO HOTEIS E LAZER S.A. (REGISTRO ATIVO)',\n", + " '058041': 'ARROW ELECTRONICS INC',\n", + " '058050': 'ARROWHEAD PHARMACEUTICALS INC',\n", " '900340': 'ARTECOLA QUIMICA S.A. (REGISTRO ATIVO)',\n", " '000531': 'ARTEFATOS PAPEL NE SA ARTEPE (REGISTRO CANCELADO)',\n", " '911966': 'ARTEON Z TRANSMISSAO E PARTICIPACOES S/A (REGISTRO ATIVO)',\n", @@ -429,6 +437,7 @@ " '012483': 'AVARA SA (REGISTRO CANCELADO)',\n", " '055344': 'AVERY DENNISON CORP (REGISTRO ATIVO)',\n", " '050016': 'AVON PRODUCTS, INC. (REGISTRO ATIVO)',\n", + " '058068': 'AXON ENTERPRISE INC',\n", " '011975': 'AZEVEDO E TRAVASSOS S.A. (REGISTRO ATIVO)',\n", " '900506': 'AZUL LINHAS AEREAS BRASILEIRAS S.A. (REGISTRO ATIVO)',\n", " '024112': 'AZUL S.A. (REGISTRO ATIVO)',\n", @@ -705,6 +714,7 @@ " '013960': 'BES INVEST.BRASIL SA BCO INVES (REGISTRO CANCELADO)',\n", " '015040': 'BESC SA ARRENDAMENTO MERCANTIL (REGISTRO CANCELADO)',\n", " '051284': 'BEST BUY CO., INC. (REGISTRO ATIVO)',\n", + " '916633': 'BEST CENTER EMPREENDIMENTOS E PARTICIPACOES S.A. (REGISTRO ATIVO)',\n", " '001660': 'BETA SA INDUSTRIA E COMERCIO (REGISTRO CANCELADO)',\n", " '019747': 'BETA SECURITIZADORA S/A (REGISTRO CANCELADO)',\n", " '910398': 'BETANIA LACTEOS S.A. (REGISTRO ATIVO)',\n", @@ -1015,16 +1025,6 @@ " '904268': 'CARVALHO HOSKEN S/A ENGENHARIA E CONSTRUCOES (REGISTRO ATIVO)',\n", " '002178': 'CASA ANGLO BRASILEIRA S/A (REGISTRO CANCELADO)',\n", " '024643': 'CASA DE PEDRA SECURITIZADORA DE CREDITO S/A (REGISTRO ATIVO)',\n", - " '902486': 'CASA E VIDEO RIO DE JANEIRO S/A (REGISTRO ATIVO)',\n", - " '002194': 'CASA JOSE SILVA CONFECCOES SA (REGISTRO CANCELADO)',\n", - " '002208': 'CASA MASSON SA COM E INDUSTRIA (REGISTRO CANCELADO)',\n", - " '002216': 'CASAS DA BANHA COMERCIO E INDUSTRIA SA (REGISTRO CANCELADO)',\n", - " '016543': 'CASCAIS PARTICIPACOES SA (REGISTRO CANCELADO)',\n", - " '013226': 'CASCAJU AGROINDUSTRIAL SA (REGISTRO CANCELADO)',\n", - " '091728': 'CASCAJU AGROINDUSTRIAL SA',\n", - " '050210': 'CATERPILLAR INC. (REGISTRO ATIVO)',\n", - " '002259': 'CAUCAIA INDUSTRIAL SA CAISA (REGISTRO CANCELADO)',\n", - " '505170': 'CAUMÉ AGROPASTORIL S.A. (REGISTRO ATIVO)',\n", " ...}" ] }, @@ -1506,6 +1506,20 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "{'-1': 'TODOS',\n", + " '7': '\\r\\n BDR Não Patrocinados',\n", + " '1': '\\r\\n Companhia Aberta',\n", + " '6': '\\r\\n Companhia Dispensada de Registro',\n", + " '2': '\\r\\n Companhia Estrangeira',\n", + " '8': '\\r\\n Companhia Incentivada Registrada'}" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -1515,7 +1529,11 @@ "\n", "# Dict de todas as categorias de busca disponíveis (Fato relevante, DFP, ITR, etc.)\n", "categories = cvm_httpclient.get_consulta_externa_cvm_categories()\n", - "display(categories)" + "display(categories)\n", + "\n", + "# Ditc tipos de participantes\n", + "tipo_participante = cvm_httpclient.get_consulta_externa_cvm_tipo_participante()\n", + "display(tipo_participante)" ] }, { @@ -1523,6 +1541,14 @@ "execution_count": 3, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "d:\\Documentos\\Github\\brFinance\\brfinance\\responses.py:78: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " response_df = response_df.append(search_results_df)\n" + ] + }, { "data": { "text/html": [ @@ -1573,7 +1599,7 @@ " Fato Relevante\n", " -\n", " Conclusão da Aquisição da Neoway -\n", - " 2021-12-23\n", + " 2021-12-23 00:00:00\n", " 2021-12-23 19:30:00\n", " Ativo\n", " 1\n", @@ -1595,7 +1621,7 @@ " Fato Relevante\n", " -\n", " Projeções de despesas, investimentos, alavanca...\n", - " 2021-12-10\n", + " 2021-12-10 00:00:00\n", " 2021-12-10 09:26:00\n", " Ativo\n", " 1\n", @@ -1617,7 +1643,7 @@ " Fato Relevante\n", " -\n", " Programa de Recompra e Equity Swap -\n", - " 2021-12-09\n", + " 2021-12-09 00:00:00\n", " 2021-12-09 21:27:00\n", " Ativo\n", " 1\n", @@ -1639,7 +1665,7 @@ " ITR - Informações Trimestrais\n", " -\n", " -\n", - " 2021-09-30\n", + " 2021-09-30 00:00:00\n", " 2021-11-11 18:31:00\n", " Ativo\n", " 1\n", @@ -1661,7 +1687,7 @@ " Fato Relevante\n", " -\n", " Aquisição da Neoway -\n", - " 2021-10-19\n", + " 2021-10-19 00:00:00\n", " 2021-10-19 18:10:00\n", " Ativo\n", " 2\n", @@ -1683,7 +1709,7 @@ " Fato Relevante\n", " -\n", " Aquisição da Neoway -\n", - " 2021-10-19\n", + " 2021-10-19 00:00:00\n", " 2021-10-19 08:04:00\n", " Inativo\n", " 1\n", @@ -1705,7 +1731,7 @@ " Fato Relevante\n", " -\n", " Tratativas para Aquisição da Neoway -\n", - " 2021-10-14\n", + " 2021-10-14 00:00:00\n", " 2021-10-14 09:30:00\n", " Ativo\n", " 1\n", @@ -1727,7 +1753,7 @@ " Fato Relevante\n", " -\n", " Modificação de Projeções Divulgadas; Emissão d...\n", - " 2021-09-15\n", + " 2021-09-15 00:00:00\n", " 2021-09-15 19:38:00\n", " Ativo\n", " 1\n", @@ -1749,7 +1775,7 @@ " Fato Relevante\n", " -\n", " Potencial Emissão de Títulos de Dívida Interna...\n", - " 2021-09-10\n", + " 2021-09-10 00:00:00\n", " 2021-09-10 08:56:00\n", " Ativo\n", " 1\n", @@ -1771,7 +1797,7 @@ " Fato Relevante\n", " -\n", " Modificação de Projeções Divulgadas -\n", - " 2021-08-11\n", + " 2021-08-11 00:00:00\n", " 2021-08-11 18:16:00\n", " Ativo\n", " 1\n", @@ -1793,7 +1819,7 @@ " ITR - Informações Trimestrais\n", " -\n", " -\n", - " 2021-06-30\n", + " 2021-06-30 00:00:00\n", " 2021-08-11 18:02:00\n", " Ativo\n", " 1\n", @@ -1815,7 +1841,7 @@ " Fato Relevante\n", " -\n", " Aprovação da quinta emissão de Debêntures simp...\n", - " 2021-05-06\n", + " 2021-05-06 00:00:00\n", " 2021-05-06 18:36:00\n", " Ativo\n", " 1\n", @@ -1837,7 +1863,7 @@ " ITR - Informações Trimestrais\n", " -\n", " -\n", - " 2021-03-31\n", + " 2021-03-31 00:00:00\n", " 2021-05-06 18:29:00\n", " Ativo\n", " 1\n", @@ -1859,7 +1885,7 @@ " Fato Relevante\n", " -\n", " Desdobramento de Ações; Novo Programa de Recom...\n", - " 2021-03-04\n", + " 2021-03-04 00:00:00\n", " 2021-03-04 19:39:00\n", " Ativo\n", " 1\n", @@ -1881,7 +1907,7 @@ " DFP - Demonstrações Financeiras Padronizadas\n", " -\n", " -\n", - " 2020-12-31\n", + " 2020-12-31 00:00:00\n", " 2021-03-04 19:07:00\n", " Ativo\n", " 1\n", @@ -1935,39 +1961,39 @@ "0 Fato Relevante - \n", "14 DFP - Demonstrações Financeiras Padronizadas - \n", "\n", - " especie ref_date \\\n", - "10 Conclusão da Aquisição da Neoway - 2021-12-23 \n", - "9 Projeções de despesas, investimentos, alavanca... 2021-12-10 \n", - "8 Programa de Recompra e Equity Swap - 2021-12-09 \n", - "11 - 2021-09-30 \n", - "7 Aquisição da Neoway - 2021-10-19 \n", - "6 Aquisição da Neoway - 2021-10-19 \n", - "5 Tratativas para Aquisição da Neoway - 2021-10-14 \n", - "4 Modificação de Projeções Divulgadas; Emissão d... 2021-09-15 \n", - "3 Potencial Emissão de Títulos de Dívida Interna... 2021-09-10 \n", - "2 Modificação de Projeções Divulgadas - 2021-08-11 \n", - "12 - 2021-06-30 \n", - "1 Aprovação da quinta emissão de Debêntures simp... 2021-05-06 \n", - "13 - 2021-03-31 \n", - "0 Desdobramento de Ações; Novo Programa de Recom... 2021-03-04 \n", - "14 - 2020-12-31 \n", + " especie ref_date \\\n", + "10 Conclusão da Aquisição da Neoway - 2021-12-23 00:00:00 \n", + "9 Projeções de despesas, investimentos, alavanca... 2021-12-10 00:00:00 \n", + "8 Programa de Recompra e Equity Swap - 2021-12-09 00:00:00 \n", + "11 - 2021-09-30 00:00:00 \n", + "7 Aquisição da Neoway - 2021-10-19 00:00:00 \n", + "6 Aquisição da Neoway - 2021-10-19 00:00:00 \n", + "5 Tratativas para Aquisição da Neoway - 2021-10-14 00:00:00 \n", + "4 Modificação de Projeções Divulgadas; Emissão d... 2021-09-15 00:00:00 \n", + "3 Potencial Emissão de Títulos de Dívida Interna... 2021-09-10 00:00:00 \n", + "2 Modificação de Projeções Divulgadas - 2021-08-11 00:00:00 \n", + "12 - 2021-06-30 00:00:00 \n", + "1 Aprovação da quinta emissão de Debêntures simp... 2021-05-06 00:00:00 \n", + "13 - 2021-03-31 00:00:00 \n", + "0 Desdobramento de Ações; Novo Programa de Recom... 2021-03-04 00:00:00 \n", + "14 - 2020-12-31 00:00:00 \n", "\n", - " data_entrega status version modalidade \\\n", - "10 2021-12-23 19:30:00 Ativo 1 AP \n", - "9 2021-12-10 09:26:00 Ativo 1 AP \n", - "8 2021-12-09 21:27:00 Ativo 1 AP \n", - "11 2021-11-11 18:31:00 Ativo 1 AP \n", - "7 2021-10-19 18:10:00 Ativo 2 RE \n", - "6 2021-10-19 08:04:00 Inativo 1 AP \n", - "5 2021-10-14 09:30:00 Ativo 1 AP \n", - "4 2021-09-15 19:38:00 Ativo 1 AP \n", - "3 2021-09-10 08:56:00 Ativo 1 AP \n", - "2 2021-08-11 18:16:00 Ativo 1 AP \n", - "12 2021-08-11 18:02:00 Ativo 1 AP \n", - "1 2021-05-06 18:36:00 Ativo 1 AP \n", - "13 2021-05-06 18:29:00 Ativo 1 AP \n", - "0 2021-03-04 19:39:00 Ativo 1 AP \n", - "14 2021-03-04 19:07:00 Ativo 1 AP \n", + " data_entrega status version modalidade \\\n", + "10 2021-12-23 19:30:00 Ativo 1 AP \n", + "9 2021-12-10 09:26:00 Ativo 1 AP \n", + "8 2021-12-09 21:27:00 Ativo 1 AP \n", + "11 2021-11-11 18:31:00 Ativo 1 AP \n", + "7 2021-10-19 18:10:00 Ativo 2 RE \n", + "6 2021-10-19 08:04:00 Inativo 1 AP \n", + "5 2021-10-14 09:30:00 Ativo 1 AP \n", + "4 2021-09-15 19:38:00 Ativo 1 AP \n", + "3 2021-09-10 08:56:00 Ativo 1 AP \n", + "2 2021-08-11 18:16:00 Ativo 1 AP \n", + "12 2021-08-11 18:02:00 Ativo 1 AP \n", + "1 2021-05-06 18:36:00 Ativo 1 AP \n", + "13 2021-05-06 18:29:00 Ativo 1 AP \n", + "0 2021-03-04 19:39:00 Ativo 1 AP \n", + "14 2021-03-04 19:07:00 Ativo 1 AP \n", "\n", " acoes outros \\\n", "10