Задать вопрос

Как вывести api яндекс метрики через php?

Хочу вывести в админке данные о посещаемости и тп из яндекс метрики, админка написана с помощью php-view-class со smarty. Я не могу вывести даже вне админки на чистую директорию, пожалуйста подскажите пример?

Зарегистрировала токен, по прямому, если вставить в браузер например:https://api-metrika.yandex.ru/stat/traffic/summary... выдает данные, если ввожу
https://api-metrika.yandex.ru/stat/traffic/summary...
пусто.

яндекс разработчик Не помог, и множество примеров перепробывал.

Очень нужен класс и php пример, желательно работающий;) , если пример сразу на smarty будет вообще супер.)
  • Вопрос задан
  • 7835 просмотров
Подписаться 6 Оценить 3 комментария
Решения вопроса 1
@GEOgraf
недавно тоже нужна была статистика, вот написал класс.
может поможет...
class yandex{

	const CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
	const CLIENT_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
	const COUNTER_ID = '00000000';

	public static function getStat(){
		$token = self::auth();

		if($token){
			return self::getData(
				'https://api-metrika.yandex.ru/stat/traffic/summary.json?id='.self::COUNTER_ID,
				['Authorization: OAuth '.$token]
			);
		}
	}

	public static function auth(){
		if (!isset($_GET["code"])) {

			//здесь проверим токен в базе, иначе будем отсылать на получение кода

			Header("Location: https://oauth.yandex.ru/authorize?response_type=code&client_id=".self::CLIENT_ID);
			die();
		}

		//делаем запрос для получения токена
		$result = self::postKeys("https://oauth.yandex.ru/token",
			[
				'grant_type'=> 'authorization_code',
				'code'=> $_GET["code"],
				'client_id'=>self::CLIENT_ID,
				'client_secret'=>self::CLIENT_SECRET
			],
			['Content-type: application/x-www-form-urlencoded']
		);
		
		if ($result["code"]==200){
			$result["response"]=json_decode($result["response"],true);
			if(isset($result["response"]["access_token"]))
				return $result["response"]["access_token"];
			else
				return false;
		}else{
			return false;
		}

	}

	public static function postKeys($url,$peremen,$headers) {
		$post_arr=array();
		foreach ($peremen as $key=>$value) {
			$post_arr[]=$key."=".$value;
		}
		$data=implode('&',$post_arr);

		$handle=curl_init();
		curl_setopt($handle, CURLOPT_URL, $url);
		curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($handle, CURLOPT_POST, true);
		curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
		$response=curl_exec($handle);
		$code=curl_getinfo($handle, CURLINFO_HTTP_CODE);
		return ["code"=>$code,"response"=>$response];
	}

	public static function getData($url,$headers) {
		$handle=curl_init();
		curl_setopt($handle, CURLOPT_URL, $url);
		curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
		$response=curl_exec($handle);
		$code=curl_getinfo($handle, CURLINFO_HTTP_CODE);
		return json_decode($response,true);
	}
}
$stat = yandex::getStat();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
swipeshot
@swipeshot
Учусь на ошибках.
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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