victortassinari

Pegar Cidades atualizadas do IBGE

Mar 12th, 2014
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.65 KB | None | 0 0
  1. <?php
  2. /*
  3.   DESENVOLVIDO POR VICTOR TASSINARI MARTINS
  4.  * TESTADO APENAS LOCALMENTE, CUIDADO, VOCÊ PODE TER PROBLEMAS AO UTILIZAR EM UMA HOSPEDAGEM COMPARTILHADA.
  5.  * O PROCESSO PODE DEMORAR VÁRIOS MINUTOS, DEPENDENDO DA LARGURA DE BANDA E PROCESSAMENTO DO SERVIDOR
  6.  */
  7.  #ISSO É IMPORTANTE, COMO SCRIPT DEMORA PARA PEGAR TODOS OS DADOS, REMOVI O TEMPO LIMITE DO PHP
  8. #TALVEZ SEJA NECESSÁRIO FAZER ESSA ALTERAÇÃO NO PHP.INI OU .HTACCESS
  9. set_time_limit(0);
  10. ini_set('max_execution_time', 0);
  11.  
  12. class cidadesEstados {
  13.    
  14.     public $estados;
  15.  
  16.     public function __construct() {
  17.         $this->estados = array("1|Acre|AC", "2|Alagoas|AL", "3|Amapá|AP", "4|Amazonas|AM", "5|Bahia|BA", "6|Ceará|CE", "7|Distrito Federal|DF", "8|Espírito Santo|ES", "9|Goiás|GO", "10|Maranhão|MA", "11|Mato Grosso|MT", "12|Mato Grosso do Sul|MS", "13|Minas Gerais|MG", "14|Pará|PA", "15|Paraíba|PB", "16|Paraná|PR", "17|Pernambuco|PE", "18|Piauí|PI", "19|Rio de Janeiro|RJ", "20|Rio Grande do Norte|RN", "21|Rio Grande do Sul|RS", "22|Rondônia|RO", "23|Roraima|RR", "24|Santa Catarina|SC", "25|São Paulo|SP", "26|Sergipe|SE", "27|Tocantins|TO");
  18.     }
  19.  
  20.  
  21.        private function getPagina($estado) {
  22.         $url = "http://www.cidades.ibge.gov.br/download/mapa_e_municipios.php?lang=&uf=".$estado;
  23.         $ch = curl_init();
  24.         $timeout = 15;
  25.         curl_setopt($ch, CURLOPT_URL, $url);
  26.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  27.         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  28.         $dados = curl_exec($ch);
  29.         curl_close($ch);
  30.  
  31.         return $dados;
  32.     }
  33.  
  34.     #--------- ESTE METODO RETORNA UM ARRAY ASSOCIATIVO COM OS DADOS ---------------#
  35.  
  36.     public function getDados() {
  37.         $cidadesEstadosCompleto = array();
  38.  
  39.         for ($i = 0; $i < count($this->estados); $i++) {
  40.             $res = array();
  41.             $estado = explode("|", $this->estados[$i]);
  42.             $dados = $this->getPagina($estado[2]);
  43.             #---- VERIFICO SE EXISTE A TABELA COM OS DADOS -------#
  44.            if (!preg_match("/<table id=\"municipios\">/s", $dados)) {
  45.                 $cidadesEstadosCompleto["erro"] = "Não foi encontrado nenhuma informação.";
  46.             } else {
  47.                 #--- PEGO O CONTEÚDO DA TABELA ---------------------#
  48.                preg_match("/<table id=\"municipios\">(.*)<\/table>/s", $dados, $saida);
  49.                 $vetDados = preg_split("/\n/", $saida[0]);
  50.                 $cont = 0;
  51.                 for ($j = 0; $j < count($vetDados); $j++) {
  52.                     if (preg_match("/<td class=\"nome\">(.*)<\/td>/s", $vetDados[$j], $saida1)) {
  53.                         $res[$cont]["nome"] = $saida1[1];
  54.                         $cont++;
  55.                     }
  56.                     if (key_exists($j + 1, $vetDados)) {
  57.                         if (preg_match("/<td class=\"gentilico\">(.*)<\/td>/s", $vetDados[($j + 1)], $saida2)) {
  58.                             $res[$cont - 1]["gentilico"] = $saida2[1];
  59.                             if (preg_match("/<td>(.*)<\/td>/s", $vetDados[($j + 2)], $saida3)) {
  60.                                 $res[$cont - 1]["populacao"] = $saida3[1];
  61.                             }
  62.                         }
  63.                     }
  64.                 }
  65.                 $cidadesEstadosCompleto[$estado[0]] = $res;
  66.             }
  67.         }
  68.         //var_dump($cidadesEstadosCompleto);
  69.  
  70.         return $cidadesEstadosCompleto;
  71.     }
  72.  
  73.     public function getDadosJson() {
  74.         return json_encode($this->getDados(), JSON_PRETTY_PRINT);
  75.     }
  76.  
  77.     public function criarSqlCidades() {
  78.         $dados = $this->getDados();
  79.         foreach ($dados as $id => $estado) {
  80.             foreach ($estado as $cidade) {
  81.             $cidade["nome"] = str_replace("'", "", $cidade["nome"]);
  82.             $cidade["gentilico"] = str_replace("'", "", $cidade["gentilico"]);
  83.                 echo "INSERT INTO cidade (cid_nome, cid_gentilico, cid_populacao, cid_estado) VALUES ('{$cidade["nome"]}','{$cidade["gentilico"]}','{$cidade["populacao"]}','{$id}'); <br />";
  84.             }
  85.         }
  86.     }
  87.  
  88.     public function criarSqlEstados() {
  89.         for($i = 0; $i < count($this->estados);$i++) {
  90.             $estado = explode("|",$this->estados[$i]);
  91.             echo "INSERT INTO estado (est_id, est_nome, est_sigla) VALUES ('{$estado[0]}','{$estado[1]}','{$estado[2]}'); <br />";
  92.         }
  93.     }
  94.  
  95. }
  96. ?>
  97. <!DOCTYPE HTML>
  98. <html>
  99.     <head>
  100.         <meta charset="utf-8" />
  101.     </head>
  102.     <body>
  103.         <?php
  104.         $estados = new cidadesEstados();
  105.         $estados->criarSqlEstados();
  106.         $estados->criarSqlCidades();
  107.         ?>
  108.     </body>
  109. </html>
Advertisement
Add Comment
Please, Sign In to add comment