Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17

    Importare dati da file json (Meteo) e riconvertirli in altro formato

    Premessa non sono esperto di php.
    Dal web scarico i dati aggiornati del meteo da un file json.
    Il file è caratterizzato da 2 parti distinte.
    La prima parte riguarda i dati giornalieri e la seconda parte riguarda i dati con le previsioni di più giorni.
    Il file naturalmente è scritto tutto di seguito io l’ho spezzato per far capire il meccanismo.
    {
    "latitude":45.4,"longitude":8.92,"generationtime_m s":0.10204315185546875,"utc_offset_seconds":3600," timezone":"Europe/Rome","timezone_abbreviation":"CET","elevation":12 7.0,
    "current_units":
    {"time":"iso8601","interval":"seconds","temperatur e_2m":"°C","relative_humidity_2m":"%","apparent_te mperature":"°C","weather_code":"wmo code","pressure_msl":"hPa","surface_pressure":"hPa ","wind_speed_10m":"km/h","wind_direction_10m":"°"},
    "current":{"time":"2024-01-23T21:30","interval":900,"temperature_2m":3.2,"rel ative_humidity_2m":77,"apparent_temperature":0.2," weather_code":1,"pressure_msl":1033.0,"surface_pre ssure":1016.9,"wind_speed_10m":4.8,"wind_direction _10m":48},"hourly_units":{"time":"iso8601","temper ature_2m":"°C","relative_humidity_2m":"%","weather _code":"wmo code"},
    "hourly":
    {"time":["2024-01-23T00:00","2024-01-23T01:00","2024-01-23T02:00","2024-01-23T03:00","2024-01-23T04:00","2024-01-23T05:00","2024-01-23T06:00","2024-01-23T07:00","2024-01-23T08:00","2024-01-23T09:00","2024-01-23T10:00","2024-01-23T11:00","2024-01-23T12:00","2024-01-23T13:00","2024-01-23T14:00","2024-01-23T15:00","2024-01-23T16:00","2024-01-23T17:00","2024-01-23T18:00","2024-01-23T19:00","2024-01-23T20:00","2024-01-23T21:00","2024-01-23T22:00","2024-01-23T23:00","2024-01-24T00:00","2024-01-24T01:00","2024-01-24T02:00","2024-01-24T03:00","2024-01-24T04:00","2024-01-24T05:00","2024-01-24T06:00","2024-01-24T07:00","2024-01-24T08:00","2024-01-24T09:00","2024-01-24T10:00","2024-01-24T11:00","2024-01-24T12:00","2024-01-24T13:00","2024-01-24T14:00","2024-01-24T15:00","2024-01-24T16:00","2024-01-24T17:00","2024-01-24T18:00","2024-01-24T19:00","2024-01-24T20:00","2024-01-24T21:00","2024-01-24T22:00","2024-01-24T23:00","2024-01-25T00:00","2024-01-25T01:00","2024-01-25T02:00","2024-01-25T03:00","2024-01-25T04:00","2024-01-25T05:00","2024-01-25T06:00","2024-01-25T07:00","2024-01-25T08:00","2024-01-25T09:00","2024-01-25T10:00","2024-01-25T11:00","2024-01-25T12:00","2024-01-25T13:00","2024-01-25T14:00","2024-01-25T15:00","2024-01-25T16:00","2024-01-25T17:00","2024-01-25T18:00","2024-01-25T19:00","2024-01-25T20:00","2024-01-25T21:00","2024-01-25T22:00","2024-01-25T23:00"],
    "temperature_2m":[0.8,1.1,0.7,0.6,-0.1,-0.3,-0.4,-0.3,-0.5,-0.3,1.6,3.8,6.1,8.6,9.9,10.9,11.0,9.0,6.3,5.0,4.1, 3.4,2.9,2.3,2.0,1.7,1.5,1.1,0.9,0.7,0.0,0.1,-0.0,-0.1,1.2,3.4,6.0,8.2,9.7,10.5,10.5,9.3,7.9,6.7,5.8, 5.3,4.8,4.3,4.0,3.7,3.7,3.5,3.4,3.1,2.9,2.5,2.2,2. 6,4.7,7.8,10.3,12.4,13.9,14.6,14.3,12.7,10.5,8.8,6 .8,5.9,5.1,4.5],"relative_humidity_2m":[79,71,69,70,69,72,74,80,79,78,61,53,53,40,36,35,33 ,48,62,66,69,75,78,80,80,80,80,79,79,79,81,78,78,8 0,77,67,57,49,47,46,48,56,62,66,69,71,73,76,78,80, 82,84,85,88,89,90,90,89,82,71,64,60,56,55,60,67,78 ,94,93,93,91,89],
    "weather_code":
    [1,0,3,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,1, 1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, 1,0,0,0,0,0,0,1,1,1,1,2,2,2,2,1,1,1,0,0,0,0]
    }
    }

    Qui sotto è illustrato come sono strutturati


    latitude longitude elevation utc_offset_seconds timezone timezone_abbreviation


    45.4 8.92 127.0 GMT GMT











    time temperature_2m (°C) relative_humidity_2m (%) apparent_temperature (°C) weather_code (wmo code) pressure_msl (hPa) surface_pressure (hPa) wind_speed_10m (km/h) wind_direction_10m (°)
    2024-01-23T21:30 2.6 79 -0.3 2 1033.5 1017.4 4.4 35

    time temperature_2m (°C) relative_humidity_2m (%) weather_code (wmo code)
    2024-01-23T00:00 1.1 71
    2024-01-23T01:00 0.7 69 3
    2024-01-23T02:00 0.6 70
    2024-01-23T03:00 -0.1 69
    2024-01-23T04:00 -0.3 72
    ecc.


    ecc.


    ecc.



    Ho bisogno di esportare i dati in 2 file .txt distinti:


    Il primo contenete i dati giornalieri, con il seguente formato (carattere separatore potrebbe essere la virgola, vedi esempio).


    Esempio:
    latitude,45.4,longitude,8.92,generationtime_ms,0.1 0204315185546875,utc_offset_seconds,3600 - - - ecc. ecc. - - -


    Il secondo con le previsioni ma con il seguente formato, in pratica: prima Time, poi Temperatura, poi Umidità e infine il Weather code (carattere separatore potrebbe essere la virgola con i dati di ogni ora racchiusi tra le parentesi quadre, vedi esempio).


    Esempio:
    [2024-01-23T00:00,0.8,79,1] [2024-01-23T01:00,1.1,71,0] - - - ecc. ecc. - - -

    La pagina è in formato php e il codice che uso per caricare il file è il seguente:


    Codice PHP:
    <?phpcurl_setopt($curl_handleCURLOPT_URL,'https://api.open-meteo.com/v1/forecast?latitude=45.3982&longitude=8.9168&current=temperature_2m,relative_humidity_2m,weather_code,wind_speed_10m,wind_direction_10m&hourly=temperature_2m,relative_humidity_2m');      curl_setopt($curl_handleCURLOPT_CUSTOMREQUEST"GET");      curl_setopt($curl_handleCURLOPT_CONNECTTIMEOUT2);      curl_setopt($curl_handleCURLOPT_RETURNTRANSFER1);           $query curl_exec($curl_handle);            print_r (json_decode($query,true));            $data json_decode($querytrue);?>


    Ringrazio in anticipo per il vostro contributo.

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Per il primo file credo che ti basti semplicemente crearti la stringa dai dati che ti servono
    Codice PHP:
    $jo json_decode($jstringtrue);
    $str 'latitude,'.$jo['latitude'].',longitude,'.$jo['longitude]'.',..etc'
    Se i campi stanno allo stesso livello, più elegantemente:
    Codice PHP:
    $f = ["latitude""longitude","generationtime_ms"etc];
    $out = [];
    foreach(
    $f as $field){
        
    $out[] = $field.','.$jo[$field];
    }
    $str implode(',',$out); 

    per il secondo file:
    Codice PHP:
    $out = [];
    for(
    $i=0$i count($jo['hourly']['time']); $i++){
        
    $out[] = $jo['hourly']['time'][$i].','.$jo['hourly']['temperature_2m'][$i].','.$jo['hourly']['weather_code'][$i];
    }
    $str'['.implode('],['$out).']'
    per salvare la stringa usa la file_put_contents(<path del file>, $str)

    Ovviamente non ho messo alcun controllo...valuta tu se servono
    Ultima modifica di boots; 24-01-2024 a 18:21

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2023
    Messaggi
    17
    Grazie mille per la tempestiva risposta e aiuto.
    Ho provato ora e con le opportune modifiche per il mio caso funziona come avevo bisogno.

    Grazie ancora ti offro una birra virtuale

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.