def add(self, owner_id, item_id_obj, type_obj='photo'): """ Добавляет указанный объект в список Мне нравится текущего пользователя. type: post — запись на стене пользователя или группы; comment — комментарий к записи на стене; photo — фотография; audio — аудиозапись; video — видеозапись; note — заметка; photo_comment — комментарий к фотографии; video_comment — комментарий к видеозаписи; topic_comment — комментарий в обсуждении; В случае успеха возвращает объект с полем likes, в котором находится текущее количество пользователей, которые добавили данный объект в свой список Мне нравится. """ url = '{api}likes.add'.format(api=self.api_url) params = { 'type': type_obj, 'owner_id': owner_id, 'item_id': item_id_obj, 'access_token': self.token, 'v': self.api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Likes.add" FAILED. {text}'.format( text=res.response.text) log_info('Лайк проставлен. Пользователь: id{user_id}.'.format( user_id=owner_id)) response = get_value_from_json(res.response.json(), 'response') return get_value_from_json(response, 'likes')
def is_liked(self, user_id, item_id_obj, type_obj='photo'): """ Проверяет, находится ли объект в списке Мне нравится заданного пользователя. type: post — запись на стене пользователя или группы; comment — комментарий к записи на стене; photo — фотография; audio — аудиозапись; video — видеозапись; note — заметка; photo_comment — комментарий к фотографии; video_comment — комментарий к видеозаписи; topic_comment — комментарий в обсуждении; В случае успеха возвращает объект с полями: liked — есть ли отметка «Мне нравится» от текущего пользователя (0 — отметки нет, 1 — отметка есть); copied — сделан ли репост текущим пользователем (0 — не сделан, 1 — сделан). """ url = '{api}likes.isLiked'.format(api=self.api_url) params = { 'type': type_obj, 'owner_id': user_id, 'item_id': item_id_obj, 'access_token': self.token, 'v': self.api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Likes.isLiked" FAILED. {text}'.format( text=res.response.text) response = get_value_from_json(res.response.json(), 'response') return get_value_from_json(response, 'liked'), get_value_from_json( response, 'copied')
def search(self, count, city, sex, age_from, age_to, offset=None, status=None, birth_day=None, birth_month=None): """ Возвращает список пользователей в соответствии с заданным критерием поиска. После успешного выполнения возвращает объект, содержащий число результатов в поле count и массив объектов, описывающих пользователей в поле items. Параметры: https://vk.com/dev/users.search :return (list<user>) """ url = '{api}users.search'.format(api=self.api_url) params = { 'city': city, 'sort': '0', 'offset': offset, 'count': count, 'fields': 'can_write_private_message, last_seen, has_photo, photo_id, blacklisted, friend_status', 'sex': sex, 'status': status, 'age_from': age_from, 'age_to': age_to, 'birth_day': birth_day, 'birth_month': birth_month, 'access_token': self.token, 'v': self.api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Users.search" FAILED. {text}'.format( text=res.response.text) response = get_value_from_json(res.response.json(), 'response') users_list = get_value_from_json(response, 'items') user_model_list = [] for user in users_list: if not (UsersApi.is_blacklisted(user)) and (user['id'] not in [ 11225104, 150437158 ]): user_model = User(user) user_model_list.append(user_model) self.logger.log_info(u'Всего найдено пользователей: {count}.'.format( count=len(user_model_list))) return user_model_list
def send(self, user_model, text): """ Отправляет сообщение. После успешного выполнения возвращает идентификатор отправленного сообщения. """ url = '{api}messages.send'.format(api=self.api_url) params = { 'user_id': user_model.user_id, 'access_token': self.token, 'message': '{first_name}, {message}'.format(first_name=user_model.first_name, message=text), 'v': self.api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Messages.send" FAILED. {text}'.format( text=res.response.text) self.logger.log_info( ' Сообщение отправлено. Пользователь: id{user_id}, {first_name} {last_name}.' .format(user_id=user_model.user_id, first_name=user_model.first_name, last_name=user_model.last_name)) return get_value_from_json(res.response.json(), 'response')
def get(self, user_id): url = '{api}users.get'.format(api=self.api_url) params = { 'user_ids': user_id, 'fields': 'can_write_private_message, last_seen, has_photo, photo_id, blacklisted, friend_status', 'access_token': self.token, 'v': self.api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Users.get" FAILED. {text}'.format( text=res.response.text) response = get_value_from_json(res.response.json(), 'response')[0] if get_value_from_json(response, 'blacklisted') == 0: return User(response)
def __init__(self, response): self.blacklisted = get_value_from_json(response, 'blacklisted') self.user_id = get_value_from_json(response, 'id') self.first_name = get_value_from_json(response, 'first_name') self.last_name = get_value_from_json(response, 'last_name') self.friend_status = get_value_from_json(response, 'friend_status') self.can_write_private_message = get_value_from_json( response, 'can_write_private_message') self.has_photo = get_value_from_json(response, 'has_photo') self.last_seen = get_value_from_json( get_value_from_json(response, 'last_seen'), 'time') try: if self.has_photo == 1: self.photo_id = get_value_from_json(response, 'photo_id') else: self.photo_id = None except KeyError: self.has_photo = 0
def get(self, user_id=None): """ """ url = '{api}friends.get'.format(api=api_url) params = { 'user_id': user_id, 'fields': 'has_photo, photo_id, can_write_private_message, last_seen', 'access_token': self.token, 'v': api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Friends.add" FAILED. {text}'.format( text=res.response.text) response = get_value_from_json(res.response.json(), 'response') friends_list = get_value_from_json(response, 'items') friends_model_list = [] for friend in friends_list: friend_model = User(friend) friends_model_list.append(friend_model) return friends_model_list
def are_friends(self, user_ids): """ Возвращает информацию о том, добавлен ли текущий пользователь в друзья у указанных пользователей. Также возвращает информацию о наличии исходящей или входящей заявки в друзья (подписки). После успешного выполнения возвращает массив объектов status, каждый из которых содержит следующие поля: friend_status — статус дружбы с пользователем: 0 – пользователь не является другом, 1 – отправлена заявка/подписка пользователю, 2 – имеется входящая заявка/подписка от пользователя, 3 – пользователь является другом; """ url = "https://api.vk.com/method/friends.areFriends" params = { 'user_ids': user_ids, 'access_token': self.token, 'v': '5.64' } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Friends.are_firends" FAILED. {text}'.format( text=res.response.text) response = get_value_from_json(res.response.json(), 'response')[0] return get_value_from_json(response, 'friend_status')
def add(self, user_id, text=None): """ Одобряет или создает заявку на добавление в друзья. Если идентификатор выбранного пользователя присутствует в списке заявок на добавление в друзья, полученном методом friends.getRequests, то одобряет заявку на добавление и добавляет выбранного пользователя в друзья к текущему пользователю. В противном случае создает заявку на добавление в друзья текущего пользователя к выбранному пользователю. После успешного выполнения возвращает одно из следующих значений: 1 — заявка на добавление данного пользователя в друзья отправлена; 2 — заявка на добавление в друзья от данного пользователя одобрена; 4 — повторная отправка заявки. """ url = '{api}friends.add'.format(api=api_url) params = { 'user_id': user_id, 'access_token': self.token, 'text': text, 'v': api_version } res = HttpLib(url=url, params=params).send_get() status_code = res.response.status_code assert status_code == status_code_200, '"Friends.add" FAILED. {text}'.format( text=res.response.text) return get_value_from_json(res.response.json(), 'response')
def is_blacklisted(user_json): if get_value_from_json(user_json, 'blacklisted') == 1: return True else: return False