Skip to content

Instantly share code, notes, and snippets.

@maurobaraldi
Last active March 28, 2024 09:41
Show Gist options
  • Star 55 You must be signed in to star a gist
  • Fork 21 You must be signed in to fork a gist
  • Save maurobaraldi/40ec1daf0005530dd94a to your computer and use it in GitHub Desktop.
Save maurobaraldi/40ec1daf0005530dd94a to your computer and use it in GitHub Desktop.
Cotações da Bovespa Intraday
#!/usr/bin/env python
from datetime import datetime
from json import loads
from time import gmtime, mktime, strptime
# LevelDict é um wrapper usando dicionário para LevelDB
# https://github.com/maurobaraldi/leveldict
from leveldict import LevelJsonDict
from requests import get
base = 'http://cotacoes.economia.uol.com.br/ws/asset'
assets = base + '/stock/list?size=10000'
intraday = base + '/{asset}/intraday?size=400&callback=uolfinancecallback0'
assets = {i['code']: i['idt'] for i in get(assets).json()['data']}
# 3 ativos para teste
# assets = {'PETR4.SA': 484, 'CTAX4.SA': 227, 'IGUA3.SA': 364}
db = LevelJsonDict('./intraday')
def from_ts(ts):
''' Convert timestamp (13 digits support) to datetime'''
return datetime.fromtimestamp(mktime(gmtime(ts / 1000.0)))
def to_ts(dt):
''' From strftime to timestamp (13 digits support)'''
return int(mktime(strptime(dt, "%Y-%m-%d %H:%M")) * 1000)
def get_intraday(asset):
url = intraday.format(**{'asset': asset})
return loads(get(url).content[20:-2])
if __name__ == '__main__':
for asset, code in assets.iteritems():
today = datetime.now().strftime('%Y%m%d')
quote = get_intraday(code).get('data', {})
db.setdefault(asset)
db[asset] = {today: quote}
@Marildo
Copy link

Marildo commented Jan 30, 2020

Não tem documentação. Eu já procurei e outros devs também já procuraram.
Blza cara! Obrigado.

@palencar94
Copy link

"Não estou conseguindo rodar, to tomando erro no "mportError: cannot import name 'LevelJsonDict' from 'leveldict'" alguém consegue me ajudar? obrigado! abs.

@maurobaraldi
Copy link
Author

@palencar94 precisa instalar essa biblioteca: https://github.com/rmax-archive/leveldict

@blandre
Copy link

blandre commented Aug 18, 2020

Estou recebendo o seguinte erro do intraday para alguns tickers. Alguém tem alguma ideia do que possa ser?

window.getStockQuotesCallback({"error":"FSW-0401","today":1597768397824});

Obrigado por compartilhar esse código!

@maurobaraldi
Copy link
Author

@blandre segue a lista de erros

ERRORS= { "FSW-0001":"Este período não é válido.",
"FSW-0002":"Este período não é válido; insira uma data inicial menor que a data final.",
"FSW-0003":"A data inicial não é válida; insira uma data menor que a data de hoje.",
"FSW-0004":"A data final não é válida; insira uma data menor ou igual a data atual.",
"FSW-0101":"Parâmetro size menor que 1","FSW-0102":"Parâmetro page menor que 1",
"FSW-0103":"Parâmetro fields inválido","FSW-0104":"Parâmetro idt menor que 1",
"FSW-0201":"Parâmetro inválido",
"FSW-0202":"Campo IDT inválido",
"FSW-0401":"Não há informação disponível para esta ação/índice.",
"FSW-0402":"Campo target inválido",
"FSW-0404":"URL não encontrada",
"FSW-0500":"Internal Server Error",
"FSW-0400":"Bad Request"
}

@JSergioMartins
Copy link

JSergioMartins commented Sep 29, 2020 via email

@gleisonbarion
Copy link

Cara, aparentemente eles desligaram a api.....é isso mesmo?

Parece que sim, também não consigo acessar desde o dia 28/09 pela manhã.

O serviço no endereço https://api.cotacoes.uol.com/asset/intraday/ ainda funciona, porém com atraso de 15 minutos nas cotações.

@palencar
Copy link

Encontrei uma solução utilizando o pacote yfinance.

# pip install yfinance

>>> import yfinance as yf

>>> df = yf.download('EGIE3.SA', start="2020-09-28", interval = "1m")
[*********************100%***********************]  1 of 1 completed
>>> df
                                Open       High        Low      Close  Adj Close  Volume
Datetime                                                                                
2020-09-28 10:08:00-03:00  41.799999  41.810001  41.680000  41.730000  41.730000       0
2020-09-28 10:09:00-03:00  41.790001  41.820000  41.790001  41.810001  41.810001   10500
2020-09-28 10:10:00-03:00  41.810001  41.910000  41.779999  41.889999  41.889999    8500
2020-09-28 10:11:00-03:00  41.830002  41.830002  41.759998  41.820000  41.820000    1700
2020-09-28 10:12:00-03:00  41.900002  41.900002  41.759998  41.810001  41.810001    1300
...                              ...        ...        ...        ...        ...     ...
2020-09-28 16:50:00-03:00  40.459999  40.490002  40.439999  40.470001  40.470001    4500
2020-09-28 16:51:00-03:00  40.470001  40.490002  40.470001  40.490002  40.490002    1900
2020-09-28 16:52:00-03:00  40.520000  40.540001  40.520000  40.520000  40.520000    5100
2020-09-28 16:53:00-03:00  40.509998  40.590000  40.509998  40.590000  40.590000    2100
2020-09-28 16:54:00-03:00  40.580002  40.619999  40.529999  40.529999  40.529999    2500

[397 rows x 6 columns]
>>> df.to_csv('EGIE3.csv')
>>> 

@andreofgyn
Copy link

É, meus amigos, complicado, usava tanto essa api e agora já era, fiz um teste com a https://api.cotacoes.uol.com e infelizmente não atende, não por causa dos 15 minutos de atraso e sim por não conter a cotação do IFIX e de "novos" ativos como o RECR11 (antigo UBSR11) etc, fica aí o exemplo se alguém quiser testar, pois não encontrei muitas informações:

https://api.cotacoes.uol.com/asset/intraday/list/paged/?item=704&format=JSON&fields=price,varpct,var,ask,low,high,open,close,date&size=1

@ZotInfo
Copy link

ZotInfo commented Oct 2, 2020

Boa tarde pessoal, a API do site Economia foi desativado? Alguém saberia algum serviço free ou com preço acessível que fornecesse os mesmos dados?

@ZotInfo
Copy link

ZotInfo commented Oct 2, 2020

É, meus amigos, complicado, usava tanto essa api e agora já era, fiz um teste com a https://api.cotacoes.uol.com e infelizmente não atende, não por causa dos 15 minutos de atraso e sim por não conter a cotação do IFIX e de "novos" ativos como o RECR11 (antigo UBSR11) etc, fica aí o exemplo se alguém quiser testar, pois não encontrei muitas informações:

https://api.cotacoes.uol.com/asset/intraday/list/paged/?item=704&format=JSON&fields=price,varpct,var,ask,low,high,open,close,date&size=1

Como você faz a consulta dos dados por esse site?

@andreofgyn
Copy link

andreofgyn commented Oct 2, 2020

Recomendo a api do yahoo para quem estiver precisando de cotações, infelizmente tem 15 minutos de atraso, mas ta show de bola e permite trazer vários tickers de uma vez, ex:

https://query2.finance.yahoo.com/v7/finance/quote?symbols=^BVSP,PETR4.SA,VALE3.SA,IFIX.SA,KNCR11.SA,USDBRL=X

@ZotInfo
Copy link

ZotInfo commented Oct 6, 2020

Recomendo a api do yahoo para quem estiver precisando de cotações, infelizmente tem 15 minutos de atraso, mas ta show de bola e permite trazer vários tickers de uma vez, ex:

https://query2.finance.yahoo.com/v7/finance/quote?symbols=^BVSP,PETR4.SA,VALE3.SA,IFIX.SA,KNCR11.SA,USDBRL=X

Opa obrigado por compartilhar, ele não fornece o histórico intraday?

@andreofgyn
Copy link

Opa obrigado por compartilhar, ele não fornece o histórico intraday?

Para histórico, você pode fazer como abaixo, mas ainda não explorei muito:

https://query1.finance.yahoo.com/v8/finance/chart/PETR4.SA?period1=1598922000&period2=1601506800&interval=1d

@xRoDriGox
Copy link

Boa noite,

Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000

Obrigado

@rgraziola
Copy link

Boa noite,

Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000

Obrigado

Esse ai ja era.
Outra saida de uso pode ser esse abaixo.

http://bvmf.bmfbovespa.com.br/cotacoes2000/FormConsultaCotacoes.asp?strListaCodigos=USIM5|PETR4

@djalmaaraujo
Copy link

A da uol morreu mesmo.

@ZotInfo
Copy link

ZotInfo commented Oct 26, 2020

Boa noite,
Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000
Obrigado

Esse ai ja era.
Outra saida de uso pode ser esse abaixo.

http://bvmf.bmfbovespa.com.br/cotacoes2000/FormConsultaCotacoes.asp?strListaCodigos=USIM5|PETR4

Será que essa ai vai durar bastante?

@eltoncayo
Copy link

Putzz usava desde ano passado essa da UOL. A alternativa atual é só do yahoo mesmo?

@vitorsma
Copy link

Boa noite,

Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000

Obrigado

https://api.cotacoes.uol.com/asset/list/?format=JSON&fields=abbreviation,id

@savioramos
Copy link

Esta scritpt está rodando bonitinho:

https://pypi.org/project/yahooquery/

@MatheusVp2
Copy link

Sabem de algum site que mostra em tempo real ?
Sem atraso, consigo analisar e/ou fazer um scraping, caso queiram !
Trazendo os dados formatados !

@eltoncayo
Copy link

Boa noite,
Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000
Obrigado

https://api.cotacoes.uol.com/asset/list/?format=JSON&fields=abbreviation,id

Me salvou, obrigado!

@thaleshcv
Copy link

Boa noite,
Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000
Obrigado

https://api.cotacoes.uol.com/asset/list/?format=JSON&fields=abbreviation,id

Valeu pela dica. Sabe quais os valores possíveis para o parâmetro fields?

@ZotInfo
Copy link

ZotInfo commented Jan 8, 2021

Boa noite,
Alguem consegue me dizer como ficou essa chamada? Onde listava todos os ativos da Bolsa?
http://cotacoes.economia.uol.com.br/ws/asset/stock/list?size=10000
Obrigado

https://api.cotacoes.uol.com/asset/list/?format=JSON&fields=abbreviation,id

Valeu pela dica. Sabe quais os valores possíveis para o parâmetro fields?

Também gostaria de saber os fields disponíveis para esse link, será que tem alguma documentação?

@ZotInfo
Copy link

ZotInfo commented Jan 8, 2021

Parece que encontrei algo útil nesse post:
https://stackoverflow.com/questions/62963923/get-value-from-graphicview-bidvalue

Porém ao testar os outros fields não obtive resultado :/

@BeneInfosec
Copy link

Não consigo baixar o 'py-leveldb" pois a url dele não existe mais. O que eu faço nesse caso?

@cortextecnologia
Copy link

https://api.cotacoes.uol.com/asset/list/?format=JSON&fields=id,abbreviation,name,companies,exchange

Alguém sabe qual o nome do "fields" para mostrar o tipo: Ações, FII, ETF, etc.???
ps: o Type "S" significa o que?

@ZotInfo
Copy link

ZotInfo commented Aug 2, 2021

https://api.cotacoes.uol.com/asset/list/?format=JSON&fields=id,abbreviation,name,companies,exchange

Alguém sabe qual o nome do "fields" para mostrar o tipo: Ações, FII, ETF, etc.???
ps: o Type "S" significa o que?

Também gostaria de saber os fields disponíveis para essa API

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment