在我生命中的某个时刻,我意识到,为了幸福,我需要在Vkontakte上创建10页自己的副本,同时将其作为朋友添加到我主页的朋友列表中的人们。 有关实施此想法的详细信息-请在目录下。

项目目标
- 在Vkontakte上打印10页
- 从主页复制头像
- 复制主页上的所有帖子
- 复制主页上的所有视频
- 添加到主页的所有组
- 制作完整的机器人图(如每个条目并将每个机器人添加为好友)
- 从预先编译的朋友列表中添加到80个人中的每一个
报名
为了创建页面,我使用了sms-reg.com服务,有关SMS接收服务的更多信息
在这里写得很好。
我们注册所有10个页面,并在account.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:
加为好友
创建一个朋友文件,我们在每一行中编写
id_ #_ ( )
VKontakte允许您每天增加大约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)
验证码旁路
细心的读者已经看到了界线
from captcha import captcha_handler
由于Vkontakte并不总是喜欢这种请求数量,因此您必须处理验证码。 有大量的服务提供了这样的机会。 您只需要在base64中发送带有验证码的发布请求并等待即可。

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主要问题仍然悬而未决-我为什么要这样做? 我不知道