@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 постов и необъятное число комментариев к ним. Есть варианты оптимизировать быстродействие?
  • Вопрос задан
  • 1895 просмотров
Решения вопроса 1
@Gromadchuk
Некорректно использовать php для такой цели. Еще можно фильтрировать получаемые используя символ @, о котором можно прочитать в документации. Это значительно уменьшит объем данных, что ускорит их загрузку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект