array( // 'user_agent' => 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G950F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.53 Mobile Safari/537.36',//senza ua airbnb.es su alcune richieste da' 403 Forbidden // 'timeout' => 5, // ), // 'ssl'=>array( // "verify_peer"=>TNX_SECURE_CURL, // ), // )); // $data = file_get_contents($filename, false, $context); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $filename); curl_setopt($ch, CURLOPT_HTTPHEADER, ['User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36']);//senza ua airbnb.es su alcune richieste da' 403 Forbidden curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); if(IcalParser::$timeout) curl_setopt($ch, CURLOPT_TIMEOUT, IcalParser::$timeout); $data = curl_exec($ch); curl_close($ch); if(!$data || strpos(trim($data), "BEGIN:VCALENDAR") !== 0) return false; $separator = "\n";//bbplanner // if(strpos(substr($data, 0, -2), "\r\n") !== false) $separator = "\r\n";//con solo \n fallisce hotelbb - 2024/09: ho trovato un altro calendario che ha entrambi i separatori (la maggior parte \n, quindi fallisce) $data = explode("BEGIN:VEVENT", $data); $allProps = array( "uid", "dtstart", "dtstart-value-date", "dtend", "dtend-value-date", "summary", "description", "created", "last-modified", "dtstamp",//ultima modifica "x-microsoft-cdo-alldayevent",//slope "transp",//slope "class",//slope "status",//bbplanner "location",//bbplanner "sequence", "x-microsoft-cdo-busystatus", "resources", "categories"//booking-reservations ); $return = array(); foreach($data as $k=>$v){ $array = array(); $rows = explode($separator, $v); foreach($rows as $kk=>$vv){ if($vv{0} == ' ') $array[$key] .= substr($vv, 1);//se la riga inizia con spazio lo accodo alla precedente chiave else{ $vv = trim($vv); if(!$vv) continue; $pos = strpos($vv, ":"); $key = preg_replace("/[^\w]/", "-", strtolower(substr($vv, 0, $pos))); if(!$k || in_array($key, $allProps)){ $array[$key] = substr($vv, $pos+1); } else if(!in_array($vv, array('END:VEVENT', 'END:VCALENDAR'))){ trigger_error("Dati non previsti: ".$vv); $array["?"][] = $vv; } } if($addAllRawData) $array["raw"][] = $vv; } if($array['description']) $array['description'] = str_replace("\\n", "\n", $array['description']); if(!$k){ $return['info'] = $array; } else{ if(!$array["uid"]) trigger_error("uid non trovato ".$v); if($return[$array["uid"]]) trigger_error("uid duplicato"); $return['eventi'][$array["uid"]] = $array; } } return $return; } } ?>