En algún momento de mi vida, me di cuenta de que para ser feliz necesito crear 10 páginas de copias de mà mismo en Vkontakte y al mismo tiempo ser agregado como amigo a las personas de la lista de amigos de mi página principal. Para detalles de la implementación de la idea, por favor, bajo cat.

Objetivos del proyecto
- Hacer 10 páginas en Vkontakte
- Copiar avatar de la página principal
- Copia todas las publicaciones de la página principal
- Copie todos los videos de la página principal
- Agregar a todos los grupos de la página principal
- Haga un gráfico completo de las bicicletas de amigos entre los bots (como cada entrada y agregue cada bot como amigo)
- Agregar a cada una de las 80 personas de una lista de amigos precompilada
Registro
Para crear las páginas, utilicé el servicio sms-reg.com, aquà hay más información sobre los servicios de recepción de SMS.
Registramos las 10 páginas y escribimos sus nombres de usuario / contraseñas en el archivo accounts.json (donde id es el id de la página que se está registrando y zero_id es el id de nuestra 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
Trabajaré con la biblioteca vk_api.
pip install vk_api --user
Cree un archivo bots.py, nos será útil para el resto de los 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()
Lee accounts.json e inicializa la API para cada una de las cuentas.
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
Copia de video
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'])
Agregar 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
Crea un 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)
Crea un gráfico de me gusta completo
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:
Agregar a amigos
crear un archivo de amigos en el que escribimos en cada lĂnea
id_ #_ ( )
VKontakte le permite agregar aproximadamente 80 personas al dĂa.
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)
Bypass CAPTCHA
El lector atento ya ha visto la lĂnea.
from captcha import captcha_handler
Como a Vkontakte no siempre le gusta esta cantidad de solicitudes, debe procesar captcha. Hay una gran cantidad de servicios que brindan esa oportunidad. Solo necesita enviar una solicitud de publicaciĂłn con captcha en base64 y esperar.

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
AquĂ hay algunas capturas de pantalla de lo que la gente me enviĂł.
githubLa pregunta principal sigue abierta: ¿por qué hice esto? No tengo idea