Comment vous divertir avec vk api

À un moment donné de ma vie, j'ai réalisé que pour le bonheur, je dois créer 10 pages de copies de moi-même sur Vkontakte et en même temps être ajouté en tant qu'ami à des personnes de la liste d'amis de ma page principale. Pour plus de détails sur la mise en œuvre de l'idée - veuillez, sous cat.


Objectifs du projet


  • Faire 10 pages sur Vkontakte
  • Copier l'avatar de la page principale
  • Copiez tous les articles de la page principale
  • Copiez toutes les vidéos de la page principale
  • Ajouter à tous les groupes de la page principale
  • Faites un graphique complet des vélos amis parmi les robots (comme chaque entrée et ajoutez chaque robot comme ami)
  • Ajouter à chacun des 80 personnes d'une liste d'amis pré-compilée

Inscription


Pour créer les pages que j'ai utilisées le service sms-reg.com, plus sur les services de réception de SMS est bien écrit ici .

Nous enregistrons les 10 pages et écrivons leurs noms d'utilisateur / mots de passe dans le fichier accounts.json (où id est l'id de la page en cours d'enregistrement, et zero_id est l'id de notre page principale):

{ "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


Je vais travailler avec la bibliothèque vk_api.

 pip install vk_api --user 

Créez un fichier bots.py, il nous sera utile pour le reste des 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() 

Il lit accounts.json et initialise l'API pour chacun des comptes.

Copier l'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 

Copie vidéo


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

Ajout aux groupes


 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 

Créez un graphique complet d'amis




 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) 

Créez un graphique de likes complet



 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 

Ajouter à mes amis


créer un fichier d'amis dans lequel on écrit dans chaque ligne

 id_ #_ ( ) 

VKontakte vous permet d'ajouter environ 80 personnes par jour.

 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) 

Contournement de CAPTCHA


Le lecteur attentif a déjà vu la ligne

 from captcha import captcha_handler 

Étant donné que Vkontakte n'aime pas toujours ce nombre de demandes, vous devez traiter captcha. Il existe un grand nombre de services qui offrent une telle opportunité. Il vous suffit d'envoyer une demande de publication avec captcha en base64 et d'attendre.



 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:] 

Résultats


Voici quelques captures d'écran de ce que les gens m'ont envoyé
Texte masqué


github
La question principale reste ouverte - pourquoi ai-je fait cela? Je n'en ai aucune idée.

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


All Articles