Coder Social home page Coder Social logo

brfinance's People

Contributors

eudesrodrigo avatar glaucocustodio avatar kcpf avatar marlonscalabrin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

brfinance's Issues

Update README.md

Atualizar o README para as informações mais recentes da lib na tabela de métodos. Os parâmetros estão desatualizados, porém no exemplo está correto.

ValueError: No tables found matching pattern '.+'

Eudes, inicialmente parabéns por disponibilizar a biblioteca.

Usando para consulta de dados do Banco Inter (CVM CODE 24406) está dando o seguinte erro:

ValueError: No tables found matching pattern '.+'

Ob: erro obtido usando o symlpe.pynb com esse CVM CODE).
Pilha completa do erro do erro:

File "./teste_backtesting.py", line 76, in
reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/brfinance/backend.py", line 71, in get_report
return response_class.data()

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/brfinance/responses.py", line 91, in data
data[key] = self._parse_get_reports(html.text, key)

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/brfinance/responses.py", line 111, in _parse_get_reports
df = pd.read_html(html, header=0, decimal=',')[table_index]

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/util/_decorators.py", line 311, in wrapper
return func(*args, **kwargs)

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 1098, in read_html
return _parse(

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 926, in _parse
raise retained

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 906, in _parse
tables = p.parse_tables()

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 222, in parse_tables
tables = self._parse_tables(self._build_doc(), self.match, self.attrs)

File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/html.py", line 568, in _parse_tables
raise ValueError(f"No tables found matching pattern {repr(match.pattern)}")

ValueError: No tables found matching pattern '.+'

Importação da classe CVMAsyncBackend

Olá

Obtive o seguinte erro na importação da classe CVMAsyncBackend

AttributeError: module 'urllib3.util.ssl_' has no attribute 'DEFAULT_CIPHERS'

image

Fiz o upgrade da biblioteca urllib3 mas já está na última versão.
image

Obrigado

AttributeError com o uso de função depreciada em versões mais recentes do Pandas

A partir da versão 2.0 do pacote Pandas, a função append foi removida. Essa função é utilizada no arquivo responses.py. Se o usuário utilizar uma versão do Pandas igual ou superior à 2.0, o seguinte erro acontece:
AttributeError: 'DataFrame' object has no attribute 'append'. Did you mean: '_append'?

Deve-se utilizar a função concat.

Ou então referenciar uma versão específica do Pandas que ainda faça uso de append como requerimento.

Licensa

Acredito que seria produtivo especificar uma licensa (preferencialmente open-source) para o projeto.
Sugestões apache2 ou gpl-3. Mas caso queira dar uma olhada mais a fundo, esse site pode ajudar: https://choosealicense.com/

Sugestão de melhoria para evitar erro em `get_cadastro_instrumentos`

Olá, @eudesrodrigo!

Primeiramente obrigado pela ferramenta! Está sendo bastante útil!

Segue uma sugestão de otimização:

A o parâmetro ref_date da função get_cadastro_instrumentos é por default date.today(). Porém nos finais de semana (isto é, quando ref_date.weekday() > 4) ela dá um erro. Sugiro adicionar uma verificação:

while ref_date.weekday() > 4:
    ref_date = ref_date - timedelta(days=1)

Ler resultados de anos anteriores

Oi @eudesrodrigo, primeiramente quero te agradecer por disponibilizar essa ferramenta publicamente.

Atualmente ela só retorna o ano mais recente (em vermelho na imagem) certo? Você aceitaria um PR para retornar todos os anos (em azul)?

Screenshot 2022-01-14 at 19 53 57

KeyError: 'value'.... Beautifulsoup hdnNumeroSequencialDocumento = soup.find(

ERRO

KeyError Traceback (most recent call last)
Cell In[1], line 51
49 empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
50 print("" * 20, empresa, "" * 20)
---> 51 reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)
53 for report in reports:
54 reports[report]["cod_cvm"] = row["cod_cvm"]

File [...brfinance/backend.py:65), in CVMAsyncBackend.get_report(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
60 def get_report(
61 self,
62 NumeroSequencialDocumento,
63 CodigoTipoInstituicao,
64 reports_list=None):
---> 65 response = self._http_client().get_reports(
66 NumeroSequencialDocumento,
67 CodigoTipoInstituicao,
68 reports_list)
69 response_class = GetReportResponse(response=response)
71 return response_class.data()

File .../brfinance/http_client.py:99, in CVMHttpClient.get_reports(self, NumeroSequencialDocumento, CodigoTipoInstituicao, reports_list)
97 soup = BeautifulSoup(response.text, features="lxml")
98 print(soup)
...
102 id='hdnCodigoTipoDocumento').attrs["value"]
103 # hdnCodigoCvm = soup.find(id='hdnCodigoCvm').attrs["value"]
104 # hdnDescricaoDocumento = soup.find(id='hdnDescricaoDocumento').attrs["value"]

KeyError: 'value'

CODIGO RODADO (EXEMPLO)

from brfinance import CVMAsyncBackend
import pandas as pd
from datetime import datetime, date

cvm_httpclient = CVMAsyncBackend()

Dict de códigos CVM para todas as empresas

cvm_codes = cvm_httpclient.get_cvm_codes()
print(cvm_codes)

Dict de todas as categorias de busca disponíveis (Fato relevante, DFP, ITR, etc.)

categories = cvm_httpclient.get_consulta_externa_cvm_categories()
print(categories)

Realizando busca por Empresa

start_date = date(2020, 1, 1)
end_dt = date.today()
cvm_codes_list = ['21610'] # B3
category = ["EST_4", "EST_3", "IPE_4_-1_-1"] # Códigos de categoria para DFP, ITR e fatos relevantes
last_ref_date = False # Se "True" retorna apenas o último report no intervalo de datas

Busca

search_result = cvm_httpclient.get_consulta_externa_cvm_results(
cod_cvm=cvm_codes_list,
start_date=start_date,
end_date=end_dt,
last_ref_date=last_ref_date,
category=category
)

Filtrar dataframe de busca para DFP e ITR apenas

search_result = search_result[
(search_result['categoria']=="DFP - Demonstrações Financeiras Padronizadas") |
(search_result['categoria']=="ITR - Informações Trimestrais")]
search_result = search_result[pd.to_numeric(search_result['numero_seq_documento'], errors='coerce').notnull()]

reports_list = [
'Balanço Patrimonial Ativo',
'Balanço Patrimonial Passivo',
'Demonstração do Resultado',
'Demonstração do Resultado Abrangente',
'Demonstração do Fluxo de Caixa',
'Demonstração das Mutações do Patrimônio Líquido',
'Demonstração de Valor Adicionado'] # Se None retorna todos os demonstrativos disponíveis.

Obter demonstrativos

for index, row in search_result.iterrows():
empresa = f"{row['cod_cvm']} - {cvm_codes[row['cod_cvm']]}"
print("" * 20, empresa, "" * 20)
reports = cvm_httpclient.get_report(row["numero_seq_documento"], row["codigo_tipo_instituicao"], reports_list=reports_list)

for report in reports:
    reports[report]["cod_cvm"] = row["cod_cvm"]
    print(reports[report].head())

Lib\site-packages\brFinance

Olá Eudes,

Parabéns pela idéia. Tentei installar usando o pip install e ocorreu um problema na hora de executar o código. Descobri que a importação não funciona no exemplo atual porque no código chama "from brfinance import CVMAsyncBackend" e observando a pasta Lib\site-packages\brFinance vi que o nome da pasta é brFinance. Eu renomei na minha máquina a pasta para Lib\site-packages\brfinance e aí rodou o programa.

Não recebo dados da CVM no search_result em algumas tentativas.

start_date = date(2020, 1, 1)
end_dt = date.today()
cvm_codes_list = ['21610'] #['21610'] # B3 22470 mglu 025291 3R
category = ["EST_4", "EST_3", "IPE_4_-1_-1"] # Códigos de categoria para DFP, ITR e fatos relevantes
last_ref_date = False # Se "True" retorna apenas o último report no intervalo de datas

search_result = cvm_httpclient.get_consulta_externa_cvm_results(
cod_cvm=cvm_codes_list,
start_date=start_date,
end_date=end_dt,
last_ref_date=last_ref_date,
category=category
)

não recebo nenhum erro... quando dou print(search_result) recebo as categorias padrão que estão lá no responses.py

Quando rodo algumas outras vezes, recebo os dados, então acho que é algum problema da resposta da cvm.
O Eudes falou alguma coisa sobre o tema na Live no minuto 27

https://www.youtube.com/watch?v=hoOQc6i51gE&t=39s

Valor NaN

Ao retornar os dados a coluna Valor esta retornando NaN, alguém sabe me informar o motivo ?
BRFinance 01
BRFinance 02

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.