cfgReadChar('system.oauth2_token'); $db_host = $savvyext->cfgReadChar('database.host'); $db_name = $savvyext->cfgReadChar('database.name'); $db_user = $savvyext->cfgReadChar('database.user'); $db_pass = $savvyext->cfgReadChar('database.pass'); $db_port = $savvyext->cfgReadLong('database.port'); $connstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $con = pg_connect($connstr); // or die ("Could not connect to server\n"); $db_host = $savvyext->cfgReadChar('database_replica.host'); $db_name = $savvyext->cfgReadChar('database_replica.name'); $db_user = $savvyext->cfgReadChar('database_replica.user'); $db_pass = $savvyext->cfgReadChar('database_replica.pass'); $db_port = $savvyext->cfgReadLong('database_replica.port'); $readOnlyReplicaConnstr = "host=${db_host} port=${db_port} dbname=${db_name} user=${db_user} password=${db_pass}"; $readOnlyReplicaConn = pg_connect($readOnlyReplicaConnstr); // Step 1: get URA token $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://www.ura.gov.sg/uraDataService/insertNewToken.action", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 1000, //1000s CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "accesskey: support@float.sg", "cache-control: no-cache", ), )); $response = json_decode(curl_exec($curl), true); $err = curl_error($curl); curl_close($curl); $token = $response['Result'] ?? ''; if ($err) { echo "cURL Error #1: Cannot get URA token!!! - " . $err; } // Step2. get car parking $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://www.ura.gov.sg/uraDataService/invokeUraDS?service=Car_Park_Details", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 1000, //1000s CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "accesskey: support@float.sg", "token: $token", "cache-control: no-cache" ), )); $response = json_decode(curl_exec($curl), true); $err = curl_error($curl); curl_close($curl); $parking_lots = $response['Result'] ?? []; if ($err) { echo "cURL Error #2: Cannot get car parking - " . $err; } // Step 3. INSERT data to database if (!empty($parking_lots)) { $now = (new \DateTime())->format('Y-m-d H:i:s'); $svy21 = new SVY21(); pg_query($con, 'DELETE FROM parking_lot'); pg_query($con, 'ALTER SEQUENCE parking_lot_id_seq RESTART WITH 1'); foreach ($parking_lots as $key => $lot) { foreach ($lot['geometries']??[] as $geo){ list($n, $e) = explode(',',$geo['coordinates']); list($lat, $long) = $svy21->CnvEN2LL($n, $e); $res = pg_insert($con, 'parking_lot', [ 'ppcode' => $lot['ppCode'] ?? '', 'name' => $lot['ppName'] ?? '', 'address' => $lot['ppName'] ?? '', 'lat' => strval($lat), 'long' => strval($long), 'weekday_price' => (float)str_replace('$', '', $lot['weekdayRate']??0), 'sat_price' => (float)str_replace('$', '', $lot['satdayRate']??0), 'sun_price' => (float)str_replace('$', '', $lot['sunPHRate']??0), 'start_time' => $lot['startTime'] ?? '', 'end_time' => $lot['endTime'] ?? '', 'updated_time' => $now, ], PGSQL_DML_ASYNC); } } } //unlock_pid_file($lock_file); echo "[" . date("Y-m-d H:i:s") . "] " . $job_name . " completed.\n"; ?>