В наши дни роботы – это новое понятие, включающее в себя возможность возложить свои труды на машину. В этой записи мы будем делать робота для развлечения. Кому-то эта публикация покажется очень исчерпывающей, и я буду верить, что, если вы тоже активны в этой теме, поделитесь информацией о своих открытиях в этой сфере. Так же я выражаю благодарность автору этой публикации за проявленный интерес к этой теме. Его публикация натолкнула меня на мысль улучшить работу с помощью новейших технологий ВКонтакте. Итак, перейдём непосредственно к теме.
Большинство из нас видели ботов в ВК. Они выглядели в виде побочных аккаунтов. Из-за этого была нужда постоянного ввода капчи или траты денег на сервисы автоввода капчи. Было много ограничений, в том числе на количество сообщений тем, кто не находится в списке друзей. Сейчас, в 2017 году, всё поменялось: ВКонтакте с ужасающей скоростью меняется. Новый дизайн, доска объявлений, сообщения в сообществах… Всё происходит так быстро, что невозможно успеть ознакомиться с большинством из них. Сегодня я это исправляю. По окончанию статьи, если вы будете придерживаться моей инструкции, вы станете ботоводом ВКонтакте. Приступим к работе.
Здесь ничего сложного. Сможет осознанно сделать каждый.
Для робота нам понадобится завести группу ВКонтакте. Обозвать её названием робота и провести некоторые операции.
Для начала получим вечный access_token для работы с сообществом. Можно расставить все права на случай, если вы будете улучшать мой код.
Ещё надо не забыть включить сообщения сообщества. Это всё сделать нетрудно через кнопку Управление сообществом. Я думаю, это все умеют, поэтому описывать слишком досконально смысла нет.
После идём на сайт замечательной компании Наносемантика Ай-яй-яй.ру, чтобы создать своего робота. Проходим регистрацию, заходим в личный кабинет. В процессе создания робота внешность не имеет никакого значения. Выбираем какого-нибудь «киборга» и идём дальше. После корректного названия осталось только скопировать ID нашего свежеизданного робота в адресной строке.
Не стоит забывать этот личный кабинет, здесь можно редактировать ответы вашего робота, когда с ним поговорят. Так же его можно сразу заполнить контентом на различные темы. Конечно, вариант немного детский (а он и создан для детей), но этот вариант не хуже, чем ничего. При токной настройке робот может очень неплохо вам прослужить.
Я не знаю, где вы будете держать робота: дома ли у себя, или на круглосуточном сервере. Лично у меня робот будет находиться на сервере, поэтому рассматриваю именно этот случай. Что касается домашнего варианта — достаточно установить Python на ваш Windows и проделать относительно те же шаги.
Код исполняется постоянно. Его работа прекратится только в случай критической ошибки или завершения процесса. Работать над ним можно вечность и сделать в итоге настоящую личность с автопостингом из разных парс-ресурсов. Я этим буду заниматься в дальнейшем. А сейчас выложу рабочую версию. Есть вся необходимая сила для общения. Если понадобится — можно по примеру дописать реакции и на другие действия. Всё зависит от вашей фантазии.
Я значительно повеселился с этим роботом. Вечер удался, хотя и было очень много ошибок. Эта версия выдерживает нескольких гостей одновременно. Совершенствовать скрипт вы тоже можете. Попробуйте сделать из него настоящую личность!
И, да, спасибо за внимание.
Большинство из нас видели ботов в ВК. Они выглядели в виде побочных аккаунтов. Из-за этого была нужда постоянного ввода капчи или траты денег на сервисы автоввода капчи. Было много ограничений, в том числе на количество сообщений тем, кто не находится в списке друзей. Сейчас, в 2017 году, всё поменялось: ВКонтакте с ужасающей скоростью меняется. Новый дизайн, доска объявлений, сообщения в сообществах… Всё происходит так быстро, что невозможно успеть ознакомиться с большинством из них. Сегодня я это исправляю. По окончанию статьи, если вы будете придерживаться моей инструкции, вы станете ботоводом ВКонтакте. Приступим к работе.
Шаг 1. Подготовка.
Здесь ничего сложного. Сможет осознанно сделать каждый.
Группа в ВК
Для робота нам понадобится завести группу ВКонтакте. Обозвать её названием робота и провести некоторые операции.
Для начала получим вечный access_token для работы с сообществом. Можно расставить все права на случай, если вы будете улучшать мой код.
Ещё надо не забыть включить сообщения сообщества. Это всё сделать нетрудно через кнопку Управление сообществом. Я думаю, это все умеют, поэтому описывать слишком досконально смысла нет.
Создание робота-инфа
После идём на сайт замечательной компании Наносемантика Ай-яй-яй.ру, чтобы создать своего робота. Проходим регистрацию, заходим в личный кабинет. В процессе создания робота внешность не имеет никакого значения. Выбираем какого-нибудь «киборга» и идём дальше. После корректного названия осталось только скопировать ID нашего свежеизданного робота в адресной строке.
Не стоит забывать этот личный кабинет, здесь можно редактировать ответы вашего робота, когда с ним поговорят. Так же его можно сразу заполнить контентом на различные темы. Конечно, вариант немного детский (а он и создан для детей), но этот вариант не хуже, чем ничего. При токной настройке робот может очень неплохо вам прослужить.
Шаг 2. Выбор оборудования
Я не знаю, где вы будете держать робота: дома ли у себя, или на круглосуточном сервере. Лично у меня робот будет находиться на сервере, поэтому рассматриваю именно этот случай. Что касается домашнего варианта — достаточно установить Python на ваш Windows и проделать относительно те же шаги.
Шаг 3. Кодинг
Небольшое лирическое отступление
Вот тут начинается моё самое любимое… Ах! Как я обожаю кодинг. Там, где я живу, ни один человек не знает о программировании ничего, кроме этого:
Мне не с кем в школе поделиться своими достижениями, поэтому пишу сюда. Надеюсь, что эта публикация позволит мне получить малейший шансик стать не только read, но и write пользователем. Тогда буду делиться с вами разного рода уникальной информацией значительно чаще. Спасибо, что прочитали это.
Переустанови винду, тыж программист!
Мне не с кем в школе поделиться своими достижениями, поэтому пишу сюда. Надеюсь, что эта публикация позволит мне получить малейший шансик стать не только read, но и write пользователем. Тогда буду делиться с вами разного рода уникальной информацией значительно чаще. Спасибо, что прочитали это.
Код исполняется постоянно. Его работа прекратится только в случай критической ошибки или завершения процесса. Работать над ним можно вечность и сделать в итоге настоящую личность с автопостингом из разных парс-ресурсов. Я этим буду заниматься в дальнейшем. А сейчас выложу рабочую версию. Есть вся необходимая сила для общения. Если понадобится — можно по примеру дописать реакции и на другие действия. Всё зависит от вашей фантазии.
#!/usr/bin/python
# coding: utf-8
# необходимые пакеты
import base64
import hashlib
import json
import requests
from urllib import urlencode, unquote
# ID инфа
InfId = "вставьте ID"
# access token паблика ВКонтакте
AccessToken = "access_token вписываем сюда"
# кодовая фраза для iii.ru API (изменять нельзя)
Key = "some very-very long string without any non-latin characters due to different string representations inside of variable programming languages"
# оперативная память сессий
Memory = []
# выключаем ненужные предупреждения от urllib3
requests.packages.urllib3.disable_warnings()
# шифратор по технологии поразрядного исключающего ИЛИ
# Вход =====
# message - строка для шифрования
# key - ключ, который использовался для шифровки
# Выход =====
# newmsg - зашифрованная строка
def XOR_encrypt(message, key):
ml = len(message)
kl = len(key)
newmsg = u""
for i in range(0, ml):
newmsg = newmsg + chr(ord(message[i]) ^ ord(key[i % kl]))
return base64.b64encode(newmsg)
# дешифратор по технологии поразрядного исключающего ИЛИ
# Вход =====
# encrypted_message - зашифрованное сообщение
# key - ключ, который использовался для шифровки
# Выход =====
# newmsg - расшифрованная строка
def XOR_decrypt(encrypted_message, key):
msg = base64.b64decode(encrypted_message)
ml = len(msg)
kl = len(key)
newmsg = u""
for i in range(0, ml):
newmsg = newmsg + chr(ord(msg[i]) ^ ord(key[i % kl]))
return newmsg
# инициализатор посетителя
# Вход =====
# vkid - ID посетителя ВКонтакте
# key - секретный ключ от API iii.ru
# botid - ID робота iii.ru
# Выход =====
# Строка - ID инициализированной сессии
def initme(vkid, key, botid):
getuid = requests.get("http://iii.ru/api/2.0/json/Chat.init/%s/%s" % (botid, vkid))
jsonparam = json.loads(base64.b64decode(XOR_decrypt(getuid.text, Key)))
return jsonparam["result"]["cuid"]
# получаем доступ к longpoll-серверу
# Вход =====
# Не требует переменных
# Выход =====
# response - словарь, содержащий ===
# server - сервер для подключения
# key - ключ доступа
# ts - штамп времени, с которого мы ждём
def new_longpoll():
r = requests.get("https://api.vk.com/method/messages.getLongPollServer?use_ssl=1&need_pts=0&access_token=%s" % AccessToken)
db = json.loads(r.text)
return db["response"]
# сбрасывает накопленную оперативную память в файл, чтобы не потерять
# Вход и выход =====
# Не требует переменных
def mem_dump():
f = open("memory.txt", "w")
res = ""
for m in Memory:
res = res + "%s=%s=%s" % (str(m[0]), str(m[1]), str(m[2]))
f.close()
# Вызываем longpoll в первый раз и записываем данные
longpoll = new_longpoll()
server_ip = longpoll["server"]
server_key = longpoll["key"]
server_ts = longpoll["ts"]
# инициализируем оперативную и файловую память
# если робот "далеко зайдёт" - пишите доп. код на сегменты
f = open("memory.txt", "w+")
for line in f:
try:
l = line.split("=")
Memory.append(l)
except:
Memory = []
f.close()
# бесконечный цикл
while True:
# подключаемся к longpoll серверу
r = requests.get("https://%s?act=a_check&key=%s&ts=%s&wait=25&mode=2&version=1" % (server_ip, server_key, server_ts))
db = json.loads(r.text)
# перезаписываем временной штамп из longpoll отчёта
server_ts = db["ts"]
# если изменений нет - заново подключаемся к серверу
if db["updates"] == 0:
continue
# иначе листаем все изменения
for item in db["updates"]:
print(item)
# 4 - код нового сообщения от юзеров
if item[0] == 4:
# получаем vk id и само сообщение
msgid = int(item[1])
sender = item[3]
message = item[6]
# если сообщением является вложением или стикером - игнорируем
if message == u'':
continue
session = None
# ищем сессию. если нет - создаём
for lst in Memory:
if lst[0] == sender:
session = lst[1]
mgid = lst[2]
try:
if mgid and mgid == msgid:
continue
except:
mgid = msgid
if session is None:
session = initme(sender, Key, InfId)
Memory.append([sender, session, msgid])
# формируем JSON запрос
whattosend = u'["%s","%s"]' % (session, unquote(message))
# ... и зашифровываем
hashed = XOR_encrypt(base64.b64encode(whattosend.encode("utf-8")), Key)
# отправляем iii.ru
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': 'http://iii.ru/static/Vishnu3.swf?v=3',
'Origin': 'http://iii.ru/'
}
req = requests.post("http://iii.ru/api/2.0/json/Chat.request", data=hashed, headers=headers)
# расшифровываем ответ
answer = json.loads(base64.b64decode(XOR_decrypt(req.text, Key)))
otvet = answer["result"]["text"]["value"]
# отправляем ответ в ВКонтакте
r = requests.get(u"https://api.vk.com/method/messages.send?user_id=%s&message=%s&access_token=%s" % (sender, otvet, AccessToken))
# присваиваем ID ответа, чтобы робот не отвечал сам себе
for lst in Memory:
if lst[0] == sender:
lst[2] = int(json.loads(r.text)["response"])
# опять ждём у моря погоды
continue
# 6 - код прочтения сообщений. продолжаем...
# elif item[0] == 6:
# continue
# 61 - код набора текста. просто ждём...
# elif item[0] == 61:
# print("User writing message...")
# continue
Я значительно повеселился с этим роботом. Вечер удался, хотя и было очень много ошибок. Эта версия выдерживает нескольких гостей одновременно. Совершенствовать скрипт вы тоже можете. Попробуйте сделать из него настоящую личность!
И, да, спасибо за внимание.
Поделиться с друзьями