Python Vk
Формулировка задачи:
Привет, помогите разобрать в чем ошибка, нашел интересный скрипт для работы с вк через python, данная программа, смотрит какие посты лайкнул пользователь ссылка на статью(https://proglib.io/p/python-vk-api-2/). Но выскочила ошибка и не могу понять в чем дело
Решение задачи: «Python Vk»
textual
Листинг программы
# -*- encoding: utf-8 -*- from __future__ import unicode_literals import pprint from urllib.parse import parse_qs import webbrowser import pickle from datetime import datetime, timedelta import vk import time # id of vk.com application APP_ID = 'app_id' # file, where auth data is saved AUTH_FILE = '.auth_data' # chars to exclude from filename FORBIDDEN_CHARS = '/\\\?%*:|"<>!' def get_saved_auth_params(): access_token = None user_id = None try: with open(AUTH_FILE, 'rb') as pkl_file: token = pickle.load(pkl_file) expires = pickle.load(pkl_file) uid = pickle.load(pkl_file) if datetime.now() < expires: access_token = token user_id = uid except IOError: pass return access_token, user_id def save_auth_params(access_token, expires_in, user_id): expires = datetime.now() + timedelta(seconds=int(expires_in)) with open(AUTH_FILE, 'wb') as output: pickle.dump(access_token, output) pickle.dump(expires, output) pickle.dump(user_id, output) def get_auth_params(): auth_url = ("https://oauth.vk.com/authorize?client_id={app_id}" "&scope=wall,messages&redirect_uri=http://oauth.vk.com/blank.html" "&display=page&response_type=token".format(app_id=APP_ID)) webbrowser.open_new_tab(auth_url) redirected_url = input("Paste here url you were redirected:\n") aup = parse_qs(redirected_url) aup['access_token'] = aup.pop( 'https://oauth.vk.com/blank.html#access_token') save_auth_params(aup['access_token'][0], aup['expires_in'][0], aup['user_id'][0]) return aup['access_token'][0], aup['user_id'][0] def get_api(access_token): session = vk.Session(access_token=access_token) return 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, api): import time # подписки пользователя subscriptions_list = api.users.getSubscriptions(user_id=user_id,extended=0)['groups']['items'] # формируем список id, который нужно передать в следующий метод groups_list = ['-' + str(x) for x in subscriptions_list] posts = {} # формируем ленту новостей newsfeed = api.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['start_from'] kwargs = { 'from': next_from, 'filters': 'post', 'source_ids': ', '.join(groups_list), 'count': 100, 'timeout': 10 } newsfeed = api.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 = api.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(0.25) return liked_posts def main(): access_token, _ = get_saved_auth_params() if not access_token or not _: access_token, _ = get_auth_params() print(access_token) api = get_api(access_token) user_id = input('Введите id пользователя или ссылку на страницу: ') user_id = getUserId(user_id) getLikes(user_id, 3, api) # Сканируем 5 * 100 = 500 постов main()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д