@Ofigenen

Вконтакте api: как правильно работать с execute?

Всем привет.
Есть задача получить все посты со стен нескольких групп. Количество записей приличное: в самой меньшей - порядка 20 тысяч. Еще нужна информация обо всех комментариях к записям, пользователях, вложениях и даже лайках, так что объем данных выходит немалый. Backend - php 5.6, Yii2. Естественно, сразу обратился к execute c таким запросом:
$count      = $this->countPosts();
$iterations = ceil($count / 100 / 25);
for ($i = 0; $i < $iterations; $i++) {
            $code = '
                    var result = [];
                    var j = 0;
                    var offset = ' . $i * 2500 . ';
                    while (j < 25) {
                        var posts = API.wall.get({"domain": "доменГруппы", "offset": offset, "count": 100});
                        result.push(posts);
                        offset = offset + 100;
                        j = j + 1;
                    }
                    return result;
                ';

            $parameters = ['code' => $code];
            $result[]   = $this->vk->api('execute', $parameters);
    }

22 000 постов из одной группы получаются за ~50 сек. Это на порядок быстрее, чем если бы без execute, и даже терпимо, если бы не необходимость получить суммарно 100 000 постов и необъятное число комментариев к ним. Есть варианты оптимизировать быстродействие?
  • Вопрос задан
  • 1893 просмотра
Решения вопроса 1
@Gromadchuk
Некорректно использовать php для такой цели. Еще можно фильтрировать получаемые используя символ @, о котором можно прочитать в документации. Это значительно уменьшит объем данных, что ускорит их загрузку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект