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

МЕНЮ


Новости ИИ
Поиск

ТЕМЫ


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

АРХИВ


Июнь 2017
Май 2017
Апрель 2017
Март 2017
Февраль 2017
Январь 2017
Декабрь 2016
Ноябрь 2016
Октябрь 2016
Сентябрь 2016
Август 2016
Июль 2016
Июнь 2016
Май 2016
Апрель 2016
Март 2016
Февраль 2016
Январь 2016
0000

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