Read several urls at the same time by writing information to the database

0

I'm getting, from some url´s provided by api of Climatempo , weather forecast information, url´s I must inform the cities that I want to consult, that is, their id´s and they return a xml with the information that I need to write to my database. The problem I'm having is, how to read information from multiple url´s at the same time, I did a test creating a framework to try to solve this, but I'm having trouble getting it to work. Initially I made a loop to search the id's of the cities in my bank, if there are records I try to do an update and if not, I try to insert within that context I can only get the information from the first url .

I'll post the complete code, I hope I've been able to explain my difficulty clearly.

require_once('../Connections/con.php');

mysql_select_db($database_conCons, $conCons);
$query_rcCidades = "SELECT * FROM PrevisaoCidade WHERE PrevisaoCidade.ativo = 1 ORDER BY PrevisaoCidade.IdCidade";
$rcCidades = mysql_query($query_rcCidades, $conCons) or die(mysql_error());
$row_rcCidades = mysql_fetch_assoc($rcCidades);
$totalRows_rcCidades = mysql_num_rows($rcCidades);


do {

    // CIDADES CADASTRADAS
    $cCidades = $row_rcCidades['IdCidade'];

    $url = 'http://api.climatempo.com.br/api/v1/forecast/15days/rain?idlocale="'.$cCidades.'"'; 
    $url = 'http://api.climatempo.com.br/api/v1/forecast/15days/temperature?idlocale="'.$cCidades.'"';
    $url = 'http://api.climatempo.com.br/api/v1/forecast/15days/wind?idlocale="'.$cCidades.'"';
    $url = 'http://api.climatempo.com.br/api/v1/forecast/15days/humidity?idlocale="'.$cCidades.'"'; 
    $url = 'http://api.climatempo.com.br/api/v1/forecast/15days/icon?idlocale="'.$cCidades.'"';
    $url = 'http://api.climatempo.com.br/api/v1/forecast/15days/uv?idlocale="'.$cCidades.'"';

    // PERMISSÃO 
    $post = array(  
        'key' => '',  
        'client' => '', 
        'nocache' => true,  
        'type' => 'xml',  
        'application' => 'Previsão 15 dias - Cidades'  
    );  

    // OBTENDO PERMISSÃO  
    $http = array(  
        'method' => 'POST',  
        'header' => 'Content-type: application/x-www-form-urlencoded',  
        'content' => http_build_query($post)  
    );  

    $context = stream_context_create(array('http' => $http));   
    $request = file_get_contents($url, true, $context); 
    $item =  simplexml_load_string($request);           

    // DATA PARA INSERÇÃO E/OU UPDATE
    $DataAux = substr((string)$item->data->item['dateBegin'], 0, -9);

    // SELECIONANDO TODAS AS OPÇÕES
    foreach($item->data->item->weather->item as $reg) {   

        // $data_aux  = substr($data,6,4).'-'.substr($data,3,2).'-'.substr($data,0,2);

        // ZERANDO O ARRAY
        $data = array();

            // CHUVA                
            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'precipitation' => (string)$reg['precipitation'],
                'probability' => (string)$reg['probability'],
                'date' => (string)$reg['date']
            );

            // ATRIBUINDO AS VARIÁVEIS      
            $Prec = $data['api']['data']['item']['weather']['item'][0]['precipitation'];
            $Prob = $data['api']['data']['item']['weather']['item'][0]['probability'];

            // TEMPERATURA  
            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'TMin' => (string)$reg['min'],
                'TMax' => (string)$reg['max']
            );

            // ATRIBUINDO AS VARIÁVEIS      
            $TMin = $data['api']['data']['item']['weather']['item'][0]['min'];
            $TMax = $data['api']['data']['item']['weather']['item'][0]['max'];

            // VENTO    
            $data['api']['data']['item']['locale']['id']        = (string)$item->data->item->locale['id'];
            $data['api']['data']['item']['locale']['name']      = (string)$item->data->item->locale['name'];
            $data['api']['data']['item']['locale']['latitude']  = (string)$item->data->item->locale['latitude'];
            $data['api']['data']['item']['locale']['longitude'] = (string)$item->data->item->locale['longitude'];

            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'direction' => (string)$reg['direction'],                   
                'minVelocity' => (string)$reg['minVelocity'],               
                'maxVelocity' => (string)$reg['maxVelocity']
            );

            // ATRIBUINDO AS VARIÁVEIS      
            $VenDir = $data['api']['data']['item']['weather']['item'][0]['direction'];              
            $VelMin = $data['api']['data']['item']['weather']['item'][0]['minVelocity'];    
            $VelMax = $data['api']['data']['item']['weather']['item'][0]['maxVelocity'];

            // UMIDADE RELATIVA         
            $data['api']['data']['item']['dateBegin'] = (string)$item->data->item['dateBegin'];
            $data['api']['data']['item']['dateEnd']   = (string)$item->data->item['dateEnd'];   
            $data['api']['data']['item']['latitude']  = (string)$item->data->item->locale['latitude'];
            $data['api']['data']['item']['longitude'] = (string)$item->data->item->locale['longitude'];         

            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS                 
                'UmiMin' => (string)$reg['min'],
                'UmiMax' => (string)$reg['max']
            );

            // ATRIBUINDO AS VARIÁVEIS                      
            $UmMin = $data['api']['data']['item']['weather']['item'][0]['min'];
            $UmMax = $data['api']['data']['item']['weather']['item'][0]['max']; 

            // ÍCONES
            $data['api']['data']['item']['dateBegin'] = (string)$item->data->item['dateBegin'];
            $data['api']['data']['item']['dateEnd']   = (string)$item->data->item['dateEnd'];           

            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS                 
                'morning' => (string)$reg['morning'],   
                'afternoon' => (string)$reg['afternoon'],
                'night' => (string)$reg['night'],   
                'day' => (string)$reg['day'],
                'pt' => (string)$reg['pt']
            );

            // ATRIBUINDO AS VARIÁVEIS                      
            $IcoManha = $data['api']['data']['item']['weather']['item'][0]['morning'];
            $IcomTarde = $data['api']['data']['item']['weather']['item'][0]['afternoon'];   
            $IcoNoite = $data['api']['data']['item']['weather']['item'][0]['night'];
            $IcoDia = $data['api']['data']['item']['weather']['item'][0]['day'];
            $Frase = $data['api']['data']['item']['weather']['item'][0]['pt'];                  

            // UV               
            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'UvMax' => (string)$reg['max']                      

            );

            // ATRIBUINDO AS VARIÁVEIS      
            $UvMax = $data['api']['data']['item']['weather']['item'][0]['max'];         

        // INSERT DOS SERVIÇOS
        mysql_select_db($database_conCons, $conCons);
        $sql = "SELECT Data, IdCidade FROM PrevisaoClima WHERE Data = '$DataAux' AND IdCidade = $cCidades";
        $rcDados = mysql_query($sql, $conCons) or die(mysql_error());
        $row_rcDados = mysql_fetch_assoc($rcDados);
        $totalRows_rcDados = mysql_num_rows($rcDados);

        if ($totalRows_rcDados > 0) {               
            mysql_select_db($database_conCons, $conCons);
            $sql = "UPDATE 'cpCons_webCons'.'PrevisaoClima' SET 'Frase'='$Frase', 'TempMin'='$TMin', 'TempMax'='$TMax', 'ProbChuva'='$Prob', 'PrecisaoChuva'='$Prec', 'IconeManha'='$IcoManha', 'IconeTarde'='$IcoTarde', 'IconeNoite'='$IcoNoite', 'IconeDia'='$IcoDia', 'VentoDir'='$VenDir', 'VentoMax'='$VenMax', 'VentoMin'='$VenMin', 'Umidade'='$UmMax', 'Uv'='$UvMax' WHERE 'Data'='$DataAux' AND 'IdCidade' = $cCidades";
            $result = mysql_query($sql, $conCons);
            if (!$result) {
                $message  = 'ERRO: ' . mysql_error() . "\n";
                $message .= 'Query: ' . $sql;
                die($message);
            }
        } else {
            //Cria os dados da importação
            mysql_select_db($database_conCons, $conCons);
            $sql = "INSERT INTO 'cpCons_webCons'.'PrevisaoClima' ('Data', 'IdCidade', 'Frase', 'TempMin', 'TempMax', 'ProbChuva', 'PrecisaoChuva', 'IconeManha', 'IconeTarde', 'IconeNoite', 'IconeDia', 'VentoDir', 'VentoMax', 'VentoMin', 'Umidade', 'Uv') VALUES ('$DataAux', '$cCidades', '$Frase', '$TMin', '$TMax', '$Prob', '$Prec', '$IcoManha', '$IcoTarde', '$IcoNoite', '$IcoDia', '$VenDir', '$VenMax', '$VenMin', '$UmiMax', '$UvMax')";
            $result = mysql_query($sql, $conCons);
            if (!$result) {
                $message  = 'ERRO: ' . mysql_error() . "\n";
                $message .= 'Query: ' . $sql;
                die($message);
            }
        }
    }           

} while ($row_rcCidades = mysql_fetch_assoc($rcCidades));   
    
asked by anonymous 20.04.2017 / 19:39

1 answer

3

You have to separate the URLs and data obtained for each request:

$urlChuva = 'http://api.climatempo.com.br/api/v1/forecast/15days/rain?idlocale="'.$cCidades.'"'; 
$urlTemp = 'http://api.climatempo.com.br/api/v1/forecast/15days/temperature?idlocale="'.$cCidades.'"';
$urlVento = 'http://api.climatempo.com.br/api/v1/forecast/15days/wind?idlocale="'.$cCidades.'"';
$urlHumi = 'http://api.climatempo.com.br/api/v1/forecast/15days/humidity?idlocale="'.$cCidades.'"'; 
$urlIcon = 'http://api.climatempo.com.br/api/v1/forecast/15days/icon?idlocale="'.$cCidades.'"';
$urlUV = 'http://api.climatempo.com.br/api/v1/forecast/15days/uv?idlocale="'.$cCidades.'"';

then run a request for each URL:

 $request = file_get_contents($urlChuva, true, $context); 
 $itemChuva =  simplexml_load_string($request);
 $request = file_get_contents($urlTemp, true, $context); 
 $itemTemp =  simplexml_load_string($request);

...

and process them separately, since each request comes with a different structure.

Follow code only with Rain and Temperature, you have to implement the others

<?php 

require_once('../Connections/con.php');

mysql_select_db($database_conCons, $conCons);
$query_rcCidades = "SELECT * FROM PrevisaoCidade WHERE PrevisaoCidade.ativo = 1 ORDER BY PrevisaoCidade.IdCidade";
$rcCidades = mysql_query($query_rcCidades, $conCons) or die(mysql_error());
$row_rcCidades = mysql_fetch_assoc($rcCidades);
$totalRows_rcCidades = mysql_num_rows($rcCidades);


do {

    // CIDADES CADASTRADAS
    $cCidades = $row_rcCidades['IdCidade'];

    $urlChuva = 'http://api.climatempo.com.br/api/v1/forecast/15days/rain?idlocale="'.$cCidades.'"'; 
    $urlTemp = 'http://api.climatempo.com.br/api/v1/forecast/15days/temperature?idlocale="'.$cCidades.'"';
    $urlVento = 'http://api.climatempo.com.br/api/v1/forecast/15days/wind?idlocale="'.$cCidades.'"';
    $urlHumi = 'http://api.climatempo.com.br/api/v1/forecast/15days/humidity?idlocale="'.$cCidades.'"'; 
    $urlIcon = 'http://api.climatempo.com.br/api/v1/forecast/15days/icon?idlocale="'.$cCidades.'"';
    $urlUV = 'http://api.climatempo.com.br/api/v1/forecast/15days/uv?idlocale="'.$cCidades.'"';

    // PERMISSÃO 
    $post = array(  
        'key' => '',  
        'client' => '', 
        'nocache' => true,  
        'type' => 'xml',  
        'application' => 'Previsão 15 dias - Cidades'  
    );  

    // OBTENDO PERMISSÃO  
    $http = array(  
        'method' => 'POST',  
        'header' => 'Content-type: application/x-www-form-urlencoded',  
        'content' => http_build_query($post)  
    );  

    $context = stream_context_create(array('http' => $http));   
    $request = file_get_contents($urlChuva, true, $context); 
    $itemChuva =  simplexml_load_string($request);
    $request = file_get_contents($urlTemp, true, $context); 
    $itemTemp =  simplexml_load_string($request);       
    //OUTRAS REQUISIÇÕES...

    // DATA PARA INSERÇÃO E/OU UPDATE
    $DataAux = substr((string)$item->data->item['dateBegin'], 0, -9);

    // SELECIONANDO CHUVA
    $Prec = null;
    $Prob = null;
    foreach($itemChuva->data->item->weather->item as $reg) {   

        // $data_aux  = substr($data,6,4).'-'.substr($data,3,2).'-'.substr($data,0,2);

        // ZERANDO O ARRAY
        $data = array();

            // CHUVA                
            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'precipitation' => (string)$reg['precipitation'],
                'probability' => (string)$reg['probability'],
                'date' => (string)$reg['date']
            );

            // ATRIBUINDO AS VARIÁVEIS      
            $Prec = $data['api']['data']['item']['weather']['item'][0]['precipitation'];
            $Prob = $data['api']['data']['item']['weather']['item'][0]['probability'];
    }

    // SELECIONANDO TEMPERATURA
    $TMin = null;
    $TMax = null;
    foreach($itemTemp->data->item->weather->item as $reg) {   

        // $data_aux  = substr($data,6,4).'-'.substr($data,3,2).'-'.substr($data,0,2);

        // ZERANDO O ARRAY
        $data = array();

            // TEMPERATURA  
            $data['api']['data']['item']['weather']['item'][] = array 
            (
                // LENDO OS NÓS
                'TMin' => (string)$reg['min'],
                'TMax' => (string)$reg['max']
            );

            // ATRIBUINDO AS VARIÁVEIS      
            $TMin = $data['api']['data']['item']['weather']['item'][0]['min'];
            $TMax = $data['api']['data']['item']['weather']['item'][0]['max'];
    }


    //RESTANTE DOS PROCESSAMENTOS


    //OS COMANDOS DO BANCO FICAM FORA DO LOOP QUE PERCORRE O RETORNO DE DADOS
    // INSERT DOS SERVIÇOS
    mysql_select_db($database_conCons, $conCons);
    $sql = "SELECT Data, IdCidade FROM PrevisaoClima WHERE Data = '$DataAux' AND IdCidade = $cCidades";
    $rcDados = mysql_query($sql, $conCons) or die(mysql_error());
    $row_rcDados = mysql_fetch_assoc($rcDados);
    $totalRows_rcDados = mysql_num_rows($rcDados);

    if ($totalRows_rcDados > 0) {               
        mysql_select_db($database_conCons, $conCons);
        $sql = "UPDATE 'cpCons_webCons'.'PrevisaoClima' SET 'Frase'='$Frase', 'TempMin'='$TMin', 'TempMax'='$TMax', 'ProbChuva'='$Prob', 'PrecisaoChuva'='$Prec', 'IconeManha'='$IcoManha', 'IconeTarde'='$IcoTarde', 'IconeNoite'='$IcoNoite', 'IconeDia'='$IcoDia', 'VentoDir'='$VenDir', 'VentoMax'='$VenMax', 'VentoMin'='$VenMin', 'Umidade'='$UmMax', 'Uv'='$UvMax' WHERE 'Data'='$DataAux' AND 'IdCidade' = $cCidades";
        $result = mysql_query($sql, $conCons);
        if (!$result) {
            $message  = 'ERRO: ' . mysql_error() . "\n";
            $message .= 'Query: ' . $sql;
            die($message);
        }
    } else {
        //Cria os dados da importação
        mysql_select_db($database_conCons, $conCons);
        $sql = "INSERT INTO 'cpCons_webCons'.'PrevisaoClima' ('Data', 'IdCidade', 'Frase', 'TempMin', 'TempMax', 'ProbChuva', 'PrecisaoChuva', 'IconeManha', 'IconeTarde', 'IconeNoite', 'IconeDia', 'VentoDir', 'VentoMax', 'VentoMin', 'Umidade', 'Uv') VALUES ('$DataAux', '$cCidades', '$Frase', '$TMin', '$TMax', '$Prob', '$Prec', '$IcoManha', '$IcoTarde', '$IcoNoite', '$IcoDia', '$VenDir', '$VenMax', '$VenMin', '$UmiMax', '$UvMax')";
        $result = mysql_query($sql, $conCons);
        if (!$result) {
            $message  = 'ERRO: ' . mysql_error() . "\n";
            $message .= 'Query: ' . $sql;
            die($message);
        }
    }   

} while ($row_rcCidades = mysql_fetch_assoc($rcCidades));  
    
27.04.2017 / 20:35