Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как правильно кешировать данные с геокодера яндекса?

Как правильно кешировать данные с геокодера яндекса?


     09.12.2020    яндекс    Все вопросы » Общие вопросы    998

вопрос
Столкнулся с проблемой большой загрузки страницы при работе с api яндекс карт. С каждым посещением страницы идет большое количество запросов адресов к геокодеру. Яндекс не запрещает кешировать данные на 30 дней. Кто сталкивался как правильно это реализовать? Пример моего кода с api карт:

function main() {
global $db, $tpl, $metatags, $config, $lang, $is_logged, $member_id, $user_group;
$sql_result = $db->query("SELECT * FROM ".PREFIX."_category WHERE ca_adress != '' ORDER BY id ASC");
$i=0;
while ($row = $db->get_row($tb))
	{
		$List[] = $row;
	}	
foreach($List as $row){
//запросы адресов
		$get_coor = $homepage = file_get_contents('https://geocode-maps.yandex.ru/1.x/?apikey="мой ключ"&format=json&geocode=' . urlencode( $row['ca_adress'] ) . '&results=1');
		$decode_coor = json_decode( $get_coor, true );
		$coord = $decode_coor['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos'];
		$coord_de = explode(' ', $coord);
		$coord = "{$coord_de[1]}, {$coord_de[0]}";
		if( ! $first_point ) $first_point = $coord;
		/*подгружаем фотографии категории*/
		$cdir = scandir(ROOT_DIR . "/uploads/category/".$row['alt_name']); 
	   	foreach ($cdir as $key => $value) 
		{ 
		  if (!in_array($value,array(".","..","Thumbs.db"))) 
		  { 
			 if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) 
			 { 
				$result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value); 
			 } 
			 else 
			 { 
				$result[] = $value; 
			 } 
		  } 
		} 
		$kid = 1;
		$previmg = '';
		
		foreach( $result as $img )
		{
			$exname = explode('.', $img);
			
			if( $exname[0] == 'main' )
			{
				//$tpl = str_replace('{image-1}', '/uploads/category/' . $row['alt_name'] . '/' . $img );
			}
			$kid += 1;
			
			
			if( $kid >= 1 )
			{
				$previmg .= '<img src="/uploads/category/' . $row['alt_name'] . '/' . $img . '" alt="">';
			}
		}
		
		# Рейтинг категории
		#
		$ResultSum = $db->super_query( "SELECT sum(rating) as `sum` FROM " . USERPREFIX . "_post
							LEFT JOIN " . USERPREFIX . "_post_extras ON " . USERPREFIX . "_post.id=" . USERPREFIX . "_post_extras.news_id
							WHERE " . USERPREFIX . "_post.category = '" . $row['id'] . "'" );	
		
		$rating = intval($ResultSum['sum']);
		$maps .= "
		var myPlacemark = new ymaps.Placemark([{$coord}], 
{
balloonContentHeader: \"<div class='maps-balloon'><table><tbody><tr><td class='details'><img src='/uploads/category/" . $row['alt_name'] . "/". $img. "'><div class='titles'><a href='{$row['alt_name']}' target='_top'>{$row['name']}</a></div><div class='address'>{$rating}</div>\" ,
					balloonContentBody: \"<div class='contacts'><li style='list-style: none;' class='phone'></li></ul></div></div></td></tr></tbody></table></div>\",
								},

{
					draggable: false,
					iconLayout: 'default#image',
					iconImageHref: '{THEME}/images/map.png',
					iconImageSize: [32, 37],
					iconImageOffset: [-3, -42]
				});

myGeoObjects.push(myPlacemark);
		";
		$i++;	
		}
	
$title = "Интерактивная карта";
$metatags['title'] = $title;

$tpl->load_template('maps.tpl');
$db->free();
$tpl->set('{maps}',$maps);
$tpl->set('{first_point}',$first_point);
$tpl->compile('content');
$tpl->clear();
}

Ответа пока нет


Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 06.03.2014 vip.boss  Общие вопросы
наверх