def fetch_likes(self, item, change, shares=False): ''' Возвращает список пользователей, совершивших действие "поставил лайк" пользователей для item. change -- [<начало списка лайков>, <конец списка лайков>] shares -- если True, то обрабатывает пользователей, которые сделали репост объекта ''' sequence = GroupSnapshoter.create_requests_sequence( change[0], change[1], GroupSnapshoter.LIKES_COUNT ) retval = [] for offset, count in sequence: try: likes = self.api.likes.getList( type=item.type, owner_id=item.owner, item_id=item.data.internal_id, offset=offset, count=count, filter='likes' if not shares else 'copies' ) retval.extend(likes['users']) except APIError: continue return retval
def fetch_comments(self, item, change): ''' Возвращает список комментариев для item. change -- [<начало списка лайков>, <конец списка лайков>] ''' if item.type == 'post': sequence = GroupSnapshoter.create_requests_sequence( change[0], change[1], GroupSnapshoter.WALL_COUNT ) get = lambda offset, count: self.api.wall.getComments( owner_id=item.owner, post_id=item.data.internal_id, offset=offset, count=count )[1:] elif item.type == 'topic': sequence = GroupSnapshoter.create_requests_sequence( change[0], change[1], GroupSnapshoter.BOARD_COMMENT_COUNT ) get = lambda offset, count: self.board.get_comments( topic_id=item.data.internal_id, offset=offset, ) elif item.type == 'photo': sequence = GroupSnapshoter.create_requests_sequence( change[0], change[1], GroupSnapshoter.PHOTOS_COUNT ) get = lambda offset, count: self.api.photos.getComments( owner_id=item.owner, pid=item.data.internal_id, offset=offset, count=count )[1:] elif item.type == 'video': sequence = GroupSnapshoter.create_requests_sequence( change[0], change[1], GroupSnapshoter.VIDEOS_COUNT ) get = lambda offset, count: self.api.video.getComments( owner_id=item.owner, vid=item.data.internal_id, offset=offset, count=count )[1:] retval = [] for offset, count in sequence: try: comments = get(offset, count) except APIError: continue for comment in comments: if 'uid' in comment: comment['from_id'] = comment['uid'] if 'message' in comment: comment['text'] = comment['message'] if isinstance(comment['date'], basestring) or isinstance(comment['date'], int): try: comment['date'] = date.fromtimestamp(int(comment['date'])) except (ValueError, KeyError): comment['date'] = None retval.extend(comments) return retval