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:
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
githubA principal questĂŁo permanece em aberto - por que eu fiz isso? Eu nĂŁo tenho ideia.