| 6 | |
| 7 | |
| 8 | class IbgeTracker(): |
| 9 | |
| 10 | def __init__(self): |
| 11 | self.url_ufs = 'http://www.ibge.gov.br/home/geociencias' + \ |
| 12 | '/areaterritorial/principal.shtm' |
| 13 | self.url_cidades = 'http://www.ibge.gov.br/home/geociencias' + \ |
| 14 | '/areaterritorial/area.php?nome=%' |
| 15 | |
| 16 | def _request(self, url): |
| 17 | response = requests.post(url) |
| 18 | response.raise_for_status() |
| 19 | return response.text |
| 20 | |
| 21 | def _get_info_ufs(self, siglas): |
| 22 | texto = self._request(self.url_ufs) |
| 23 | html = fromstring(texto) |
| 24 | seletorcss_linhas = "div#miolo_interno > table > tr" |
| 25 | linhas = html.cssselect(seletorcss_linhas) |
| 26 | linhas.pop() # a primeira é o cabeçalho |
| 27 | infos = [] |
| 28 | for linha in linhas: |
| 29 | seletorcss_celulas = "td" |
| 30 | celulas = linha.cssselect(seletorcss_celulas) |
| 31 | codigo_ibge = celulas[0].text_content() |
| 32 | if codigo_ibge in siglas: |
| 33 | sigla = siglas[codigo_ibge] |
| 34 | infos.append({ |
| 35 | 'sigla': sigla, |
| 36 | 'codigo_ibge': codigo_ibge, |
| 37 | 'nome': celulas[1].text_content(), |
| 38 | 'area_km2': celulas[2].text_content() |
| 39 | }) |
| 40 | |
| 41 | # neste ponto, após a carga |
| 42 | # das cidades, a lista |
| 43 | # 'infos' deve estar populada |
| 44 | |
| 45 | return infos |
| 46 | |
| 47 | def _get_info_cidades(self): |
| 48 | texto = self._request(self.url_cidades) |
| 49 | html = fromstring(texto) |
| 50 | seletorcss_linhas = "div#miolo_interno > table > tr" |
| 51 | linhas = html.cssselect(seletorcss_linhas) |
| 52 | linhas.pop() # a primeira é o cabeçalho |
| 53 | infos = [] |
| 54 | for linha in linhas: |
| 55 | seletorcss_celulas = "td" |
| 56 | celulas = linha.cssselect(seletorcss_celulas) |
| 57 | infos.append({ |
| 58 | 'codigo_ibge_uf': celulas[0].text_content(), |
| 59 | 'sigla_uf': celulas[1].text_content(), |
| 60 | 'codigo_ibge': celulas[2].text_content(), |
| 61 | 'nome': celulas[3].text_content(), |
| 62 | 'area_km2': celulas[4].text_content() |
| 63 | }) |
| 64 | return infos |
| 65 |
no outgoing calls
no test coverage detected