• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • Отправка голосовых сообщений ВКонтакте с помощью VK API

Отправка голосовых сообщений ВКонтакте с помощью VK API +18

24.04.2017 15:57
PeterSamokhin 6 5700 Источник
Вконтакте API*, Java*
Всем, кто работал с VK API, давно известно, что доступ к любой работе с аудиозаписями ВКонтакте был закрыт 16 декабря 2016 года, а информация о голосовых сообщениях вообще отсутствует в документации.

imageНа примере моего пустого сообщества-песочницы

Так как же это делается?

Используем скрытые параметры для загрузки документа


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

Как и для обычного документа, получаем адрес сервера для загрузки:

https://api.vk.com/method/docs.getUploadServer?access_token=ACCESS_TOKEN&type=audio_message&v=5.63

Основной момент здесь: параметр type=audio_message.

В ответ мы должны получить следующий JSON:

{
  "response":
             {
               "upload_url":"https://..."
             }
}

Как правильно загрузить файл на сервер ВКонтакте


Если отправлять файл не в формате multipart/form-data, ничего не выйдет.
В формате mp3 загрузить аудио тоже не получится, лучше всего использовать ogg, хотя можно и поэкспериментировать.

Можно использовать код отсюда, чтобы загрузить файл в нужном формате (пример указан на Java, аналоги для себя, я думаю, можно найти в интернете):

Используем экземпляр класса MultipartUtility, в нём ничего менять не нужно:

StringBuilder response_sb = new StringBuilder();
try {
    MultipartUtility multipart = new MultipartUtility("адрес_сервера_для_загрузки", "UTF-8");

    multipart.addFilePart("путь_до_файла_с_голосовым_сообщением");

    List<String> response = multipart.finish();

    for (String line : response) {
       response_sb.append(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Всё, аудиосообщение загружено. Ответ от сервера в случае удачи будет похожим на это:

{
   "file":"62802565|0|0|805131|многосимволов|ogg|9943|file.ogg|многосимволов|многосимволов||||многосимволов="
}

Сохраняем документ на сервере


Здесь также важно подметить: если вы сохраните документ не у пользователя, то при отправке он будет выглядеть как документ, а не как голосовое сообщение. Либо же вы отправите просто пустое сообщение.

Делаем следующий запрос:

https://api.vk.com/method/docs.save?file=полученный_ранее_file&access_token=ACCESS_TOKEN&v=5.63

Это была последняя стадия. Получаем ответ:

{
    "response": [
                    {
                        "id": 000000000,
                        "owner_id": 000000000
                        ...  и ещё куча параметров, которые нам сейчас не нужны
                    }
                ]
}

Вот и всё. Можно отправлять сообщения обычным способом, в attachments указав ссылку doc(owner_id)_(id), используя owner_id и id, полученные выше.

P.S. Обычный пользователь не может отправить сообщение, содержащее что-то кроме записи голоса. А через API это делается очень легко. Раньше это работало и в комментариях/обсуждениях и так далее, но сейчас, видимо, лавочку прикрыли, как и загрузку (но не отправку!) голосовых сообщений сообществами.



Я не являюсь автором «расследования» по поиску способа отправки аудиосообщений через API, я лишь собрал всю информацию в кучу и постарался красиво оформить. Заметил на просторах интернета много вопросов по этому поводу.

Данная статья написана для тех, кто работал с ВКонтакте API, и описывать неинтересные вещи я не стал, стараясь писать лишь по делу. Если решусь, напишу еще пару статеек о том, как написать бота на Java с использованием LongPoll-сервера VK (для личных страниц) и с использованием Callback API и web-сервлетов (для сообществ).

За предоставленные материалы и помощь благодарность Станиславу Куделко.
Поделиться с друзьями
-->

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


  1. Ockonal
    25.04.2017 00:51
    #10189486

    Если решусь, напишу еще пару статеек о том, как написать бота на Java с использованием LongPoll-сервера VK (для личных страниц) и с использованием Callback API и web-сервлетов (для сообществ).

    Для каких целей это может быть полезно?


    1. PeterSamokhin
      25.04.2017 00:57
      #10189490
      +1

      Ockonal видел краткие и, возможно, не очень полезные для начинающих разработчиков статьи по этой теме, а также увидел, что людям это интересно. Здесь же недавно тоже была статья про ботов на python и я подумал, что, возможно, подобного рода статьи заинтересуют кого-то, и хотел подробно написать от А до Я, как это сделать, и прикрепить готовый вариант. И всё же: зачем? Думаю, с той же целью, зачем написал и эту статью: донести информацию, о которой в интернете встречал немало вопросов, возможно она кому-то покажется интересной.


      1. jasonOk
        25.04.2017 16:47
        #10190642

        Статься хорошая, но всё это (практически) уже было написано здесь

        Ещё и так же на Java.


        1. PeterSamokhin
          25.04.2017 16:47
          #10190646

          jasonOk это и писал Станислав Куделко, указанный в статье.


  1. XRain
    25.04.2017 11:22
    #10189918

    Это уже пофиксили, и теперь можно от имени сообщества грузить и отправлять аудиосообщение. Если слишком часто от имени пользователя загружать, то можно капчу словить. Да и mp3 наравне с ogg нормально грузится.


  1. sbnur
    25.04.2017 16:25
    #10190570
    -4

    Вот чего бы я никогда не рекомендовал, так это использовать VK API

МЕТКИ

  • Хабы
  • Теги

JAVA

Вконтакте API

java

вконтакте api

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • Создаём динамическую обложку ВКонтакте +39

    • 11.06.2017 15:33

    Отправка голосовых сообщений ВКонтакте с помощью VK API +18

    • 24.04.2017 15:57

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
08:00

Тестирование мобильных приложений: какие особенности важно учитывать +27

07:05

5 способов убить производительность в асинхронном Rust +16

07:38

Что нового в .NET 10? +15

08:48

Опросили 1000 пользователей о недочётах в интерфейсах, которые осложняют им процесс совершения покупок в интернете +11

06:05

«Коллегз, ду ю хир ми», или Как не надо созваниваться на английском +10

09:01

Из коробки Publish не имеет гарантий доставки в RabbitMQ +9

09:42

HR на вилы, или почему они уничтожают рынок труда? +8

09:01

Личный бренд разработчика: как вырвать очко у ИИ +8

08:40

Будущее центров мониторинга: как искусственный интеллект меняет ландшафт кибербезопасности +8

06:01

Как я пытался узнать, виноваты ли в сбое AWS ИИ и утечка мозгов +8

08:43

Локальный профиль на Windows 11 уходит в прошлое +7

07:00

Пытался устроиться электромонтером, а стал UI/UX-дизайнером в металлургической компании +7

08:45

k6: как мы тестируем сервисы под нагрузкой +6

08:12

Чёрная пятница: от мечты о скидках до кошмара для ИТ. Как избежать провалов +6

08:39

Соедините с оператором! Как постараться не взбесить клиентов роботом в контакт-центре +5

07:30

Новые атаки на защищенные зоны процессоров Intel, AMD и Nvidia. Что происходит? +5

07:02

Памяти Эрика Булатова: как его художественный метод изменил дизайн навсегда +5

05:05

Знакомства для создания семьи, лидогенерация через Telegram — и ещё 8 российских стартапов +5

08:12

Документируем API как профессионалы OpenAPI и Spring в действии +4

08:04

Магия Python: почему list — не список, а dict находит всё мгновенно +4

11:01

Как не получилось сделать PostgreSQL лучше (и почему это нормально) +92

09:01

Linux-телефоны сейчас важнее, чем когда-либо +71

13:01

Куда подевалось легендарное внимание Apple к деталям? +44

06:30

Мы делали продукт, они — презентацию. Угадайте, кто выиграл полмиллиона +43

11:00

Как я разрабатывал плагин для синхронизации погоды на Minecraft-сервере и в Санкт-Петербурге +42

07:00

Выжить без электричества: тестируем аварийный мини-гаджет с ручной зарядкой +39

07:05

Если в кране нет воды… значит сработали моллюски +37

14:05

Почему современные LLM пока не отберут работу у программистов +36

05:00

Запрет мультивиз ЕС для россиян, а также скандал вокруг госгарантий для пузыря OpenAI +36

10:15

Что такое API? Простыми словами для Начинающих +25

07:00

Корона не жмет! Интересный текстовый процессор Smith Corona 9000 LT DS родом из девяностых +20

05:42

Разбираю свой фотоархив +20

14:00

Inovato Quadra — стоит ли брать альтернативу Raspberry Pi за 29 $ +19

12:37

Мониторинг Angie с Prometheus и Grafana +18

07:10

Есть ли ответ на вопрос «Почему AI любит добавлять в тексты много длинных тире?» +18

00:35

Дорого, красиво, прогрессивно — история краха Iomega Zip +18

12:41

Что не так с нейтроном? Про 15 минут, которые решают судьбу Вселенной +17

08:01

Как создавались кросс-функциональные команды в структуре компании в Битрикс24 +17

07:49

Падение Intel и восхождение AMD: продолжение хроники кремниевой дуэли +17

11:15

Равномерное размещение блоков разных размеров +15

13:47

Почему природа до сих пор не породила колесо +112

21:14

Как работает цензура на государственном уровне? Разбираем на примере слитого китайского фаерволла. Часть 1 +79

05:56

Адский эксперимент: личный сайт на нищих микросервисах +63

07:09

Запустить спутник — уже не фантастика. Описываю процесс по шагам на своем примере +46

16:16

Брезенхэм и FPGA +45

12:10

Планковский масштаб: от математического курьёза к горизонту познания +45

05:00

Менталитет старой школы: инженерные привычки программиста 70–90-х и как их применять сегодня +44

12:38

Пузырь доткомов (1995-2000) очень похож на пузырь криптовалюты и Искусственного интеллекта +39

13:01

Рейтинг контента и пользователей на основе офелократии. Часть 2. Реализация на SQL +35

10:05

Как превратить телефон в портативную консоль +35

09:01

Google Cloud уже в третий раз блокирует аккаунт моей компании +32

08:01

UMPC возвращаются? Три прототипа, которые пытаются оживить забытый класс мини-компьютеров +30

15:58

Как работает компьютер. Простая статья для начинающих программистов +27

05:16

Кино, которого нет: опыт работы над ИИ-клипом +23

16:09

Два универсальных SIMD алгоритма +22

09:15

Парсим XML и JSON на ассемблере +21

17:32

Как я запустил локальную LLM на Raspberry Pi 5 +18

15:51

Как я делал аркадный аппарат под одну игру. Часть 1: прототип +18

07:32

Как with делает ваш Python-код безопаснее и читабельнее +18

13:20

На сопках Маньчжурии: авария в бухте Чажма +17

ОБСУЖДАЕМОЕ

  • Почему природа до сих пор не породила колесо +112

    • 252   52000

    Как работает цензура на государственном уровне? Разбираем на примере слитого китайского фаерволла. Часть 1 +79

    • 210   30000

    Linux-телефоны сейчас важнее, чем когда-либо +71

    • 110   33000

    Менталитет старой школы: инженерные привычки программиста 70–90-х и как их применять сегодня +44

    • 89   18000

    Почему end-to-end шифрование на самом деле вас не защищает +2

    • 82   3600

    Выжить без электричества: тестируем аварийный мини-гаджет с ручной зарядкой +39

    • 81   22000

    Мне 17, завтра отчисление. Пытаюсь понять, не совершаю ли я ошибку, копаясь в AI +2

    • 69   4300

    Почему JSON и YAML мешают вам писать нормальные конфиги (и чем их заменить) -11

    • 63   9400

    Умер Джеймс Уотсон, первооткрыватель ДНК и рупор научного расизма или о тех, кто сказал два слова, вместо одного +3

    • 37   2400

    Мое производство зарабатывает, потому что я не плачу налоги +3

    • 33   20000

    Домашний супер-компьютер для ИИ: какой выбрать в 2025? +3

    • 30   4100

    Равномерное размещение блоков разных размеров +15

    • 28   2200

    Я хакнул галактику (часть 3: 3D-штампы, Андромеда и БМО) -1

    • 28   1700

    Сравнение одноплатников в формате Raspberry Pi Zero +9

    • 27   5800

    Пузырь доткомов (1995-2000) очень похож на пузырь криптовалюты и Искусственного интеллекта +39

    • 27   8800
  • Главная
  • Контакты
© 2025. Все публикации принадлежат авторам.