Como se divertir com vk api

Em algum momento da minha vida, percebi que, para a felicidade, preciso criar 10 páginas de cópias minhas no Vkontakte e, ao mesmo tempo, ser adicionado como amigo às pessoas da lista de amigos da minha página principal. Para detalhes da implementação da ideia - por favor, sob cat.


Objetivos do projeto


  • Crie 10 páginas no Vkontakte
  • Copie avatar da página principal
  • Copie todas as postagens da página principal
  • Copie todos os vĂ­deos da página principal
  • Adicionar a todos os grupos da página principal
  • Faça um gráfico completo de motos entre os bots (como todas as entradas e adicione cada bot como amigo)
  • Adicione a cada uma das 80 pessoas de uma lista prĂ©-compilada de amigos

Registo


Para criar as páginas, usei o serviço sms-reg.com, mais sobre os serviços de recebimento de SMS estão bem escritos aqui .

Registramos todas as 10 páginas e escrevemos seus nomes de usuário / senhas no arquivo accounts.json (onde id é o ID da página que está sendo registrada e zero_id é o ID da nossa página principal):

{ "zero_id": "21102****", "accounts": [ { "phone": "7985002****", "password": "tTod********", "id": 53980**** }, { "phone": "7985317****", "password": "tglh********", "id": 53980**** }, ... { "phone": "7916033****", "password": "ZsRq********", "id": 54038**** } ] } 

python + vk_api


Vou trabalhar com a biblioteca vk_api.

 pip install vk_api --user 

Crie um arquivo bots.py, que será útil para o restante dos scripts:

 import json import vk import vk_api from captcha import captcha_handler with open('accounts.json', 'r') as file: data = json.loads(file.read()) accounts = data['accounts'] zero_id = int(data['zero_id']) vk_apis = [] def init_apis(): current_id = 0 for account in accounts: vk_session = vk_api.VkApi(account['phone'], account['password'], captcha_handler=captcha_handler) vk_session.auth() vk_apis.append(vk_session.get_api()) print('account', current_id, 'successfully inited') current_id += 1 init_apis() 

Ele lĂŞ accounts.json e inicializa a API para cada uma das contas.

Copiar avatar


 def change_photo(vk): upload_url = vk.photos.getOwnerPhotoUploadServer()['upload_url'] answer = json.loads(requests.post(upload_url, files={'photo': open('avatar.jpg', 'rb')}).text) vk.photos.saveOwnerPhoto(photo=answer['photo'], server=answer['server'], hash=answer['hash']) counter = 0 for vk in vk_apis: change_photo(vk) print(counter, 'done') counter += 1 

CĂłpia de vĂ­deo


 videos = default_vk.video.get(owner_id=zero_id, count=100) counter = 0 for vk in vk_apis: for video in videos['items']: vk.video.add(video_id=video['id'], owner_id=video['owner_id']) 

Adicionando a grupos


 from time import sleep from bots import vk_apis, zero_id, accounts, default_vk groups = default_vk.groups.get(user_id=zero_id, count=100) counter = 0 for vk in vk_apis: for group in groups['items']: print('add to', group) vk.groups.join(group_id=group) print(counter) counter += 1 

Crie um gráfico completo de amigos




 counter = 0 for vk, account in zip(vk_apis, accounts): for friend in accounts: if friend['id'] == account['id']: continue vk.friends.add(user_id=friend['id'], captcha_handler=captcha_handler) print(counter, friend['id'], account['id']) counter += 1 sleep(1) 

Crie um gráfico completo de curtidas



 counter = 0 for vk, account in zip(vk_apis, accounts): for friend in accounts: if friend['id'] != account['id']: continue print(counter, friend['id'], account['id']) for post in vk.wall.get(owner_id=friend['id'])['items']: flag = True while flag: try: #   -      vk.likes.add(type='post', owner_id=post['owner_id'], item_id=post['id']) flag = False except: print('failed on', counter) sleep(10) pass counter += 1 

Adicionar a amigos


crie um arquivo de amigos no qual escrevemos em cada linha

 id_ #_ ( ) 

O VKontakte permite adicionar cerca de 80 pessoas por dia.

 friends_str = '' with open('friends', 'r') as file: friends_str = file.read() friends = [{'id': x.split(' #')[0], 'name': x.split(' #')[1]} for x in friends_str.split('\n')] ids_ = ([x['id'] for x in (default_vk.users.get(user_ids=[x['id'] for x in friends]))]) for friend, id_ in zip(friends, ids_): print(friend['name']) print(friend) for vk in vk_apis: flag = True while flag: try: vk.friends.add(user_id=int(id_)) flag = False except: print('error') sleep(10) 

Desvio CAPTCHA


O leitor atento já viu a linha

 from captcha import captcha_handler 

Como o Vkontakte nem sempre gosta desse número de solicitações, é necessário processar o captcha. Há um grande número de serviços que oferecem essa oportunidade. Você só precisa enviar uma solicitação de postagem com captcha na base64 e aguardar.



 def uncapcha(url): imager = requests.get(url) r = requests.post('http://rucaptcha.com/in.php', data = {'method': 'base64', 'key': RUCAPTCHA_KEY, 'body': base64.b64encode(imager.content)}) if (r.text[:3] != 'OK|'): print('captcha failed') return -1 capid = r.text[3:] sleep(5) capanswer = requests.post('http://rucaptcha.com/res.php', data = {'key': RUCAPTCHA_KEY, 'id':capid, 'action':'get'}).text if (capanswer[:3] != 'OK|'): print('captcha failed') return -1 return capanswer[3:] 

Resultados


Aqui estĂŁo algumas capturas de tela do que as pessoas me enviaram
Texto oculto


github
A principal questĂŁo permanece em aberto - por que eu fiz isso? Eu nĂŁo tenho ideia.

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


All Articles