VK APIで楽しませる方法

私の人生のある時点で、幸福を得るために、Vkontakteで自分のコピーを10ページ作成し、同時にメインページの友達リストの人に友達として追加する必要があることに気付きました。 アイデアの実装の詳細については、猫の下でお願いします。





プロジェクトの目的





登録



ページを作成するために、私はsms-reg.comサービスを使用しました。SMS受信サービスの詳細については、こちらに記載されています



10ページすべてを登録し、accounts.jsonファイルにユーザー名/パスワードを書き込みます(idは登録するページのid、zero_idはメインページのid):



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



vk_apiライブラリを使用します。



 pip install vk_api --user
      
      





bots.pyファイルを作成します。これは、残りのスクリプトに役立ちます。



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





accounts.jsonを読み取り、各アカウントのAPIを初期化します。



アバターをコピー



 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
      
      





ビデオコピー



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





グループに追加する



 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
      
      





友達の完全なグラフを作成する







 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)
      
      





完全な「いいね!」グラフを作成する





 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
      
      





友達に追加



各行に書き込むフレンドファイルを作成します



 id_ #_ ( )
      
      





VKontakteでは、1日に約80人を追加できます。



 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バイパス



気配りのある読者はすでにこの行を見ています



 from captcha import captcha_handler
      
      





Vkontakteは常にそれほど多くのリクエストを好まないため、キャプチャを処理する必要があります。 このような機会を提供するサービスは膨大です。 base64でcaptchaを使用して投稿リクエストを送信し、待つだけです。







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





結果



人々が私に送ったもののスクリーンショットはここにあります

非表示のテキスト




github

主な質問は未解決のままです-なぜこれをしたのですか? わからない。



All Articles