1
+ # Intersection of sets of vk links for Дым
2
+
3
+ # Некоторые настройки
4
+
5
+ vk_login , vk_pass = 'Логин от Вк' , 'Пароль от Вк'
6
+ output_vk_msg = True # Вывод в виде сообщения вк
7
+ output_file = True # Вывод в виде файла
8
+
9
+ # Подключение вк. Если интерпретатор ругается на эту строку, нужно выполнить в консоли следующее: pip3 install vk_api
10
+
11
+ import vk_api
12
+
13
+ # Авторизация
14
+ vk_session = vk_api .VkApi (vk_login , vk_pass )
15
+ vk_session .auth ()
16
+ vk = vk_session .get_api ()
17
+ me = vk_session .token ['user_id' ]
18
+
19
+ # Функция, преобразования текстовой ссылки в id (число)
20
+ def link_to_id (link ):
21
+ link .strip () # Убираем имеющиеся пробелы в начале и в конце строки, есл те имеются
22
+ link = link .replace ('https://' , '' ).replace ('http://' , '' ) # Убираем протокол из url, если он имеется
23
+ link = link .replace ('www.' , '' ) # Убираем www, если оно имеется
24
+ link = link .replace ('vk.com/' , '' ) # Убираем vk.com/, если оно есть
25
+ link = link .split ('/' )[0 ] # Разделяем строку по символам "/" и берём первый кусок
26
+ if link == '' : # Если ссылка после этих всех преобразований превратилась в пустую строку - значит ссылка была кривая
27
+ raise Exception ('Неудалось распарсить ссылку на пользователя' )
28
+ try : # Если же всё прошло удачно - пытаемся запросить у вк данные об этом пользователе и вытащить из них ID
29
+ return int (vk .users .get (user_ids = link )[0 ]['id' ])
30
+ except vk_api .ApiError : # Если VK API выдал ошибку, значит пользователь не существует, т.е. например изменил ссылку на свою страницу
31
+ return None
32
+
33
+ # Функция, вытаскивающая из файла список ссылок
34
+ def load_links_list_from_file (fname ):
35
+ with open (fname , "r" ) as links_file :
36
+ return links_file .readlines ()
37
+
38
+ # Функция, превращающая список ссылок в множество айдишников
39
+ def links_list_to_ids_set (links ):
40
+ return set (filter (None , map (link_to_id , links )))
41
+
42
+ # Функция, записывающая список/множество строк в файл (подходит для записи списка ссылок, айдишников и т.п.)
43
+ def save_ids_set_to_file (fname , ids ):
44
+ with open (fname , 'w' ) as f :
45
+ for item in ids :
46
+ f .write ("%s\n " % str (item ))
47
+
48
+ # Пересечение множеств
49
+ def intersect_two_sets (set1 , set2 ):
50
+ return set1 & set2
51
+
52
+ # Преобразование списка айдишников в список ссылок
53
+ def ids_to_links (ids ):
54
+ return ['https://vk.com/id' + str (x ) for x in ids ]
55
+
56
+ # Отправка результата себе вк
57
+ def send_message_to_me (msg ):
58
+ vk .messages .send (peer_id = me , message = '== Результат выполнения скрипта ==\n \n ' + msg )
59
+
60
+ # Преобразование списка или множества в сообщение
61
+ def list_to_msg (list ):
62
+ return '\n ' .join (list )
63
+
64
+
65
+ # Ну и далее сама программа
66
+
67
+ list1 = load_links_list_from_file ('D:\\ list1.txt' )
68
+ list2 = load_links_list_from_file ('D:\\ list2.txt' )
69
+ set1 = links_list_to_ids_set (list1 )
70
+ set2 = links_list_to_ids_set (list2 )
71
+ intersection = intersect_two_sets (set1 , set2 )
72
+ intersected_links = ids_to_links (intersection )
73
+ if output_vk_msg :
74
+ msg = list_to_msg (intersected_links )
75
+ send_message_to_me (msg )
76
+ if output_file :
77
+ save_ids_set_to_file ('D:\\ output.txt' , intersection )
0 commit comments