@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 запросов на каждый день.
АПИ по идее должно содержать такую возможность запроса сразу период дат
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект
25 апр. 2024, в 10:25
2000 руб./за проект