Escribimos un chat bot para VKontakte en python usando longpoll

Ahora los bots se han vuelto comunes y están en cada paso, pero si necesita su bot en la red social VKontakte, entonces esto es fácil de implementar.

Necesitaremos:

  1. Pitón
  2. VK Api
  3. Deseo

Bueno, justo para principiantes


¿Cómo instalar Python?
Descargue , ejecute el instalador.

¿Dónde escribir este código?
A un documento de texto con la extensión .py

Y que escribir
Sí, incluso con un cuaderno. Personalmente, recomiendo Notepad ++

¿Y cómo correr?
A través de la línea de comando.
python \.py

Como funciona


Todo es muy simple, en vk api existe tal cosa, llamada longpool, funciona así:
Long Polling es una tecnología que le permite recibir datos sobre nuevos eventos mediante "consultas largas". El servidor recibe la solicitud, pero no le envía una respuesta de inmediato, sino solo cuando se produce un evento (por ejemplo, llega un nuevo mensaje) o expira el tiempo de espera especificado.
En ruso, enviamos una solicitud al servidor, y él, a su vez, toca VKontakte si algo sucede allí, por ejemplo, recibimos un mensaje, él corre y nos lo cuenta. De esto bailaremos.

Implementación técnica


Primero, tenemos que demostrar en contacto que somos nosotros, y nadie más. Esto se hace de manera muy simple.

 import vk_api import requests session = requests.Session() login, password = ' , email  ', ' ' vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return 

Tenga en cuenta que los chicos de VK recomiendan usar un número de teléfono como inicio de sesión. de lo contrario, puede encontrarse con una verificación anti-bot, en la que se le pide que ingrese los números que faltan del número de teléfono.

Si el bot se sentará en un grupo, entonces la autorización se ve diferente.

 import requests import vk_api vk_session = vk_api.VkApi(token='      ') 


- ¿Qué es una ficha?
- Tal cosa de tsiferok y cartas que necesita obtener en la configuración del grupo. Para hacer esto, simplemente abra la sección "Administración de la comunidad" ("Administre la página" si tiene una página pública), seleccione la pestaña "Trabajar con API" y haga clic en "Crear clave de acceso".

Ahora llama a Longpool.

 from vk_api.longpoll import VkLongPoll, VkEventType longpoll = VkLongPoll(vk_session) vk = vk_session.get_api() for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: # longpoll,    : if event.text == '  ' or event.text == '  ': #    if event.from_user: #    vk.messages.send( #  user_id=event.user_id, message=' ' ) elif event.from_chat: #    vk.messages.send( #  chat_id=event.chat_id, message=' ' ) 

Los mensajes no solo pueden contener el texto que especifique. Por ejemplo:

 import datetime vk.messages.send( user_id=event.user_id, message=' : ' + str(now.strftime("%H:%M")) ) 

También puedes adjuntar fotos.

 attachments = [] from vk_api import VkUpload upload = VkUpload(vk_session) image_url = '  ' image = session.get(image_url, stream=True) photo = upload.photo_messages(photos=image.raw)[0] attachments.append( 'photo{}_{}'.format(photo['owner_id'], photo['id']) ) vk.messages.send( user_id=event.user_id, attachment=','.join(attachments), message=' ' ) 

Puedes pensar en muchas cosas interesantes, pero piénsalo tú mismo y solo diré eso: los enlaces se pueden dividir en partes. Por ejemplo:

 image_url = 'http://.com/uploads/' + event.text + '.png' 

y nadie nos prohibió recibir una respuesta de un usuario en el ejemplo de Wikipedia:

 import wikipedia #  wikipedia.set_lang("RU") if event.text == '' or event.text == '' or event.text == '' or event.text == '' or event.text == 'Wikipedia' or event.text == 'wikipedia' or event.text == 'Wiki' or event.text == 'wiki': #          ...  wiki if event.from_user: #   KC vk.messages.send( user_id=event.user_id, message=' ' # " " ) elif event.from_chat: #    vk.messages.send( chat_id=event.chat_id, message=' ' # " " ) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: # longpoll if event.from_user: vk.messages.send( #    user_id=event.user_id, message='   : \n' + str(wikipedia.summary(event.text)) # "   "      api Wikipedia     ) break #   elif event.from_chat: #    vk.messages.send( chat_id=event.chat_id, message='   : \n' + str(wikipedia.summary(event.text)) # "   "      api Wikipedia     ) break #   continue 

Enlaces a ejemplos y documentación


Ejemplo de bot trabajando en la api DuckDuckGo
Casos de uso de la API VK (general)
Documentación de la API VK Uno , Dos

En esto te diré adiós. Buena codificación

Source: https://habr.com/ru/post/es428507/


All Articles