Для некоторых из вас API Яндекс Метрики покажется чем-то ужасным и непддающимся. На самом деле если использовать некий костыль, то Все будет намного чудесней и проще.
Меня всегда гнобила мысль о том что надо аудентифицироваться, а это честно говоря первый шаг который сносил мне голову. То ли дело АПИ Betamax, где в каждом запросе передются логин и пароль. У Яндекса нужно передавать некий Токен (впрочем это классика).
Чтобы получить Токен надо аудентифицироваться.
И тут вся эта схема становится похожа на большую неповоротливую поросюшку.
Нужно:
А перед этим нужно получить id и пароль приложения в Админке Яндекса (единоразово)
но хватит вас кошмарить.
Я писал свое первое приложение для работы с АПИ Метрики на DevelStudio [ http://develstudio.ru/ ] (т.е. на PHP GUI). Я вообще обожаю этот проект и все свои наработки я делаю именно в нем, потому что это обалденный инструмент для прототипов (простых приложений).
Итак хватит грустить и поедем к АПИ Метрики.
У нас должно быть:
Теперь о костыле который поможет вам без тошноты провести все проклятые аудентификации. Это просто PHP класс, который написал неизвестно кто и положил в паблик тут [ http://flash-world.ru/raznoe/php/177-php-klass-dlya-raboty-s-api-yandeks-metrika.html ]
Спасибо ему. И хотя костыль небольшой, но все же обертку которую он сделал крайне приятна. Возможно без него все будет немного больше похоже на портянку, но я крайне люблю короткий код и даже смирился с объектной моделью этого костыля. =)
// беру из формы
$app_id = c("id")->text ;
// беру из формы
$app_pass = c("password")->text;
// создаем новый объект для работы с АПИ Яндекса (помните костыль ?)
$api = new YandexAPI($app_id, $app_pass);
$d1 = date('Ymd', time() - 86400); // вчера
$d2 = date('Ymd', time() - 2*86400); // позавчера
$r=$api->LogIn('логин', 'пароле'); // дебилизм
if ($r==false){
// просто покажем в MEMO на форме все что пришло
c("log")->text.="Аудентификация не прошла !!!\n";
c("log")->text.=print_r($api->error,true);
}
else{
c("log")->text.="Аудентифицировались\n";
$r=$api->MakeQuery('/stat/content/popular', array(
'id' => c("siteId")->text,
'date1' => $d1,
'date2' => $d1
) );
if ($r==false){
c("log")->text.="Запрос не прошел !!!\n";
c("log")->text.=print_r($api->error,true);
}else{
// тут успешный финал, мы получили то что хотели и выбросили в тот же лог все что пришло, дальше делаем с ним что хотим, структуру видно в логе.
c("log")->text.="Запрос успешен\n";
c("log")->text.=print_r($api->result,true);
}
}
Код легко переработать для консоли или для сайта.
Все кто хотел но боялся начать, пришло время. Пробуйте свои силы, пишите комменты.
