vk execute wall get comments automation

Как использовать vk execute для получения всех комментариев со всех постов?

py_vk

Как и обещал, пришло время выложить исходники (исподники) скриптов, которые я использую для собирания комментов с постов в группе.

Почему «исподники»? Потому что этот самый код на самом деле такая глючная тварь и такой «грязный» что его стыдно показывать на людях!
Эту конструкцию я использую в двух модулях, один собирает статистику, другой удаляет комментарии, если они оставлены не участником группы\сообщества. Обновляться и рассматриваться эта конструкция будет в ключе использования её именно как парсилки комментариев, для последующего удаления оных. Главная проблема заключалась в том, что возвращался крайне запутанный список, в котором могли возникать пробелы, из-за которых удалялись не те комментарии, которые следовало бы удалять.

Суть в следующем, у вас есть группа, в которой есть посты, в которых есть комментарии. Вначале вы отбираете ТОЛЬКО те посты, в которых комментов больше нуля и формируете их них список, разделенный запятыми, это важно, так как метод вк не позволяет отправлять сразу список, поэтому мы его «обманем».

Порядок действий такой:

  • получить все посты (wall.get) -> python
    • отобрать посты, где комментарии > 0; -> python
    • соорудить array из id постов, перевести его в строку: ‘11111,2222,3333,4444‘; -> python
  • передать строку в execute-> python
    • собрать с каждого поста комментарии; -> vk execute
    • собрать из комментариев результирующий список (id комментария, id юзера, время, лайки) -> vk execute
      • если комментариев больше 100 —
        обновить переменную offset и запустить цикл до тех пор,
        пока переменная не сравняется с кол-вом комментариев -> vk execute

        • получить оставшиеся комментарии в этом цикле, выйти из него -> vk execute
        • добавить в список указанный ранее, выше в коде -> vk execute
    • получить список комментариев -> python

Как это выглядело со старым кодом:

Вот это все список списков со списками элементов всех комментов, то есть первый список в списке — id комментариев и далее по схеме. Все это крайне неудобная, монструозная, ужасная конструкция, которую приходится еще потом дополнительно разгребать.

То есть вот эти все списки приходится «пересписчивать» в один тупль (честно, я вообще не отстреливаю вот эти вот русскоязычные аналоги типов: словарь, список, кортеж бррр) и конечно же, спешу вас удивить — часто-не-часто, но возникают всякие проблемы, когда удаляются комментарии именно участника группы, хотя логика скрипта НЕ предполагает попадания id участника в список «на удаление» — чисто логически, вернется просто Null, но никак не id.

Как это выглядит сейчас:

Сейчас старый код будет использоваться чисто в образовательных целях, потому как у меня наконец появилось время его переделать в новый, чистый! Теперь новая версия возвращает список элементов со свойствами каждого комментария в элементе, что позволит избежать ситуаций, когда id комментариев и пользователей путаются и удаляются не те комментарии, сейчас, если что-то пойдет не так, один элемент просто выпадет из списка, а не будет сдвигаться и заменять другие.

Кроме того, новый подход позволит избавиться от дополнительной секции кода в Python, где ранее приходилось склеивать списки в одно целое. Еще не знаю, конечно, как поведет себя новая версия под нагрузкой, но надеюсь все будет ОК, и спустя какое-то время я выложу и его.

Все это было создано по опыту и подобию логики, некогда описанной здесь: vk execute VS python while

Код можно взять здесь:

Вкрапление кода, для обработки списка постов взято отсюда и немного изменено:

trianglesis

Об авторе trianglesis

Александр Брюндтзвельт - гений, филантроп, 100 гривен в кармане. Этот блог - "сток" моих мыслей и заметок. Достаточно одного взгляда на него, чтобы понять, что такой же бардак творится у меня в голове. Если вам этот бардак интересен - милости прошу.
Закладка Постоянная ссылка.
  • Denis Krylov

    Спасибо, очень здорово и полезно, единственный вопрос, как потом response с комментариями связать с самими постами, ведь в ответе не приходит post_id?

    • trianglesis

      А вы ведь когда собираете комменты — используете этот же пост айди.
      Каждая итерация по сбору комментов это один пост айди отправленный в теле запроса на ВК, так что он у вас уже есть изначально.

      • Denis Krylov

        Да, уже слегка изменил код. Все ровно работает, но на постах с большим количеством комментариев часто вылетает error:Too many API calls… Пока не решил как поправить.