/*
$capabilities = array(
'edit_trips',
'edit_others_trips',
'delete_trips',
'publish_trips',
'read_private_trips',
'delete_private_trips',
'delete_published_trips',
'delete_others_trips',
'edit_private_trips',
'edit_published_trips',
'edit_trip',
'edit_others_trip',
'delete_trip',
'publish_trip',
'read_private_trip',
'delete_private_trip',
'delete_published_trip',
'delete_others_trip',
'edit_private_trip',
'edit_published_trip',
);
$role = get_role( 'contributor' );
foreach ( $capabilities as $cap ) {
$role->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')) {
?>
}
}
add_action( 'wp_head', 'reactpress_head', 9999 );
//===================================================================================
//=== weather and post meta ===
add_action( 'rest_api_init', 'create_api_posts_meta_field' );
function create_api_posts_meta_field() {
// register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
register_rest_field( 'cities', 'postmeta', array(
'get_callback' => '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');
}
}
Фестивали Азии 2023: Индия, Малайзия, Таиланд, Филиппины, Тайвань | TraveCave
ТрэвКейв
Первый в Рунете портал, объединяющий номадов по всему миру 🌎
Мы о путешествиях, о городах, о работе на удаленке. TravCave - это место, где каждый сможет стать блогером и рассказать свою историю.
Главная — Статьи — Потрясающие азиатские фестивали Потрясающие азиатские фестивали
1526
0
Азия — красочный континент, полный захватывающих религиозных и культурных фестивалей, проводимых в любое время года. Хотите последовать за фаллической процессией, понаблюдать за борьбой в грязи или испытать себя в битве краской? Надеемся, наш список уникальных азиатских фестивалей вдохновит вас на новое запоминающееся путешествие или даже участие в одном из этих невероятных праздников жизни.
Тайпусам, Малайзия, февраль
Празднование индуистского фестиваля Тайпусам в Малайзии представляет собой восьмичасовое шествие, которое начинается у храма Шри Махамариамман в Куала-Лумпуре и заканчивается, преодолев 272 ступени к потрясающему храму в пещерах Бату. Этот фестиваль уникален тем, что люди из разных этнических групп и вероисповеданий несут «кавади» — физическое бремя, через которое они просят помощи у бога Муругана. Некоторые идут с горшком с молоком на голове или полукруглым украшенным балдахином, а другие же занимаются умерщвлением плоти, прокалывая на ходу кожу, язык или щеки.
Состязания кочевников Надом, Монголия, июль
Узнайте о многовековых боевых искусствах Монголии, таких как борьба, стрельба из лука, скачки и метание копья на этих Олимпийских играх кочевников, которые проводятся в разгар лета с помпой, костюмированными парадами и захватывающим дух мастерством. Праздничные мероприятия, разворачивающиеся на стадионе Улан-Батора, неразрывно связаны с кочевой цивилизацией монголов, издавна практиковавших скотоводство в бескрайних степях Средней Азии. Устное творчество, исполнительское искусство, национальная кухня, боевое мастерство и культурные формы, такие как длинная песня, обертонное пение Khöömei, танец Bie bielgee и скрипка Morin khuur, – вот лишь некоторые национальные традиции, демонстрируемые в этом ярком празднике.
Фестиваль красок Холи, Индия, март
Хотите встретить весну радужной битвой? Фестиваль красок Холи (также называемый Фестивалем любви) — древний индуистский религиозный праздник, обычно проводимый в марте. Отмечаемый всеми индусами, особенно в Индии, Непале и Пакистане, Холи стал популярным среди неиндуистов в Южной Азии и во всем мире, где есть большая индуистская община. Празднование начинается с зажжения костров в ночь перед Холи на церемонии, известной как сожжение Холи, которая сопровождается пением, танцами и всеобщим весельем под звуки барабанов дхолака. На следующий день Холи приносит смеющиеся и танцующие толпы, бросающие цветной порошок (абирор гулал) в незнакомцев, друзей и врагов в знак склонности Кришны к розыгрышам и в честь победы добра над злом.
Праздник танца Синулог, Филиппины, январь
Великолепие фестиваля Синулог подарило ему прозвище «Матери всех фестивалей». Он представляет собой танцевальное ритуальное шествие под гипнотический бой барабанов, в котором рассказывается история языческого прошлого филиппинцев и их принятия христианства. Слово «синулог» означает «грациозный танец». Парад начинается в третье воскресенье января в центре города Себу.
Новый год Сонгкран, Таиланд, 13-15 апреля
Сонгкран — тайский новогодний водный фестиваль, который проходит с 13 по 15 апреля каждого года. Он символизирует доброту, любовь, сочувствие и благодарность. В честь этого люди выходят на улицы и обливают друг друга ведрами с водой, что символизирует очищение от старого и обновление к Новому году. В эти дни улицы всего Таиланда превращаются в огромное водное поле битвы и веселую уличную вечеринку.
Фестиваль фонарей, Тайвань, февраль
В Азии проводится множество различных фестивалей фонарей, но самым известным считается Тайваньский фестиваль фонарей, который проходит в Пинси. Это событие отмечается изготовлением фонарей, играми с фонариками и демонстрацией сверкающих декоративных фонариков. Но самый волшебный, романтический и яркий момент праздника – когда фонари украшаются желаниями и мечтами каждого владельца, а затем одновременно выпускаются в небо вместе с тысячами других.
Музыкальный фестиваль Rainforest, Малайзия, июнь
Этот уникальный фестиваль на острове Борнео посвящен музыке, природе и культуре. Помимо выступлений известных мировых музыкантов и местных традиционных исполнителей, трехдневный фестиваль также включает в себя насыщенный график познавательных семинаров и этно-музыкальных лекций. Rainforest World Music Festival проходит в культурной деревне Саравак в Кучинге и является одним из крупнейших музыкальных событий в Малайзии.
Праздник собак Тихар, Непал 24-28 октября
Тихар – второй по значимости праздник Непала . Каждый из пяти дней празднования посвящен определенному животному: воронам, коровам, змеям. Особенно в это время повезло собакам. На второй день фестиваля индуисты собираются по всему Непалу, чтобы поклониться своим четвероногим друзьям. Всех собак, включая бездомных, украшают яркими гирляндами, бережно купают, подают им молоко, мясо и другие лакомства.
Фестиваль грязи в Порёне, Южная Корея, июль
Фестиваль грязи проводится с 1998 года ежегодно в летние месяцы в районе пляжа Тэчхон на западе Южной Кореи. Он включает такие мероприятия, как: борьбу в грязи, конкурс грязевых королей, грязевой массаж, катание на грязевых лыжах, купание в грязевом бассейне и многое другое. Все это завершается захватывающим грязевым фейерверком и вечеринкой.
Фестиваль голых мужчин Хадака Мацури, Япония, февраль
Японский город Окаяма – место проведения очень странного события, на котором бурлящая масса из 10000 обнаженных мужчин в одних набедренных повязках сражается друг с другом, чтобы схватить священные палочки шинги, которые приносят удачу.
Фестиваль пенисов Канамара Мацури, Япония, конец апреля
Канамара Мацури, проходящий в Кавасаки, представляет собой японский весенний фестиваль, проводимый как молитва о плодородии, любви и процветании бизнеса. На фестивале представлены три фаллических переносных святилища, которые весело несут толпы местных жителей, а также разнообразные продукты и товары, соответствующие празднику.
https://travcave.ru/articles/epicheskie-festivali-2022/
Уже 6 лет как живу на лучшем острове в Тайланде - Ко Пангане.