API para buscar taxa selic
- Amanda Nascimento
- há 5 dias
- 2 min de leitura
Atualizado: há 23 horas

Este script serve para retornar via API com Python o percentual da taxca selic do banco central utilizando a biblioteca requests para conectar na API e pandas para visualização dos dados em formato de tabela.
Para executar o script você precisa de uma IDE (clique aqui), ter Python instalado na máquina (clique aqui) e instalar as bibliotecas mencionadas acima, com o pip (clique aqui). Crie uma pasta no VS Code, crie um arquivo, coloque .py no final do arquivo e cole o script abaixo.
import pandas as pd
import requests
from datetime import datetime, timedelta
# Código da série da SELIC (ao ano)
codigo_serie = 1178
# Intervalo: hoje até 4 anos atrás
#Se quiser puxar mais anos ou menos anos basta alterar a multiplicacao x 365
data_final = datetime.today().strftime('%d/%m/%Y')
data_inicial = (datetime.today() - timedelta(days=4*365)).strftime('%d/%m/%Y')
# URL da API
url = f"https://api.bcb.gov.br/dados/serie/bcdata.sgs.{codigo_serie}/dados?formato=json&dataInicial={data_inicial}&dataFinal={data_final}"
# Requisição
resposta = requests.get(url)
dados = resposta.json()
# DataFrame
df = pd.DataFrame(dados)
df['data'] = pd.to_datetime(df['data'], dayfirst=True)
df['valor'] = df['valor'].astype(float)
df = df.sort_values('data').reset_index(drop=True)
# Formata a coluna 'data' como dd/mm/yyyy
df['data'] = df['data'].dt.strftime('%d/%m/%Y')
# Mostra todas as linhas no console
pd.set_option('display.max_rows', None)
# Exibe o DataFrame completo
print(df)
API para buscar taxa selic e carregar os dados dentro de uma tabela SQL Server
No SQL Server, precisamos criar a estrutura da tabela para receber os dados

No SQL Server precisamos criar uma procedure para que python possa executar esta procedure.

No VS Code, precisa instalar a biblioteca pandas, requests e pyodbc, clique aqui para saber mais.
Execute o script abaixo em um arquivo python .py
Não esqueça de alterar em SERVER= o nome do seu computador, o nome da database.
O login esta com autenticação via windows. Se o seu login for via SQL Server, na linha abaixo de server, contem um comentário (#) com o script para inserir usuário e senha.
import pandas as pd
import requests
from datetime import datetime, timedelta
import pyodbc
# Códigos SGS
codigo_selic_real = 1178
codigo_selic_meta = 432
# Datas
data_final = datetime.today().strftime('%d/%m/%Y')
data_inicial = (datetime.today() - timedelta(days=4*365)).strftime('%d/%m/%Y')
def obter_dados_sgs(codigo):
url = f"https://api.bcb.gov.br/dados/serie/bcdata.sgs.{codigo}/dados?formato=json&dataInicial={data_inicial}&dataFinal={data_final}"
resposta = requests.get(url)
dados = resposta.json()
df = pd.DataFrame(dados)
df['data'] = pd.to_datetime(df['data'], dayfirst=True)
df['valor'] = df['valor'].astype(float)
return df
df_selic = obter_dados_sgs(codigo_selic_real)
df_meta = obter_dados_sgs(codigo_selic_meta)
df_meta = df_meta.rename(columns={'valor': 'meta'})
df = pd.merge(df_selic, df_meta, on='data', how='left')
df = df.sort_values('data').reset_index(drop=True)
# Conexão com SQL Server
conn = pyodbc.connect(
r'DRIVER={ODBC Driver 17 for SQL Server};SERVER=nomePc\SQLEXPRESS;DATABASE=amanda;Trusted_Connection=yes;'
)
#'DRIVER={ODBC Driver 17 for SQL Server};SERVER=nomePc\\SQLEXPRESS;DATABASE=amanda;UID=seu_usuario;PWD=sua_senha'
cursor = conn.cursor()
# Executa a procedure que limpa os dados antigos
cursor.execute("EXEC atualizar_selic")
conn.commit()
# Insere os dados atualizados
for index, row in df.iterrows():
cursor.execute(
"INSERT INTO selic_historico (data, valor, meta) VALUES (?, ?, ?)",
row['data'].date(), row['valor'], row['meta']
)
conn.commit()
cursor.close()
conn.close()
print("Dados atualizados com sucesso.")