Актуальность

Стоит учитывать, что данная статья актуальна для v=5.92. За последующие изменения работы VK API автор ответственности не несет.

В процессе изучения возможностей VK API столкнулся с, казалось бы, нелогичной вещью: обыкновенный пользователь имеет возможность добавить репост в отложенные записи:

При это в документации API про это ни слова:

Обращение в службу поддержки ВКонтакте

По секрету скажу, что поддержка ВКонтакте также утверждает об отсутствии такой возможности с помощью использования методов API.

... или прикидываются?

Тогда было принято решение посмотреть, что из себя представляет запрос при отправке репоста в отложенные записи:

И что же вы видим? Некий параметр postpone с параметром удивительно похожим на Unix Timestamp.

Проверяем... и правда, дата та, которую мы указывали во времени публикации:

НО не все так просто, потому что при следующем коде:

delay_repost = vk_api.wall.repost(object=f'wall{-7486164_1052}', postpone=1735637040)

получает следующий ответ:

VkAPIError: 100. One of the parameters specified was missing or invalid.

Тут на помощь пришла смекалка. Ведь в методе wall.post был требуемый параметр, но назывался он иначе:

Меняем название параметра на publish_date:

delay_repost = vk_api.wall.repost(object=f'wall{-7486164_1052}', publish_date=1735637040)

Запись добавлена в отложенные и будет опубликована в указанные дату и время.

Комментарии (10)


  1. fire64
    14.01.2024 15:42

    Это здорово, у ВК много подобных скрытых "фич".

    Только мне кажется, что это больше подходит под категорию пост, чем под статью на Хабре.


    1. MountainGoat
      14.01.2024 15:42

      Пост очень неудачно ограничен по длине. Всегда чуть-чуть не хватает, чтобы нормально объяснить мысль.


      1. sys_adm1n Автор
        14.01.2024 15:42

        Что конкретно Вы имеете ввиду? Старался кратко, но доступно объяснить весь процесс.
        Готов доработать "нормальное объяснение мысли", если это действительно нужно.


        1. MountainGoat
          14.01.2024 15:42
          +1

          Я не про ваш текст, а про "пост" в терминологии Хабра, который слишком ограничен, и не получается им воспользоваться.


  1. akakoychenko
    14.01.2024 15:42
    +1

    В процессе изучения возможностей VK API столкнулся с, казалось бы, нелогичной вещью: обыкновенный пользователь имеет возможность добавить репост в отложенные записи:

    А лично мне кажется эта вещь сверхлогичной.

    Для живого человека функциональность нужна и полезна. Для кремниевой машины вообще бессмысленна. Робот может сам на своей стороне дождаться нужного времени и сделать вызов. Раз параметр не добавляет ценности, то и логично не фиксировать его в публичном контракте (ибо любая фиксация чего-либо в публичном контракте не даётся бесплатно - это всегда обязательство поддерживать его в будущем, как минимум)


    1. 9982th
      14.01.2024 15:42
      +1

      Эта функциональность радикально снижает требования к надежности софта и инфраструктуры, осуществляющих критичный ко времени постинг. Чтобы отправить API-запрос хоть когда лишь бы до следующего понедельника достаточно запускающегося по расписанию скрипта на домашнем компьютере, сутки без интернета или электричества ничего принципиально не изменят. Чтобы отправить запрос ровно в заданный момент, нужно, чтобы кремниевая машина в этот момент работала, была на связи и софт мог обработать всякие неожиданности оперативно и корректно, потому что дожидаться вмешательства человека времени уже нет.


    1. sys_adm1n Автор
      14.01.2024 15:42

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


      1. Vest
        14.01.2024 15:42
        -1

        А вы доверяете API VK тому, что он действительно опубликует ваше сообщение в нужное вам время? Я так понимаю, что если ваш скрипт не работает всё время, то вы не можете знать, было ли ваше сообщение выложено.


        1. sys_adm1n Автор
          14.01.2024 15:42

          Суть как раз в том и состоит, что скрипт добавляет записи в отложенные посты на стене пользователя, от которого он выполняется и дальнейшая их публикация уже никак не зависит от работы скрипта.
          Если вопрос недоверия, то это всегда можно перепроверить: после корректного выполнения кода, все записи будут отображаться во вкладке "Отложенные" на странице "Моя страница" пользователя с указанием конкретных даты и времени, что и показано на крайнем скриншоте статьи:

          Запись добавлена в отложенные и будет опубликована в указанные дату и время.


        1. 9982th
          14.01.2024 15:42
          +1

          А вы доверяете обещанию API опубликовать сообщение прямо сейчас, если вы его об этом попросите? Будете проверять, что пост действительно появился, а не просто статус ответа?

          Если наш гипотетический наколенный скрипт в планировщике дорос до таких требований к надежности, то он вполне может переехать на VPS, обзавестись проверками что новый пост появился в отложенных, а отложенный опубликовался когда надо, мониторингом с алертами и прочими атрибутами серьезного софта, но возможность отложенного постинга все равно будет позволять успешно отработать в ситуациях, с которыми имея только мгновенный постинг справиться не выйдет или выйдет сильно дороже.