Executando verificação de segurança...
2

[dúvida] algúem conhece uma API que retorne informações sobre municícios brasileiros?

Pessoal, estou em busca de uma API pública com informações sobre os municípios brasileiros, mais especificamente uma API que contenha a data da fundação/ idade do munícipio, alguém conhece alguma?

Carregando publicação patrocinada...
2

Você pode facilmente retirar estas informações da wikipedia.

A melhor alternativa é usar SPARQL junto ao Wikidata, o que pode ser um pouco intimidador, mas oferece uma maneira muito eficiente e precisa para acessar e manipular dados da wikipedia.
Aqui esta um exemplo de uma query que retorna todos municipios do Brasil - que tem a data de fundação registrada - ordernados pela data de fundação.

SELECT ?cityLabel ?foundation WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "pt-br". }
  ?city wdt:P31 wd:Q3184121;
        wdt:P17 wd:Q155;
        wdt:P571 ?foundation.
}
ORDER BY ASC(?foundation)

Você pode executar, entender e acessar os resultados desta query diretamente em

https://w.wiki/7Jrf

Muito mais elegante do que alternativa de "parsear" os dados na unha né?
Mas, também funciona.

import re
from collections import Counter
import wikipediaapi



def next_city(page):
  links = page.links
  for title in sorted(links.keys()):
    yield links[title]

def extract_dates(text):
    date_pattern = r'\b\d{4}\b'
    return re.findall(date_pattern, text)

def count_years(dates):
    year_counter = Counter(dates)
    return year_counter

def guess_foundation_year(text):
  return count_years(extract_dates(text)).most_common(1)

wiki = wikipediaapi.Wikipedia(user_agent='wikipediaapi',language='pt',
                extract_format=wikipediaapi.ExtractFormat.WIKI)
                
cities = wiki.page('Lista_de_municípios_do_Brasil')

for city in next_city(cities):
  year = None
  cityFoundation = city.section_by_title('Fundação')
  if (cityFoundation):
    year = guess_foundation_year(cityFoundation.text)
  else:
    cityHistory = city.section_by_title('História')
    if (cityHistory):
      year = guess_foundation_year(cityHistory.text)
  
  if (year):
    print(city.title, year[0][0])

Que gera os seguintes resultados:

Abadia de Goiás 1997
Abadia dos Dourados 1882
Abaetetuba 1635
Abaré 1962
Abatiá 1947
Abaíra 1879
Abel Figueiredo 1991
Abre Campo 1755
Abreu e Lima 1982
Acajutiba 1918
Acaraú 1849
Acará (Pará) 1833
2
0