@NeroKore
Начинающий

Как сделать проверку на пустой массив в VK API?

Доброго времени суток. Получаю статистику для группы вконтакте, сбор статистики осуществляю через метод stats.get , все отлично получается, все работает. НО, есть одна проблема. Есть группы, в которых нет статистики, т.е там нету просмотров и не от куда брать числа (выдаёт {"response":[]} ). И получается так, что он берет статистику с прошлой группы. Например: Идут группы по порядку.
Группа 1 - Просмотров : 42 ,
Группа 2 - Просмотров : 42 ,
но в Группе 2 нет просмотров , неоткуда брать значения {"response":[]} выдает, но при этом он берет просмотры с прошлой группы. Как сделать проверку или как можно решить проблему?
$url_for_stats = "https://api.vk.com/method/stats.get?" . http_build_query($request_params_for_stats);	
$result_stats = file_get_contents($url_for_stats);
$decode_stats = json_decode($result_stats);
foreach ($decode_stats->response as $stats_result) 
$views = $stats_result->views;
  • Вопрос задан
  • 431 просмотр
Решения вопроса 1
Ahen
@Ahen
Универсальный дилетант
Но метод get.stats позволяет получить данные исключительно по 1 id группы. Откуда там форич взялся, лол?
Вот для понимания накатал небольшой скрипт, без проверок на ошибки от вк(!):

<?php
/**
 * Created by PhpStorm.
 * User: Ahen
 * Date: 22.08.2017
 * Time: 7:10
 */

// Токен пользователя с разрешением stats
$access_token = '';

// Массив с id групп
$groups = [1, 2, 3];


/**
 * @param $params array - Массив параметров запроса, содержит group_id, date_from, date_to.
 * @param $access_token - Строка, содержащая токен пользователя.
 * @return array - Массив, содержащий group_id и views
 */
function statsGet($params, $access_token)
{
    //Запрос, обернутый в json_decode
    $request = json_decode(file_get_contents("https://api.vk.com/method/stats.get" .
        "?group_id=" . $params["group_id"] .
        "&date_from=" . $params["date_from"] .
        "&date_to=" . $params["date_to"] .
        "&access_token=" . $access_token .
        "&v=5.68"));

    // Если $request->response[0]->views существует, то присваиваем его значение к $views.
    // Иначе присваиваем $views значение 0.
    if ($request->response[0]->views) {
        $views = $request->response[0]->views;
    } else {
        $views = 0;
    }

    // Возвращаем массив
    return ["group_id" => $params["group_id"], "views" => $views];
}

// Объявляем $result как массив
$result = array();

// Обходим форичем массив id групп
foreach ($groups as $group) {
    // Пушим результат из функции в массив
    $result[] = statsGet(
        ["group_id" => $group,
        "date_from" => "2013-08-08",
        "date_to" => "2013-09-08"], 
        $access_token);
    // Слип на 1/3 секунды, чтобы не ловить ошибок вк
    usleep(334000);
}

// Простой вывод для теста
foreach ($result as $item) {
    echo "В группе с id: {$item['group_id']} просмотров: {$item['views']} <br/>";
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Protos
@Protos
Спрашивай - отвечу
Эм не шарю в php, но перед тем как получать значение у меня есть простая функция поиска текста ошибок в полученной строке, перед тем как значению decode_stats[i] присваивать значение, т.е. Что-то типа проверки: if(... contains("{"response":[]}") ) {ошибка}
If ... contains("error") {ошибка}
Ответ написан
Ваш ответ на вопрос

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

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