Kami menulis obrolan bot untuk VKontakte di python menggunakan longpoll

Sekarang bot sudah menjadi hal yang biasa dan ada di setiap langkah, tetapi jika Anda membutuhkan bot Anda di jejaring sosial VKontakte, maka ini mudah diimplementasikan.

Kami akan membutuhkan:

  1. Python
  2. VK Api
  3. Keinginan

Yah, tepat untuk pemula


Bagaimana cara menginstal Python?
Unduh , jalankan penginstal.

Di mana menulis kode ini?
Ke dokumen teks dengan ekstensi .py

Dan apa yang harus ditulis?
Ya, bahkan dengan notebook. Secara pribadi, saya merekomendasikan Notepad ++

Dan bagaimana cara menjalankannya?
Melalui baris perintah.
python \.py

Bagaimana cara kerjanya?


Semuanya sangat sederhana, di api vk ada hal seperti itu, yang disebut longpool berfungsi seperti ini:
Long Polling adalah teknologi yang memungkinkan Anda menerima data acara baru menggunakan "kueri panjang". Server menerima permintaan, tetapi tidak segera mengirim respons, tetapi hanya ketika suatu peristiwa terjadi (misalnya, pesan baru tiba) atau batas waktu yang ditentukan berakhir.
Dalam bahasa Rusia, kami mengirim permintaan ke server, dan dia, pada gilirannya, memencet VKontakte jika sesuatu terjadi di sana, misalnya, kami menerima pesan, ia berlari dan memberi tahu kami tentang hal itu. Dari sini kita akan menari.

Implementasi teknis


Pertama, kita perlu membuktikan dalam kontak bahwa kita adalah kita, dan bukan orang lain. Ini dilakukan dengan sangat sederhana.

 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 

Catatan, orang-orang dari VK merekomendasikan menggunakan nomor telepon sebagai login. jika tidak, Anda dapat mengalami pemeriksaan anti-bot, pemeriksaan di mana Anda diminta memasukkan nomor yang hilang dari nomor telepon.

Jika bot akan duduk dalam grup, maka otorisasi terlihat berbeda.

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


- Apa itu token?
- Hal seperti itu dari tsiferok dan surat yang perlu Anda dapatkan dalam pengaturan grup. Untuk melakukan ini, cukup buka bagian "Manajemen Komunitas" ("Kelola halaman" jika Anda memiliki halaman publik), pilih tab "Work with API" dan klik "Buat Kunci Akses".

Sekarang panggil 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=' ' ) 

Pesan mungkin tidak hanya berisi teks yang Anda tentukan. Sebagai contoh:

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

Anda juga dapat melampirkan gambar.

 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=' ' ) 

Anda dapat membuat banyak hal menarik, tetapi pikirkan sendiri, dan saya hanya akan mengatakan: tautan dapat dibagi menjadi beberapa bagian. Sebagai contoh:

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

dan tidak ada yang melarang kami untuk menerima respons dari pengguna pada contoh 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 

Tautan ke contoh dan dokumentasi


Contoh bot bekerja pada api DuckDuckGo
VK api use case (umum)
Dokumentasi VK api Satu , Dua

Tentang ini saya akan mengucapkan selamat tinggal kepada Anda. Pengodean yang bagus.

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


All Articles