Advertisement
Guest User

newfile.py

a guest
Apr 15th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.90 KB | None | 0 0
  1. import vk
  2. from time import sleep
  3. from re import sub, findall
  4. from getpass import getpass
  5. from csv import writer, QUOTE_ALL
  6.  
  7. def main():
  8.     while True:
  9.         login = input('E-mail: ')
  10.         password = getpass('Password: ')
  11.         try:
  12.             vk_user = User(login, password)
  13.             api = vk_user.auth()
  14.             print('Авторизация выполнена успешно!')
  15.             break
  16.         except Exception:
  17.             print('Вы ввели неверные данные, пожалуйста, повторите попытку.')
  18.     friends = vk_user.friends(api)
  19.     friends_count = vk_user.friends_count(api)
  20.     print('Найдено {} друзей.'.format(friends_count))
  21.     print('Идет выборка мобильных номеров...')
  22.     with Timer() as p:
  23.         users_phones = find_correct_phone_numbers(api, friends, friends_count)
  24.     print('Выборка окончена. Сохранение...')
  25.     saveCSV(users_phones, 'vk_mob.csv')
  26.     print('Данные успешно сохранены.')
  27. if __name__ == '__main__':
  28.     main()
  29.    
  30. class User(object):
  31.     """VK User"""
  32.     def __init__(self, login, password):
  33.         self.login = 380671229633
  34.         self.password = wwwwww_1+1
  35.         self.id = '19246211'
  36.     # аторизирует юзера
  37.     def auth(self):
  38.         session = vk.AuthSession(app_id='6945454', user_login=self.login, user_password=self.password)
  39.         api = vk.API(session)
  40.         return api
  41.     # возвращает массив объектов друзей
  42.     def friends(self, api):
  43.     # возвращает в том порядке, в котором расположены в разделе Мои
  44.         user_friends = api.friends.get(user_id=self.id, order='hints')
  45.         return user_friends
  46.     # возвращает количество друзей
  47.     def friends_count(self, api):
  48.         user_friends = User.friends(self, api)
  49.         friends_count = len(user_friends)
  50.         return friends_count
  51.     # возвращает массив данных о юзере
  52.     def info(self, api):
  53.         user = api.users.get(user_id=self.id)
  54.         return user[0]
  55.        
  56.     def norm_mob(str):
  57.     if len(str) !='':
  58.         norm_mob = sub(r'(\s+)?[+]?[-]?', '', str)
  59.         # проверяем строку на наличие в ней только необходимых символов
  60.         right_mob = findall(r'[\d]', norm_mob)
  61.         # если количество знаков в двух строках совпадает, значит это номер телефона
  62.         if (len(right_mob) == len(norm_mob)) and (len(norm_mob) >= 10):
  63.             rev_norm_mob = norm_mob[::-1]
  64.             norm_mob = rev_norm_mob[0:10]
  65.             if norm_mob[::-1][0] == '0':
  66.                 return norm_mob[::-1]
  67.     else:
  68.         return False
  69.        
  70.         def find_correct_phone_numbers(api, friends, friends_count):
  71.     users_phones = []
  72.     for i in range(0, friends_count):
  73.         cur_user_id = int(friends[i])
  74.         cur_user = api.users.get(user_id=cur_user_id, fields='contacts')
  75.         try:
  76.             # выбираем номер мобильного телефона
  77.             cur_mob = cur_user[0]['mobile_phone']
  78.         except KeyError:
  79.             sleep(0.3)
  80.             continue
  81.         mob = norm_mob(cur_mob)
  82.         if mob:
  83.             # вставим еще одну строку в наш массив
  84.             users_phones.append({
  85.                 'user_name': '{} {}'.format(cur_user[0]['first_name'], cur_user[0]['last_name']),
  86.                 'user_phone': '8{}'.format(mob)
  87.                 })
  88.         sleep(0.4)
  89.     return users_phones
  90.    
  91.     def saveCSV(data, path):
  92.     with open(path, 'w') as csvfile:
  93.         my_writer = writer(csvfile, delimiter=' ', quotechar='"', quoting=QUOTE_ALL)
  94.         my_writer.writerow(('Имя пользователя', 'Номер моб. телефона'))
  95.         for item in data:
  96.             try:
  97.                 my_writer.writerow((item['user_name'], item['user_phone']))
  98.             except Exception:
  99.                 my_writer.writerow(('(Ошибка в кодировке)', item['user_phone']))
  100.                
  101.                 class Timer(object):
  102.     def __enter__(self):
  103.         self._startTime = time()
  104.     def __exit__(self, type, value, traceback):
  105.         howLong = time() - self._startTime
  106.         print("Операция заняла: {:.2f} минут".format(howLong/60))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement