Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Вывод постов, которые лайкнул пользователь ВКонтакта

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Пытаюсь задействовать следующий скрипт, возвращающий инфу о лайках пользователя (код отсюда), но что-то не идёт —

Код:
 
import vk
 
## session = vk.AuthSession(app_id='...', user_login='...', user_password='...')
## vkapi = vk.API(session)
 
# нужно создать приложение ВКонтакте, узнать его ID, в redirect_uri указать https://oauth.vk.com/blank.html
# https://oauth.vk.com/authorize?client_id=ID_ВАШЕГО_ПРИЛОЖЕНИЯ&redirect_uri=https://oauth.vk.com/blank.html
# &response_type=token&scope=8194
access_token = "..."
session = vk.Session(access_token=access_token)
vkapi = vk.API(session)
 
def getUserId(link):
    id = link
    if 'vk.com/' in link: #  проверяем эту ссылку
        id = link.split('/')[-1]  # если да, то получаем его последнюю часть
    if not id.replace('id', '').isdigit(): # если в нем после отсечения 'id' сами цифры - это и есть id  
        id = vkapi.utils.resolveScreenName(screen_name=id)['object_id'] # если нет, получаем id с помощью метода API
    else:
        id = id.replace('id', '')
    return int(id)
     
    # count это количество запросов (и количество постов = 100 * count постов)
def getLikes(user_id, cnt, vkapi):
    import time
    # подписки пользователя
    subscriptions_list = vkapi.users.getSubscriptions(user_id=user_id,extended=0)['groups']['items']
    # формируем список id, который нужно передать в следующий метод
    groups_list = ['-' + str(x) for x in subscriptions_list]
    posts = {}
    # формируем ленту новостей
    newsfeed = vkapi.newsfeed.get(
        filters='post',
        source_ids=', '.join(groups_list),
        count=100, timeout=10)
    # добавляем посты в словарь в формате id_поста: id_группы
    posts.update({x['post_id']: x['source_id'] for x in newsfeed['items']})
    # нужно для получения следующей партии
    # если требуется более одного запроса — делаем остаток в цикле
    if cnt != 1:
        for c in range(cnt - 1):
            next_from = newsfeed['new_from']
            kwargs = {
                'from': next_from,
                'filters': 'post',
                'source_ids': ', '.join(groups_list),
                'count': 100,
                'timeout': 10
            }
            newsfeed = vkapi.newsfeed.get(**kwargs)
 
            posts.update({x['post_id']: x['source_id'] for x in newsfeed['items']})
            time.sleep(1)
    liked_posts = []
 
    print('Лайкнутые посты:')
    for post in posts.items():
        try:
            itemID = post[0]
            ownerID = post[1]
            timeOut = 5
            isLiked = vkapi.likes.isLiked(
                user_id=user_id,
                item_id=itemID,
                type='post',
                owner_id=ownerID,
                timeout=timeOut)
        except Exception:
#             print('ERROR! ' + 'vk.com/wall{0}_{1}'.format(post[1], post[0]))
            isLiked = 0
 
        if isLiked:
            liked_posts.append('vk.com/wall{0}_{1}'.format(post[1], post[0]))
            print('vk.com/wall{}_{}'.format(post[1], post[0]))
            time.sleep(1)
    return liked_posts
     
 
user_id = input('Введите id пользователя или ссылку на страницу: ')
user_id = getUserId(user_id)
getLikes(user_id, 5, vkapi) # Сканируем 5 * 100 = 500 постов
 

 
Вместо access_token = "..." (подставлял токен с полными правами) пробовал также следующую конструкцию session = vk.AuthSession(app_id='...', user_login='...', user_password='...') (вписывал нужные значения). Как и писалось в условии для работы скрипта — выполнил из батника команду: pip3 install vk. Её же выполнил в распакованной папке искодников модуля VK для работы c api вконтакте. Скрипт сохранял с расширением ".py"; ; пытался запускать Python35-32 и Python36-32 (в том числе из файла CMD и набрасывая скрипт пайтона на значок программы) — но окно командного интерпретатора мелькает — и всё. В чем может быть дело?

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 16:33 03-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
интерпретатора мелькает — и всё. В чем может быть дело

Открываем консольное окно, запускаем из него, читаем сообщения об ошибке.

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 17:44 03-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Правильно ли понимаю, что ошибка — в установленном модуле VK (о котором шла речь здесь)? — https://i.imgur.com/r7uQta4.jpg

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 02:54 04-04-2018 | Исправлено: D1D1D1D, 02:55 04-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
https://vk.com/dev/errors

Цитата:
8 - Неверный запрос.  
Проверьте синтаксис запроса и список используемых параметров (его можно найти на странице с описанием метода).

там же, в ошибке, явно сказано, что необходимо указывать версию API - https://vk.com/dev/api_requests

Цитата:
V (обязательно) — используемая версия API. Использование этого параметра применяет некоторые изменения в формате ответа различных методов. На текущий момент актуальная версия API — 5.74. Этот параметр следует передавать со всеми запросами. Для сохранения совместимости в существующих приложениях по умолчанию используется версия 3.0.

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 03:01 04-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Спасибо за разъяснения, но обнаружился более эффективный вариант получения лайков через https://vk.com/dev/execute

Код:
 
// https://pastebin.com/GAk35UwY
var userID = 1; // id пользователя
var ownerID = 1; // id группы
var offset = 0;
var count = 10;
var n = 0;
 
var posts = API.wall.get({
    "owner_id":-ownerID,
    "offset":offset,
    "count":count
});
 
var likes = [];
 
do {
    var isLiked = API.likes.isLiked({
      "user_id":userID,
      "type":"post",
      "owner_id":-ownerID,
      "item_id":posts.items[n].id
    });
   
    likes.push(posts.items[n].id);
    likes.push(isLiked.liked);
    n = n + 1;
} while(n < count);
return likes;

Преимущество в том, что за один запрос можно возвращать инфу сразу к нескольким постам.

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 03:53 04-04-2018
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Вывод постов, которые лайкнул пользователь ВКонтакта


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru