@deepprod

Причины медленной работы api яндекс метрики на php?

Здравствуйте, почему данный код очень медленно работает?

class APImetrika{

	private $token 	    = YA_TOKEN;
	private $url_api    = "https://api-metrika.yandex.ru/";
	private $counter_id = YA_ID;

	public function get_traffic($date1, $date2){

		return $this->get_data(
			$this->url_api.
			"stat/v1/data?id=".
			$this->counter_id.
			"&metrics=ym:s:users,ym:s:visits,ym:s:pageviews".
			"&pretty=1".
			"&date1=".$date1.
			"&date2=".$date2.
			"&oauth_token=".
			$this->token
		);
	}

	private function get_data($url){

		if($url){

			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_HEADER, 0);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
			curl_setopt($ch, CURLOPT_TIMEOUT, 30);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

			$data = json_decode(
				curl_exec($ch), true
			);

			curl_close($ch);

			if(is_array($data)){

				return $data;
			}
		}

		return false;
	}
}

$obj = new APImetrika();

$today = $obj->get_traffic(
	date("Ymd"),
	date("Ymd")
);
$last  = $obj->get_traffic(
	date("Ymd", strtotime("-1 days")),
	date("Ymd", strtotime("-1 days"))
);

$last2  = $obj->get_traffic(
	date("Ymd", strtotime("-2 days")),
	date("Ymd", strtotime("-2 days"))
);

$last3  = $obj->get_traffic(
	date("Ymd", strtotime("-3 days")),
	date("Ymd", strtotime("-3 days"))
);

$last4  = $obj->get_traffic(
	date("Ymd", strtotime("-4 days")),
	date("Ymd", strtotime("-4 days"))
);

$last5  = $obj->get_traffic(
	date("Ymd", strtotime("-5 days")),
	date("Ymd", strtotime("-5 days"))
);

$last6  = $obj->get_traffic(
	date("Ymd", strtotime("-6 days")),
	date("Ymd", strtotime("-6 days"))
);


Вот код графика:

if ($('#traffic-chart').length) {
        var chart = new Chartist.Line('#traffic-chart', {
            labels: ['<?=date("d.m.y", strtotime("-6 days"));?>',
			'<?=date("d.m.y", strtotime("-5 days"));?>', 
			'<?=date("d.m.y", strtotime("-4 days"));?>', 
			'<?=date("d.m.y", strtotime("-3 days"));?>', 
			'<?=date("d.m.y", strtotime("-2 days"));?>', 
			'<?=date("d.m.y", strtotime("-1 days"));?>', 
			''],
            series: [
            [<?php echo($last6["totals"][0]);?>, <?php echo($last5["totals"][0]);?>, <?php echo($last4["totals"][0]);?>, <?php echo($last3["totals"][0]);?>, <?php echo($last2["totals"][0]);?>, <?php echo($last["totals"][0]);?>, <?php echo($today["totals"][0]);?>],
            [<?php echo($last6["totals"][1]);?>, <?php echo($last5["totals"][1]);?>, <?php echo($last4["totals"][1]);?>, <?php echo($last3["totals"][1]);?>, <?php echo($last2["totals"][1]);?>, <?php echo($last["totals"][1]);?>, <?php echo($today["totals"][1]);?>],
            [<?php echo($last6["totals"][2]);?>, <?php echo($last5["totals"][2]);?>, <?php echo($last4["totals"][2]);?>, <?php echo($last3["totals"][2]);?>, <?php echo($last2["totals"][2]);?>, <?php echo($last["totals"][2]);?>, <?php echo($today["totals"][2]);?>]
            ]
        }, {
            low: 0,
            showArea: true,
            showLine: false,
            showPoint: false,
            fullWidth: true,
            axisX: {
                showGrid: false
            }
        });

        chart.on('draw', function(data) {
            if(data.type === 'line' || data.type === 'area') {
                data.element.animate({
                    d: {
                        begin: 2000 * data.index,
                        dur: 2000,
                        from: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(),
                        to: data.path.clone().stringify(),
                        easing: Chartist.Svg.Easing.easeOutQuint
                    }
                });
            }
        });
    }
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
@prostoprofan
Скорее всего надо делать 1 запрос и разбивать информацию по датам, а не делать 5 запросов на каждый день.
АПИ по идее должно содержать такую возможность запроса сразу период дат
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы