Wie man sich mit vk api unterhält

Irgendwann in meinem Leben wurde mir klar, dass ich zum Glück 10 Seiten Kopien von mir auf Vkontakte erstellen und gleichzeitig als Freund zu Leuten aus der Freundesliste meiner Hauptseite hinzugefügt werden muss. Einzelheiten zur Umsetzung der Idee finden Sie unter Kat.-Nr.


Projektziele


  • Machen Sie 10 Seiten auf Vkontakte
  • Kopieren Sie den Avatar von der Hauptseite
  • Kopieren Sie alle Beiträge von der Hauptseite
  • Kopieren Sie alle Videos von der Hauptseite
  • Zu allen Gruppen der Hauptseite hinzufügen
  • Erstellen Sie eine vollständige Grafik der Friendbikes unter den Bots (wie bei jedem Eintrag und fügen Sie jeden Bot als Freund hinzu).
  • Fügen Sie zu jeder von 80 Personen aus einer vorkompilierten Liste von Freunden hinzu

Registrierung


Um die Seiten zu erstellen, habe ich den Dienst sms-reg.com verwendet. Weitere Informationen zu SMS-Empfangsdiensten finden Sie hier .

Wir registrieren alle 10 Seiten und schreiben ihre Benutzernamen / Passwörter in die Datei accounts.json (wobei id die ID der zu registrierenden Seite und zero_id die ID unserer Hauptseite ist):

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


Ich werde mit der Bibliothek vk_api arbeiten.

 pip install vk_api --user 

Erstellen Sie eine bots.py-Datei, die für den Rest der Skripte nützlich sein wird:

 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() 

Es liest accounts.json und initialisiert die API für jedes der Konten.

Avatar kopieren


 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 

Videokopieren


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

Hinzufügen zu Gruppen


 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 

Erstellen Sie ein vollständiges Diagramm mit Freunden




 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) 

Erstellen Sie ein vollständiges Likes-Diagramm



 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 

Zu Freunden hinzufügen


Erstellen Sie eine Freundesdatei, in die wir in jede Zeile schreiben

 id_ #_ ( ) 

Mit VKontakte können Sie täglich etwa 80 Personen hinzufügen.

 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) 

CAPTCHA-Bypass


Der aufmerksame Leser hat die Zeile bereits gesehen

 from captcha import captcha_handler 

Da Vkontakte diese Anzahl von Anfragen nicht immer mag, müssen Sie Captcha verarbeiten. Es gibt eine Vielzahl von Diensten, die eine solche Möglichkeit bieten. Sie müssen nur eine Post-Anfrage mit Captcha in base64 senden und warten.



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

Ergebnisse


Hier sind einige Screenshots von dem, was mir die Leute geschickt haben
Versteckter Text


Github
Die Hauptfrage bleibt offen - warum habe ich das getan? Ich habe keine Ahnung.

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


All Articles