Olá
Você pode capturar o dia anterior automaticamente e formar a url com isso
Mas eu acho que a API da Câmara está com pau (como falamos essa semana), e agora um que ainda não tinha visto
from datetime import datetime, timedelta
import requests
import pandas as pd
# Captura o dia, mês e ano de ontem
dia_anterior = (datetime.now() - timedelta(1)).strftime('%d')
mes_anterior = (datetime.now() - timedelta(1)).strftime('%m')
ano_anterior = (datetime.now() - timedelta(1)).strftime('%Y')
# Captura o dia, mês e ano de hoje
now = datetime.now()
dia_hoje = now.strftime("%d")
mes_hoje = now.strftime("%m")
ano_hoje = now.strftime("%Y")
# Forma url de pesquisa
url = "https://dadosabertos.camara.leg.br/api/v2/proposicoes?dataInicio=%s-%s-%s&dataFim=%s-%s-%s&ordem=ASC&ordenarPor=id" % (ano_anterior, mes_anterior, dia_anterior, ano_hoje, mes_hoje, dia_hoje)
print(url)
# Captura quantas páginas tem esse intervalo de data na API
parametros = {'formato': 'json', 'itens': 100}
resposta = requests.get(url, parametros)
for vez in resposta.json()['links']:
conta = {"rel": vez['rel'].strip(), "href": vez['href'].strip()}
# Para este item da API da Câmara sempre o último item link (last) tem o número de páginas
# Considerando 100 itens por página
# Isola o endereço de last
link_ultimo = str(conta['href'].strip())
# Encontra local exato onde termina o número de páginas
posicao = int(link_ultimo.find('&itens='))
# Com um fatiamento de lista, a partir da posição 139 onde sempre está o número, captura o número
# de caracteres que corresponde a "posicao"
# Exemplo: se "posicao" tiver 141 então vai ser [139:141]
# o que significa comprimento de 139 (inclusive) até 141 (exclusive)
# E adiciono mais 1 porque o range abaixo sempre vai um menos
ultima = int(link_ultimo[139:posicao]) + 1
# Cria lista vazia
proposicoes = []
# Faz a iteração a partir do número de páginas encontrado
for pagina in range(1, ultima):
parametros = {'formato': 'json', 'itens': 100, 'pagina': pagina}
resposta = requests.get(url, parametros)
# Captura os dados
for vez in resposta.json()['dados']:
dicionario = {"id": str(vez['id']).strip(),
"uri": str(vez['uri']).strip(),
"siglaTipo": str(vez['siglaTipo']).strip(),
"codTipo": str(vez['codTipo']).strip(),
"numero": str(vez['numero']).strip(),
"ano": str(vez['ano']).strip(),
"ementa": str(vez['ementa']).strip()
}
proposicoes.append(dicionario)
df_proposicoes_api = pd.DataFrame(proposicoes)
df_proposicoes_api.info()
df_proposicoes_api.to_excel('resultados/testeproposicoes.xlsx',sheet_name='Sheet1')
O resultado do intervalo “dataInicio=2020-02-04&dataFim=2020-02-05” tem datas a partir de 1996
Mesmo se você ver no browser o resultado: https://dadosabertos.camara.leg.br/api/v2/proposicoes?dataInicio=2020-02-04&dataFim=2020-02-05&ordem=ASC&ordenarPor=id
E também tiraram os itens de procura com datas da documentação da API: https://dadosabertos.camara.leg.br/swagger/api.html
(Correção - em /proposicoes estão as informações para busca por datas)
"Lista de informações básicas sobre projetos de lei, resoluções, medidas provisórias, emendas, pareceres e todos os outros tipos de proposições na Câmara.
Por padrão, são retornadas todas as proposições que foram apresentadas ou tiveram alguma mudança de situação nos últimos 30 dias. Esse intervalo de tramitação pode ser configurado pelos parâmetros dataInicio
e dataFim
."
Então faz sentido retornar proposições antigas