Хакер 90-х, ВКонтакте (анонсирую нового хакера)

Доброго времени суток, дорогие друзья.

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


Источник

Давайте более детально разберёмся.

Необходимо сделать 4 вещи:

  1. Скачать и установить язык программирования Python 2.7
  2. Установить необходимые модули для Python
  3. Создать и включить приложение в ВКонтакте.
  4. Скачать и запустить скрипт.

Может звучит страшно, но делается за 5 минут и по силам даже гуманитарию.

  1. Скачиваем здесь язык программирования Python 2.7 и устанавливаем на компьютере.

  2. Устанавливаем необходимые модули для Python.

Переходим в папку, куда установили Python (по умолчанию устанавливается в C:\Python27), далее в папку Script. Из папки запускаем окно команд (зажимаем shift, далее ПКМ и выбираем Открыть окно команд). Пишем строчку: pip install vk pygame yandex_speech. Нажимаем Enter. Начнется автоматическое скачивание и установка модулей.

  1. Создаем и включаем приложение в ВКонтакте.
    Переходим по ссылке -> "Создать приложение" -> Вводим любое название, платформу не меняем -> "Подключить приложение" -> "Подтвердить через SMS" -> Подтверждаем.
    Далее появляется информация о приложение. Переходим в настройки -> Меняем критерий Состояние на Приложение включено и видно всем -> "Сохранить изменения".
    В настройках видим пункт ID приложения. Запоминаем для дальнейшего использования.

  2. Скачиваем и запускаем скрипт.
    Скачиваем архив со скриптом и распаковываем в любую папку все файлы архива. Запускаем ListenVK.py.

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

Время разобраться с кодом.

# -*- coding: utf-8 -*-
import vk
import time
import pygame
from yandex_speech import TTS

session = vk.AuthSession('ID приложения','Логин','Пароль', scope='messages' )
api = vk.API(session)
tts = TTS("zahar" , "mp3" , "05808c62-a502-4724-a85c-3b8ac74343e9" )

def say( message ):
tts.generate(mes)
tts.save("speech.mp3")

pygame.mixer.init()
pygame.mixer.music.load("speech.mp3")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
time.sleep(1)
pygame.mixer.music.load("some.mp3")

def getName( id ):
name = api.users.get(user_ids=str(id))
return name[0][u'first_name'] + u' ' + name[0][u'last_name']

if __name__ == '__main__':
print "Script ready"
while True:
messages = api.messages.get( time_offset = '3' )
for message in messages[1:]:
mes = message[u'body'].replace(u'
',u'. ')
mes = "{0}.{1}".format( getName(message[u'uid']) , mes )
say(mes)
time.sleep(5)

Код получился компактным. В первых строчках импортируются модули, которые скачиваются в во втором пункте.
vk - Модуль для взаимодействия с ВКонтакте
pygame - Модуль для воспроизведения голоса.
yandex_speech - Модуль для перевода текста в голос.

session = vk.AuthSession('ID приложения','Логин','Пароль', scope='messages' )
api = vk.API(session)
tts = TTS("zahar" , "mp3" , "05808c62-a502-4724-a85c-3b8ac74343e9" )

Здесь происходит инициализация необходимых инструментов: vkapi и tts яндекса. Если объяснить простым языком - инструменты, которыми будем доставать информацию из ВКонтакте и переводить текст в голос.

В первой строке необходимо добавить наши данные. Вместо 'ID приложения', 'Ваш логин' и 'Ваш пароль' пишем свои реальные данные. ID приложения это тот самый ID, который запоминали в 3 пункте.
Получится примерно так:
session = vk.AuthSession( '6310131' , 'IvanIvanov@mail.ru' , 'Qwerty1992' , scope='messages' ).

В третей строке функция TTS имеет три параметра:

  1. Каким голосом будет зачитываться текст.
    Возможные значения Женщин: "jane", "oksana", "alyss", "omazh" или Мужчины: "zahar", "ermil".
  2. Формат сохранения записи: "mp3", "wav", "opus".
  3. API ключ.
    Можно использовать мой. Также стоит добавить параметры:
    "emotion" - С какими эмоциями будет зачитан текст. Возможные значения: "neutral" (по умолчанию), "evil", "good".
  4. Скорость чтения ("speed" ).
    Возможные значения: от 0.1 (медленно) до 3.0 (быстро).

Идем дальше. Программа имеет две функции:

  1. say( message ) - функция, которая зачитывает строку message.
  2. getName( id ) - функция, которая возвращает имя и фамилию аккаунта ВК с id, который передаем.
    Их разберём позже.
if __name__ == '__main__':
print "Script ready"
while True:
messages = api.messages.get( time_offset = '5' )
for message in messages[1:]:
mes = message[u'body'].replace(u'
',u'. ')
mes = "{0}.{1}".format( getName(message[u'uid']) , mes )
say(mes)
time.sleep(5)

Как можно заметить, сначала выводится строка "Script ready". Сигнализирует об удачной инициализации скрипта и начале работы.
Затем происходит бесконечный цикл.

messages = api.messages.get( time_offset = '5' )
Получаем сообщения, отправленные в течение 5 последних секунд.

for message in messages[1:]:
Перебираем все полученные сообщения.

mes = message[u'body'].replace(u'
',u'. ')
mes = "{0}.{1}".format( getName(message[u'uid']) , mes )
say(mes)

Формируем текст, который далее будет озвучен. Сначала имя и фамилия человека, который нам написал. Затем текст сообщения.

def say( message ):
tts.generate(mes)
tts.save("speech.mp3")

pygame.mixer.init()
pygame.mixer.music.load("speech.mp3")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
time.sleep(1)
pygame.mixer.music.load("some.mp3")

Рассмотрим функцию say( message ).

tts.generate(mes)
tts.save("speech.mp3")

Генерируем запись голоса и сохраняем в файл.

pygame.mixer.init()
pygame.mixer.music.load("speech.mp3")
pygame.mixer.music.play()

Инициализируем pygame, загружаем запись и воспроизводим.

while pygame.mixer.music.get_busy():
time.sleep(1)

Метод get_busy() возвращает True, если запись воспроизводится. В этом случае ждем одну секунду, и проверяем снова, до тех пор, пока get_busy() не вернет False (запись закончит воспроизводится).

pygame.mixer.music.load("some.mp3")

Извиняюсь. Костыль. Если открывать два раза подряд файл speech.mp3 - появляется ошибка. Пытался исправить, но тщетно.
Если знаете как исправить - пишите в комментариях. Буду признателен. =)

def getName( id ):
name = api.users.get(user_ids=str(id))
return name[0][u'first_name'] + u' ' + name[0][u'last_name']

Вторая функция. Здесь все просто: api.users.get(id) - возвращает информацию аккаунта по id.
name[0][u'first_name'] - Имя
name[0][u'last_name'] - Фамилия

Ну вот и всё))

Всего доброго. До свидания =))


Студенты ушли на каникулы, а я продолжаю привлекать авторов в голос. Игрока в Омаху и любителя ставок, бизнесменов из турфирмы и дошли руки до юного кодера из враждебно настроенного университета политехнического. Пока vp-cosmos на каникулах - буду поддерживать авторов через свой блог.

Материал куплен на бирже Протея за 40 GBG, вычитка @sergesfnv, команда @sci-populi

апвот50-50pskоткрытый-код
25%
2
838
254.636 GOLOS
0
В избранное
Протеюшко
кафедра биоинженерии и биоинформатики
838
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (7)
Сортировать по:
Сначала старые