VK API на Python: часть 2, узнаем, что лайкал пользователь

МЕНЮ


Искусственный интеллект. Новости
Поиск
Регистрация на сайте
Сбор средств на аренду сервера для ai-news

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематика

Авторизация



RSS


RSS новости

Новостная лента форума ailab.ru


В этой части туториала по VK API мы рассмотрим возможность следить за пользователем, а точнее, узнаем как определить что лайкал владелец профиля вконтакте.

Первая часть

Логинимся

Для работы нам потребуется все тот же набор из первой части.

1

2

3

4

5

6

7

login=''

password=''

vk_id='ID_ВАШЕГО_ПРИЛОЖЕНИЯ'

session=vk.AuthSession(app_id=vk_id,user_login=login,user_password=password)

vkapi=vk.API(session)

Получаем ленту пользователя

В качестве входных данных будет выступать ссылка на профиль пользователя. Конкретно, нам понадобится цифровой id, который не всегда в ней указан, ведь многие используют возможность сделать ссылку на профиль на латинице. Поэтому с помощью метода utils.resolveScreenName мы получаем что нам нужно.

1

2

3

4

5

6

7

8

9

defgetUserId(link):

id=link

if'vk.com/'inlink:#  проверяем эту ссылку

id=link.split('/')[-1]# если да, то получаем его последнюю часть

ifnotid.replace('id','').isdigit():# если в нем после отсечения 'id' сами цифры - это и есть id

id=vkapi.utils.resolveScreenName(screen_name=id)['object_id']# если нет, получаем id с помощью метода API

else:

id=id.replace('id','')

returnint(id)

Для начала получим список подписок пользователя с помощью метода users.getSubscriptions. С использованием этого списка формируем его ленту новостей методом newsfeed.get Затем, проходим по каждому посту и проверяем лайкал ли его наш пользователь с помощью метода likes.isLiked.

Так как за один запрос можно получить только до 100 постов, мы будем делать несколько запросов:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

defgetLikes(user_id,count):# count это количество запросов (и количество постов = 100 * count постов)

subscriptions_list=vkapi.users.getSubscriptions(user_id=user_id,extended=0)['groups']['items']# подписки пользователя

groups_list=['-'+str(x)forxinsubscriptions_list]# формируем список id, который нужно передать в следующий метод

posts={}

newsfeed=vkapi.newsfeed.get(filters='post',source_ids=', '.join(groups_list),count=100,timeout=10)# формируем ленту новостей

posts.update({x['post_id']:x['source_id']forxinnewsfeed['items']})# добавляем посты в словарь в формате id_поста: id_группы

next_from=newsfeed['next_from']# нужно для получения следующей партии

ifcount!=1:# если требуется более одного запроса - делаем остаток в цикле

forcinrange(count-1):

newsfeed=vkapi.newsfeed.get(filters='post',source_ids=', '.join(groups_list),count=100,timeout=10,start_from=next_from)

posts.update({x['post_id']:x['source_id']forxinnewsfeed['items']})

next_from=newsfeed[next_from']

Определяем понравившиеся посты в ленте

Теперь у нас есть набор с постами из ленты новостей. Осталось только пройтись по нему и проверить что лайкал пользователь:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

...

liked_posts=[]

print('Лайкнутые посты:')

forpost inposts.items():

try:

isLiked=vkapi.likes.isLiked(user_id=user_id,item_id=post[0],type="post",owner_id=post[1],timeout=5)['liked']

exceptException:

print("ERROR! "+'vk.com/wall{}_{}'.format(post[1],post[0]))

isLiked=0

ifisLiked:

liked_posts.append('vk.com/wall{}_{}'.format(post[1],post[0]))

print('vk.com/wall{}_{}'.format(post[1],post[0]))

sleep(0.25)

returnliked_posts

Здесь должно быть просто. Если вас интересует зачем мы приостанавливали выполнение на 0.25 секунды каждую итерацию, так это потому, что likes.isLiked выполняется довольно быстро и чтобы не делать слишком много запросов (VK такое не любит) приостанавливаем выполнение.

Ну и, наверное, самое интересное: давайте испытаем скрипт. Выбирайте самого интересного знакомого (или незнакомца) и в разведку.

1

2

3

user_id=input('Введите id пользователя или ссылку на страницу: ')

user_id=getUserId(user_id)

getLikes(user_id,5)# Сканируем 5 * 100 = 500 постов

Выходные данные:

1

2

3

4

5

6

7

8

?python3 main.py

Введитеidпользователяилиссылкунастраницу:http://vk.com/id***

Лайкнутыпосты:

vk.com/wall-20629724_803918

vk.com/wall-30598666_692030

vk.com/wall-20629724_803740

vk.com/wall-30598666_691833

vk.com/wall-20629724_803582

На этом вторая часть подошла к концу. В следующей рассмотрим варианты автоматизации общения вконтакте путем создания простого чат-бота.


Источник: proglib.io

Комментарии: