• XSS.stack #1 – первый литературный журнал от юзеров форума

VK Friend scraper

You can use VK API with Python:

Python:
# возвращает массив объектов друзей
    def friends(self, api):
        user_friends = api.friends.get(user_id=self.id, order='hints') # возвращает в том порядке, как расположены в разделе Мои
        return user_friends

    # возвращает количество друзей
    def friends_count(self, api):
        user_friends = User.friends(self, api)
        friends_count = len(user_friends)
        return friends_count
 
You can use VK API with Python:

Python:
# возвращает массив объектов друзей
    def friends(self, api):
        user_friends = api.friends.get(user_id=self.id, order='hints') # возвращает в том порядке, как расположены в разделе Мои
        return user_friends

    # возвращает количество друзей
    def friends_count(self, api):
        user_friends = User.friends(self, api)
        friends_count = len(user_friends)
        return friends_count

Does this require an account?
 
Да простят меня люди программирующие на питоне ?

Python:
import requests, re, time, traceback
from string import ascii_letters

input_link = input('User link or id: ')
download = input('Do you want to download friends list? (y/n) : ').lower()

class GetVK(object):
    def __init__(self, input_user_link=input_link):
        self.version = 5.126
        self.token_vk = 'YOUR VK TOKEN'
        self.input_user_link = input_user_link
        self.user_id = self.getNumId()
        self.user_name = self.getUserName()
        self.friend_ids = self.getFriendIds()
        self.friends_info = self.getFriendsInfo()

        self.friends_list = []

    def main(self):
        start = time.time()
        print(f'Target: {self.user_name}, parse started...')
        self.createFile()
        end = time.time()
        print(f'Done, time: {end - start}')

    def validate(self):
        return any(map(lambda c: c in ascii_letters, self.input_user_link))

    def getNumId(self):
        if re.search(r"\bcom/\b", self.input_user_link):
            if '.com/id' in self.input_user_link:
                self.input_user_link = self.input_user_link.split('.com/id')[1]
            else:
                self.input_user_link = self.input_user_link.split('.com/')[1]

        if self.validate():
            response = requests.get("https://api.vk.com/method/utils.resolveScreenName?",
                                    params={
                                        "screen_name": self.input_user_link,
                                        "access_token": self.token_vk,
                                        "v": self.version,
                                    })
            user_id = response.json()["response"]["object_id"]
        else:
            user_id = self.input_user_link
        return user_id

    def getUserName(self):
        response = requests.get("https://api.vk.com/method/users.get?",
                                params={
                                    "access_token": self.token_vk,
                                    "v": self.version,
                                    "user_id": self.user_id
                                })

        fName_data = response.json()["response"][0]['first_name']
        lName_data = response.json()["response"][0]['last_name']
        return fName_data + " " + lName_data

    def getFriendIds(self):
        response = requests.get("https://api.vk.com/method/friends.get?",
                                params={
                                    "access_token": self.token_vk,
                                    "v": self.version,
                                    "user_id": self.user_id
                                })
        return response.json()["response"]["items"]

    def getFriendsInfo(self):
        response_name = requests.get(f"https://api.vk.com/method/friends.get?",
                                     params={
                                         'user_id': self.user_id,
                                         'access_token': self.token_vk,
                                         'v': self.version,
                                         'fields': 'nick'
                                     })
        return response_name.json()['response']['items']

    def createFile(self):
        if download == 'y':
            file_name = f"{self.user_name}.txt"
            file = open(file_name, "w", encoding='utf-8')

            for i in range(len(self.friend_ids)):
                fName_data_in = self.friends_info[i]['first_name']
                lName_data_in = self.friends_info[i]['last_name']
                user_name_in = f'{fName_data_in} {lName_data_in}'
                file.write(f"vk.com/id{str(self.friend_ids[i])} | {str(user_name_in)}\n")

            file.close()
        else:
            for i in range(len(self.friend_ids)):
                fName_data_in = self.friends_info[i]['first_name']
                lName_data_in = self.friends_info[i]['last_name']
                user_name_in = f'{fName_data_in} {lName_data_in}'
                self.friends_list.append(f"vk.com/id{str(self.friend_ids[i])} | {str(user_name_in)}\n")

            print('\n'.join(self.friends_list))
            self.friends_list.clear()


if __name__ == '__main__':
    try:
        getvk = GetVK().main()
    except Exception:
        trace = traceback.format_exc()
        if 'response.json()["response"]["items"]' in trace or 'list index out of range' in trace:
            print('User account is wrong to get friends list')
        elif 'response.json()["response"]["object_id"]' in trace:
            print('Invalid user_ID')
        else:
            print(trace)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх