add_cap( $cap ); } $role = get_role( 'administrator' ); foreach ( $capabilities as $cap ) { $role->add_cap( $cap ); } $role = get_role( 'editor' ); foreach ( $capabilities as $cap ) { $role->add_cap( $cap ); } $role = get_role( 'author' ); foreach ( $capabilities as $cap ) { $role->add_cap( $cap ); } */ function reactpress_enqueue_scripts() { if (is_page('trips')) { wp_dequeue_script('currency-converter'); wp_dequeue_script('swup'); } } add_action('wp_enqueue_scripts', 'reactpress_enqueue_scripts', 20000); function reactpress_head() { global $wp_query; if (is_page('trips')) { ?> 'get_post_meta_for_api', 'schema' => null, ) ); } function get_post_meta_for_api( $obj ) { $postmeta = get_post_meta( $obj['id']); //=============== $apiKey = "0772153bce5238310c5a3fcbe783d1a7"; $cityId = get_field('city_code', $obj['id']); $apiUrl = "https://api.openweathermap.org/data/2.5/weather?id=" . $cityId . "&lang=ru&units=metric&APPID=" . $apiKey; $data = get_transient('weather_data_'.$cityId); if( empty($data) ){ $crequest = curl_init(); curl_setopt($crequest, CURLOPT_HEADER, 0); curl_setopt($crequest, CURLOPT_RETURNTRANSFER, 1); curl_setopt($crequest, CURLOPT_URL, $apiUrl); curl_setopt($crequest, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($crequest, CURLOPT_VERBOSE, 0); curl_setopt($crequest, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($crequest); curl_close($crequest); $data = json_decode($response); set_transient('weather_data_'.$cityId, $data, 3600); // 3600 in seconds = 1h } $postmeta['weather'] = [ 'description' => ucwords($data->weather[0]->description), 'icon' => $data->weather[0]->icon, 'temp' => intval($data->main->temp) ]; //=============== foreach ($postmeta as $key => $field){ if ($key == 'cost_of_living_raw'){ $field = unserialize($field[0]); $postmeta[$key] = $field; } if ($key == 'country'){ $country = get_field_object('country', $obj['id']); $country = $country['choices'][$country['value']]; $postmeta[$key] = $country; } } return $postmeta; } //=================================================================================== //=== aviasales === $travelpayouts_token = '6d0c907fad90bb689a5db94d75b3789d'; // add_action('rest_api_init', function () { // register_rest_route( 'aviasales/v1', '/aviasales/', array( // 'methods' => 'GET', // 'callback' => 'aviasales', // )); // }); // function aviasales($request) { // global $travelpayouts_token; // $url = 'https://api.travelpayouts.com/aviasales/v3/prices_for_dates'; // //$request->get_param('cheap') // $params = [ // 'origin' => $request->get_param('departure_city'), // 'destination' => $request->get_param('destination_city'), // 'departure_at' => $request->get_param('departure_date'), // //'trip_class' => $request->get_param('type'), // 'unique' => 'false', // 'sorting' => 'price', // // 'direct' => 'false', // 'currency' => 'usd', // 'limit' => '15', //100 // 'page' => '1', // 'token' => $travelpayouts_token, // ]; // if ($request->get_param('direction') == 'oneway') { // $params['one_way'] = 'true'; // } else { // $params['one_way'] = 'false'; // $params['return_at'] = $request->get_param('return_date'); // } // //$request->get_param('persons') // $ch = curl_init($url.'?' . http_build_query($params)); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // curl_setopt($ch, CURLOPT_HEADER, false); // curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate"); // $result = curl_exec($ch); // $result = json_decode($result); // curl_close($ch); // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($params, true), FILE_APPEND); // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($result, true), FILE_APPEND); // return $result; // } add_action('rest_api_init', function () { register_rest_route('aviasales/v1', '/search/', array( 'methods' => 'GET', 'callback' => 'aviasales_search', )); }); function aviasales_search($request) { $log_file = $_SERVER['DOCUMENT_ROOT'] . '/flight_logs.txt'; $debug_log_file = $_SERVER['DOCUMENT_ROOT'] . '/debug_log_flights.txt'; function log_message($log_file, $message) { $timestamp = date("Y-m-d H:i:s"); file_put_contents($log_file, "[$timestamp] $message" . PHP_EOL, FILE_APPEND); } log_message($log_file, "Starting flight search request."); $marker = '402943'; $host = 'travcave.ru'; $user_ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown'; $locale = 'en'; $trip_class = 'Y'; $signature_token = '6d0c907fad90bb689a5db94d75b3789d'; $segments = [ [ 'origin' => $request->get_param('departure_city'), 'destination' => $request->get_param('destination_city'), 'date' => $request->get_param('departure_date') ] ]; if ($request->get_param('return_date')) { $segments[] = [ 'origin' => $request->get_param('return_city'), 'destination' => $request->get_param('return_destination_city'), 'date' => $request->get_param('return_date') ]; } $params = [ 'host' => $host, 'marker' => $marker, 'user_ip' => $user_ip, 'locale' => $locale, 'trip_class' => $trip_class, 'passengers' => [ 'adults' => (int) $request->get_param('adults'), 'children' => (int) $request->get_param('children'), 'infants' => (int) $request->get_param('infants') ], 'segments' => $segments ]; log_message($debug_log_file, "Received parameters: " . json_encode($params)); $signature_elements = [ $signature_token, $host, $locale, $marker, $params['passengers']['adults'], $params['passengers']['children'], $params['passengers']['infants'], $params['segments'][0]['date'], $params['segments'][0]['destination'], // Reverse order for signature $params['segments'][0]['origin'] // Reverse order for signature ]; if (isset($params['segments'][1])) { $signature_elements = array_merge($signature_elements, [ $params['segments'][1]['date'], $params['segments'][1]['destination'], // Reverse order for signature $params['segments'][1]['origin'] // Reverse order for signature ]); } $signature_elements = array_merge($signature_elements, [ $trip_class, $user_ip ]); $signature_string = implode(':', $signature_elements); $signature = md5($signature_string); $params['signature'] = $signature; $json_params = json_encode($params); if (json_last_error() !== JSON_ERROR_NONE) { $json_error = json_last_error_msg(); log_message($log_file, "JSON encode error: $json_error"); return array('error' => 'JSON encode error', 'message' => $json_error); } log_message($log_file, "Request parameters: $json_params"); $url = 'http://api.travelpayouts.com/v1/flight_search'; log_message($log_file, "Request URL: $url"); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_ENCODING, "gzip, deflate"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_params); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_VERBOSE, true); ob_start(); $result = curl_exec($ch); $curl_error = curl_error($ch); $verbose_log = ob_get_contents(); ob_end_clean(); log_message($log_file, "CURL error (if any): $curl_error"); log_message($log_file, "CURL verbose log: $verbose_log"); log_message($log_file, "API response: $result"); $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); log_message($log_file, "HTTP response code: $response_code"); curl_close($ch); if ($response_code != 200) { log_message($log_file, "API request failed with response code: $response_code"); return array('error' => 'API request failed', 'response_code' => $response_code); } $result = json_decode($result, true); if (json_last_error() !== JSON_ERROR_NONE) { $json_error = json_last_error_msg(); log_message($log_file, "JSON decode error: $json_error"); return array('error' => 'JSON decode error', 'message' => $json_error); } if (empty($result)) { log_message($log_file, "Empty result received from API."); return array('error' => 'No results', 'message' => 'No results returned from API.'); } log_message($log_file, "Returning result to client."); return $result; } add_action('rest_api_init', function () { register_rest_route('aviasalescity/v1', '/autocomplete/', array( 'methods' => 'GET', 'callback' => 'aviasales_city_autocomplete', )); }); function aviasales_city_autocomplete($request) { $log_file = $_SERVER['DOCUMENT_ROOT'] . '/flight_logs.txt'; $debug_log_file = $_SERVER['DOCUMENT_ROOT'] . '/debug_log_flights.txt'; // Helper function to log messages function log_message($log_file, $message) { $timestamp = date("Y-m-d H:i:s"); file_put_contents($log_file, "[$timestamp] $message" . PHP_EOL, FILE_APPEND); } log_message($log_file, "Starting city autocomplete request."); log_message($debug_log_file, "Starting city autocomplete request."); $url = 'https://autocomplete.travelpayouts.com/places2'; log_message($log_file, "Request URL: $url"); log_message($debug_log_file, "Request URL: $url"); $params = [ 'locale' => 'ru', 'term' => $request->get_param('city'), ]; log_message($log_file, "Request parameters: " . http_build_query($params)); log_message($debug_log_file, "Request parameters: " . http_build_query($params)); $ch = curl_init($url . '?' . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $result = curl_exec($ch); $curl_error = curl_error($ch); log_message($log_file, "CURL error (if any): $curl_error"); log_message($debug_log_file, "CURL error (if any): $curl_error"); log_message($log_file, "API response: $result"); log_message($debug_log_file, "API response: $result"); $result = json_decode($result, true); curl_close($ch); if (json_last_error() !== JSON_ERROR_NONE) { $json_error = json_last_error_msg(); log_message($log_file, "JSON decode error: $json_error"); log_message($debug_log_file, "JSON decode error: $json_error"); return array('error' => 'JSON decode error', 'message' => $json_error); } if (empty($result)) { log_message($log_file, "Empty result received from API."); log_message($debug_log_file, "Empty result received from API."); return array('error' => 'No results', 'message' => 'No results returned from API.'); } $result = array_slice($result, 0, 10); log_message($log_file, "Returning result to client."); log_message($debug_log_file, "Returning result to client."); return $result; } add_action('rest_api_init', function () { register_rest_route( 'aviasalescity/v1', '/aviasalescity/', array( 'methods' => 'GET', 'callback' => 'aviasalescity', )); }); function aviasalescity($request) { $url = 'https://autocomplete.travelpayouts.com/places2'; $params = [ 'locale' => 'ru', //'types[]' => 'airport',//, 'city' 'term' => $request->get_param('city'), ]; $ch = curl_init($url.'?' . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $result = curl_exec($ch); $result = json_decode($result); $result = array_slice($result, 0, 10); curl_close($ch); //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($result, true), FILE_APPEND); return $result; } //=================================================================================== //=== hotels === // add_action('rest_api_init', function () { // register_rest_route( 'hotels/v1', '/hotels/', array( // 'methods' => 'GET', // 'callback' => 'hotels', // )); // }); // function hotels($request) { // //return '1234'; // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($params, true), FILE_APPEND); // $travelpayouts_token = '6d0c907fad90bb689a5db94d75b3789d'; // $url = 'https://engine.hotellook.com/api/v2/lookup.json'; // $params = [ // 'query' => $request->get_param('city'), // 'lang' => 'ru', // 'lookFor' => 'city', // 'limit' => 1, // 'token' => $travelpayouts_token, // ]; // $ch = curl_init($url.'?' . http_build_query($params)); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // curl_setopt($ch, CURLOPT_HEADER, false); // $result = curl_exec($ch); // $result = json_decode($result); // curl_close($ch); // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($result, true), FILE_APPEND); // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($results->results, true), FILE_APPEND); // if (isset($result->results->locations[0])) { // $id = $result->results->locations[0]->id; // file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', 'id='.$id, FILE_APPEND); // $url = 'https://yasen.hotellook.com/tp/public/widget_location_dump.json'; // $params = [ // 'currency' => 'usd', // 'language' => 'ru', // 'limit' => 100, // 'id' => $id, // 'type' => 'popularity', // 'check_in' => $request->get_param('start_date'), // 'check_out' => $request->get_param('end_date'), // 'token' => $travelpayouts_token, // ]; // $ch = curl_init($url.'?' . http_build_query($params)); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // curl_setopt($ch, CURLOPT_HEADER, false); // $result = curl_exec($ch); // $result = json_decode($result); // curl_close($ch); // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($result, true), FILE_APPEND); // } else { // $result = false; // } // //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/data.txt', print_r($result, true), FILE_APPEND); // return $result; // } function get_city_id($city, $token) { $url = 'https://engine.hotellook.com/api/v2/lookup.json'; $params = [ 'query' => $city, 'lang' => 'ru', 'lookFor' => 'city', 'limit' => 1, 'token' => $token, ]; $ch = curl_init($url . '?' . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $result = curl_exec($ch); curl_close($ch); $result = json_decode($result, true); if (isset($result['results']['locations'][0]['id'])) { return $result['results']['locations'][0]['id']; } else { return false; } } function start_hotel_search($location, $check_in, $check_out, $adults_count, $token, $customer_ip, $marker, $iata = 'MOW') { $url = 'https://engine.hotellook.com/api/v2/search/start.json'; $params = [ 'cityId' => $location, 'checkIn' => $check_in, 'checkOut' => $check_out, 'adultsCount' => $adults_count, 'customerIP' => $customer_ip, 'currency' => 'USD', 'lang' => 'ru', 'waitForResult' => 0, 'marker' => $marker, 'childrenCount' => 1, 'childAge' => 10, 'iata' => $iata, ]; // Correct signature string construction $signature_string = "$token:$marker:$adults_count:$check_in:$check_out:10:1:$location:USD:$customer_ip:$iata:ru:0"; $params['signature'] = md5($signature_string); // Log all variables for signature file_put_contents('debug_log.txt', "Token: $token\n", FILE_APPEND); file_put_contents('debug_log.txt', "Marker: $marker\n", FILE_APPEND); file_put_contents('debug_log.txt', "Adults Count: $adults_count\n", FILE_APPEND); file_put_contents('debug_log.txt', "Check-in: $check_in\n", FILE_APPEND); file_put_contents('debug_log.txt', "Check-out: $check_out\n", FILE_APPEND); file_put_contents('debug_log.txt', "Child Age 1: 10\n", FILE_APPEND); file_put_contents('debug_log.txt', "Children Count: 1\n", FILE_APPEND); file_put_contents('debug_log.txt', "Currency: USD\n", FILE_APPEND); file_put_contents('debug_log.txt', "Customer IP: $customer_ip\n", FILE_APPEND); file_put_contents('debug_log.txt', "IATA: $iata\n", FILE_APPEND); file_put_contents('debug_log.txt', "Location: $location\n", FILE_APPEND); file_put_contents('debug_log.txt', "Lang: ru\n", FILE_APPEND); file_put_contents('debug_log.txt', "Wait For Result: 0\n", FILE_APPEND); file_put_contents('debug_log.txt', "Generated Signature String: $signature_string\n", FILE_APPEND); file_put_contents('debug_log.txt', "Generated Signature: " . $params['signature'] . "\n", FILE_APPEND); $ch = curl_init($url . '?' . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $result = curl_exec($ch); $curl_info = curl_getinfo($ch); // Get curl info $curl_error = curl_error($ch); // Get curl error if any curl_close($ch); $result = json_decode($result, true); if (isset($result['searchId'])) { return $result['searchId']; } else { // Log request and response for debugging file_put_contents('debug_log.txt', "Request URL: " . $url . '?' . http_build_query($params) . "\n", FILE_APPEND); file_put_contents('debug_log.txt', "Response: " . print_r($result, true) . "\n", FILE_APPEND); file_put_contents('debug_log.txt', "Curl Info: " . print_r($curl_info, true) . "\n", FILE_APPEND); file_put_contents('debug_log.txt', "Curl Error: " . $curl_error . "\n", FILE_APPEND); return false; } } function get_hotel_search_results($search_id, $token, $marker) { $url = 'https://engine.hotellook.com/api/v2/search/getResult.json'; $params = [ 'searchId' => $search_id, 'limit' => 10, 'offset' => 0, 'sortBy' => 'price', 'sortAsc' => 1, 'roomsCount' => 0, 'marker' => $marker, ]; $signature_string = "$token:$marker:10:0:0:$search_id:1:price"; $params['signature'] = md5($signature_string); // Log all variables for signature file_put_contents('debug_log.txt', "Token: $token\n", FILE_APPEND); file_put_contents('debug_log.txt', "Marker: $marker\n", FILE_APPEND); file_put_contents('debug_log.txt', "Limit: 10\n", FILE_APPEND); file_put_contents('debug_log.txt', "Offset: 0\n", FILE_APPEND); file_put_contents('debug_log.txt', "Rooms Count: 0\n", FILE_APPEND); file_put_contents('debug_log.txt', "Search ID: $search_id\n", FILE_APPEND); file_put_contents('debug_log.txt', "Sort Asc: 1\n", FILE_APPEND); file_put_contents('debug_log.txt', "Sort By: price\n", FILE_APPEND); file_put_contents('debug_log.txt', "Generated Signature String: $signature_string\n", FILE_APPEND); file_put_contents('debug_log.txt', "Generated Signature: " . $params['signature'] . "\n", FILE_APPEND); $ch = curl_init($url . '?' . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $result = curl_exec($ch); curl_close($ch); $result = json_decode($result, true); return $result; } add_action('rest_api_init', function () { register_rest_route('hotels/v1', '/hotels/', array( 'methods' => 'GET', 'callback' => 'hotels_search', )); }); function hotels_search($request) { $travelpayouts_token = '6d0c907fad90bb689a5db94d75b3789d'; $marker = '402943'; $customer_ip = $_SERVER['REMOTE_ADDR']; // Correct the iata code parameter $city = $request->get_param('city') ?? 'MOW'; $check_in = $request->get_param('start_date'); $check_out = $request->get_param('end_date'); $adults_count = $request->get_param('adults_count') ?? 1; // Default to 1 if not provided // Debugging output for city ID retrieval $city_id = get_city_id($city, $travelpayouts_token); if (!$city_id) { file_put_contents('debug_log.txt', "City ID retrieval failed for city: $city\n", FILE_APPEND); return array('error' => 'City not found', 'debug' => 'City ID retrieval failed'); } // Debugging output for search initiation $search_id = start_hotel_search($city_id, $check_in, $check_out, $adults_count, $travelpayouts_token, $customer_ip, $marker, $city); if (!$search_id) { file_put_contents('debug_log.txt', "Hotel search initiation failed for city_id: $city_id\n", FILE_APPEND); return array('error' => 'Hotel search failed', 'debug' => 'Search initiation failed'); } // Fetch search results $result = get_hotel_search_results($search_id, $travelpayouts_token, $marker); if (isset($result['status']) && $result['status'] == 'ok') { return $result; } else { file_put_contents('debug_log.txt', "Search results retrieval failed for search_id: $search_id\n", FILE_APPEND); return array('error' => 'Hotel search results retrieval failed', 'debug' => 'Search results retrieval failed'); } } Список блюд признанных ЮНЕСКО всемирным наследием | Блог цифровых кочевников | TraveCave
ТрэвКейв
Первый в Рунете портал, объединяющий номадов по всему миру 🌎

Мы о путешествиях, о городах, о работе на удаленке. TravCave - это место, где каждый сможет стать блогером и рассказать свою историю.

ГлавнаяСтатьиЕда всемирного наследия ЮНЕСКО: фуд трэвел

Еда всемирного наследия ЮНЕСКО: фуд трэвел

1608 0

Еда составляет значительную часть нашей жизни, культуры и нас самих. Когда мы путешествуем, местная кухня – лучший способ познакомиться с другой страной. Любое путешествие нельзя представить без новых блюд, экзотических ингредиентов и необычных вкусов. Что-то кажется нам странным, что-то забавным, а что-то абсолютно отталкивающим.

Годы спустя мы все еще помним эти “кулинарные эксперименты”. Где-то на середине шелкового пути в уйгурской пустыне мне подарили целого приготовленного козла, обвязанного ленточкой. В Лаосе были белки на палочках. В Малайзии – вонючий дуриан. Закрыть глаза, и я вспомню вкус марципана в Будапеште, тажина в Марокко, зеленого вина в Вене, рисового мороженого в Китае. Все это больше, чем просто еда, это моменты которые объединяют людей, и заставляют сердце биться чаще. Поэтому каждое воспоминание о путешествии имеет незабываемый привкус: Испания – паэльи, Израиль – фалафеля, Таиланд – падтаи, Вьетнам – фо.

Самая знаменитая еда “всемирного наследия”

Список еды с пометкой «попробовать, прежде чем умереть» настолько огромен, что быстрее будет умереть, чем все попробовать. Однако среди неисчерпаемого разнообразия есть фавориты, которые существовали веками и признаются независимо от персональных вкусов. Это не просто вкусные блюда, а скорее культурная традиция, которая стоит за процессом приготовления и трапезы, передаваемая из поколения в поколение. Традиции мира, которые нужно защищать и сохранять. Для этого был создан список всемирного нематериального культурного наследия человечества ЮНЕСКО. Он включает в себя все, от аргентинского танго до индонезийского кукольного театра. Кроме того, в нем много отдельных блюд, продуктов, кулинарных фестивалей, ритуалов, традиций, знаний и обычаев, связанных с едой.  Давайте вместе отправимся в путешествие вкуса в различные уголки земного шара.

Кус-кус – Ближний Восток


Крошечные приготовленные на пару зернышки измельченной крупы из твердых сортов пшеницы — главный продукт кухни Магриба. Кус-кус настолько глубоко укоренился в культуре народов Алжира, Мавритании, Марокко и Туниса, что эти три страны совместно подали заявку в ЮНЕСКО. За пределами этих стран кускус, подаваемый с овощами, мясом или рыбой и специями, приобрел универсальное значение, и теперь его едят во всем мире. Он регулярно оказывается на вершине рейтинга любимых блюд французов. Приготовление кускуса — это церемониальный процесс, который начинается с выращивания зерна, после чего оно измельчается до состояния манной крупы, которую раскатывают вручную, размягчают на пару и затем готовят. Кус-кус может быть пикантным или сладким (с миндалем, корицей, сахаром, розовой или апельсиновой водой, а иногда и с изюмом). Обычно его подают с овощами, приготовленными в бульоне или рагу, а иногда и с мясом (курицей или бараниной). В Тунисе кускус приобретает остроту и ярко-оранжевый цвет благодаря хариссе, и его часто подают с морепродуктами. По мнению тунисцев, кускус — это солидарность, веселье и единение, но, прежде всего, вкусная семейная еда, которая накормит всех.

Кимчи – Корея


Это соленые ферментированные овощи, такие как капуста и редис. Приправы различаются, но обычно включают хлопья чили, чеснок, имбирь и соленые морепродукты. Люди, как правило, имеют твердое мнение о кимчи — они либо любят его, либо ненавидят. Кимчи – обязательная часть любой корейской еды. Каждый год в ноябре корейские семьи собираются на кимчжан, традиционный процесс приготовления кимчи. Исторически это происходило после сбора урожая, чтобы сохранить достаточное количество солений на всю семью в течение зимнего сезона. Готовый продукт хранили в глиняных кувшинах или ангари, которые закапывали в землю. Кимчи делают как в Южной Корее, так и в Северной Корее, поэтому он дважды внесен в список ЮНЕСКО.

Кешкек – Турция

 

Кешкек представляет собой блюдо из тушеного мяса или курицы, которое можно найти в турецкой, иранской и греческой кухнях. Оно связано с церемониальным или религиозным событием. В его приготовлении участвуют все местные жители. Сначала пшеницу или ячмень промывают и измельчают в течение первого дня под музыку барабанов и труб. Затем крупу высыпают в большой котел и взбивают деревянными молотками до получения однородной консистенции. На второй день блюдо готовят на открытом огне всю ночь, постепенно добавляя мясо и специи и оставляя кипеть.

Пицца – Неаполь


Здесь как никогда важна точность: не просто итальянская пицца, а именно неаполитанская. Шутки тут плохи, поскольку итальянцы невероятно серьезно относятся к своему национальному достоянию. Искусство приготовления пиццы пиццайуоло, внесенное в список наследия ЮНЕСКО, имеет свои строгие правила. Во-первых, местные ингредиенты из региона Кампания. Затем, специально обученный повар. В Италии существует даже официальная ассоциация Pizzaiuolo и три категории мастеров. Наконец, фирменный процесс, состоящий из четырех этапов: формирование шариков из теста (staglio); раскатывание теста (ammaccatura), когда пиццайоло делает знаменитый приподнятый край, называемый cornicione, искусным движением, известным как schiaffo. Затем тесто накрывают сверху, начиная с центра и закручивая по спирали по часовой стрелке. Наконец, пицца выпекается в дровяной печи с вращательным движением в полуоборота.

Лицитары – Хорватия


Пряничная выпечка давно стала символом Хорватии. Пряники были привезены в страну церковью в средние века. Традиция передавалась через семьи пряничников, которые разработали свои собственные стили украшения. Сердце, известное как сердце лицитара, является самой известной формой. Их дарят по особым случаям. Пряники обычно покрыты красной непрозрачной глазурью с белыми рисунками. Посередине принято ставить зеркало.

Севиче – Перу

Это блюдо из сырой рыбы, сладкого картофеля камоте и кукурузы чокло, заправленное лаймом представляет собой многолетнюю историю и разнообразие ландшафтов Перу, поскольку все ингредиенты происходят из разных регионов. Кстати, не путайте его с более знакомым собратом – мексиканским севиче.

Пармезан и Прошутто – Италия

Сыр Пармиджано-Реджано и ветчина Прошутто ди Парма – два отдельных продукта в списке наследия, которые можно найти в Болонье и Парме. Благодаря тысячелетним знаниям, истории и традициям ручного производства, оба этих продукта оставили свой след и получили звание специальных продуктов.

Пиво – Бельгия

Бельгийская пивная культура включает в себя традиции и мастерство пивоварения и является частью диеты и общественной жизни бельгийцев. В стране производится почти 1500 сортов пива которое также используется для приготовления пищи, например, сыра.

Хлеб

Немецкий хлеб – настолько неотъемлемая часть жизни в Германии, что ЮНЕСКО сделала немецкую хлебную культуру нематериальным культурным наследием. Вы можете найти более 300 различных видов хлеба по всей стране. Помимо Германии отмечена Мальта с Иль-Фтира — плоский хлеб на закваске. Он отличается от других лепешек, тем, что больше похож на батон с толстой корочкой и легкой воздушной мякотью. Этот хлеб делается вручную, и процесс невозможно воспроизвести автоматически. Наконец, вслед за ними устремилась Франция, выдвинув в 2022 году французский багет, который является основным продуктом питания во Франции не менее двух столетий. Каждый день во Франции съедается более 30 миллионов багетов.

Кофе

Арабский кофе зарегистрирован по представлению Катара, Саудовской Аравии и ОАЭ, а культура его подачи – Турцией. Подача арабского кофе является важным аспектом гостеприимства в арабских обществах и считается церемониальным актом щедрости. Традиционно кофе готовят на глазах у гостей и начинают с отбора зерен, которые слегка обжаривают в неглубокой сковороде на огне, затем помещают в медную ступку и растирают медным пестиком. Кофейную гущу помещают в большой медный кофейник; добавляется вода и ставится на огонь. После заваривания его переливают в кофейник меньшего размера, из которого разливают по маленьким чашкам. Самый важный или самый старый гость обслуживается первым, наполняя четверть чашки, которую затем можно снова наполнить. Обычная практика – выпивать не менее одной чашки, но не более трех.

Если вы еще не попробовали все вкусности из этого списка, не расстраивайтесь. В списке культурного наследия ЮНЕСКО найдутся и более привычные нам продукты, которые многим наверняка хорошо знакомы:

  • Плов, Таджикистан и Узбекистан
  • Айраг, Монголия
  • Долма, Азербайджан
  • Вино из Квеври, Грузия
  • Лаваш, Катырма, Юпка и Юфка из Ирана, Азербайджана, Казахстана, Кыргызстана и Турции
Комментарии 0
Ко Панган
Уже 6 лет как живу на лучшем острове в Тайланде - Ко Пангане.


    Привет! Я из Питера и
    расскажу тебе о городе

    Знаю много мест в Риме —
    заходи ко мне в профиль
    оставайтесь
    с нами
    и узнавайте новое
    Но сплочённость команды профессионалов
    говорит о возможностях направлений.
    Нажимая кнопку “Подписаться”, я соглашаюсь с условиями
    политики конфиденциальности