Skip to content

Commit a960de3

Browse files
authored
Upload one of script
Upload one of my scripts, which I wrote for my friend. The task is finding intersections in two lists of links in txt files. Links can be in different format (short name in one file and id in another)
1 parent 4c06412 commit a960de3

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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

Comments
 (0)