def get_mutual( source_uid: tp.Optional[int] = None, target_uid: tp.Optional[int] = None, target_uids: tp.Optional[tp.List[int]] = None, order: str = "", count: tp.Optional[int] = None, offset: int = 0, progress=None, ) -> tp.Union[tp.List[int], tp.List[MutualFriends]]: """ Получить список идентификаторов общих друзей между парой пользователей. :param source_uid: Идентификатор пользователя, чьи друзья пересекаются с друзьями пользователя с идентификатором target_uid. :param target_uid: Идентификатор пользователя, с которым необходимо искать общих друзей. :param target_uids: Cписок идентификаторов пользователей, с которыми необходимо искать общих друзей. :param order: Порядок, в котором нужно вернуть список общих друзей. :param count: Количество общих друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества общих друзей. :param progress: Callback для отображения прогресса. """ if target_uids is None: params = { "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], "source_uid": source_uid if source_uid is not None else "", "target_uid": target_uid, "order": order, } response = session.get(f"friends.getMutual", params=params) response_json = response.json() if "error" in response_json or not response.ok: raise APIError(response_json["error"]["error_msg"]) return response_json["response"] responses = [] if progress is None: progress = lambda x: x for i in progress(range(math.ceil(len(target_uids) / 100))): params = { "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], "target_uids": ",".join(map(str, target_uids)), "order": order, "count": count if count is not None else "", "offset": offset + i * 100, } response = session.get(f"friends.getMutual", params=params) filee = response.json() if "error" in filee or not response.ok: raise APIError(filee["error"]["error_msg"]) for arg in filee["response"]: responses.append( MutualFriends( id=arg["id"], common_friends=arg["common_friends"], common_count=arg["common_count"], )) if i % 3 == 2: time.sleep(1) return responses
def get_mutual( source_uid: tp.Optional[int] = None, target_uid: tp.Optional[int] = None, target_uids: tp.Optional[tp.List[int]] = None, order: str = "", count: tp.Optional[int] = None, offset: int = 0, progress=tqdm, ) -> tp.Union[tp.List[int], tp.List[MutualFriends]]: """ Получить список идентификаторов общих друзей между парой пользователей. :param source_uid: Идентификатор пользователя, чьи друзья пересекаются с друзьями пользователя с идентификатором target_uid. :param target_uid: Идентификатор пользователя, с которым необходимо искать общих друзей. :param target_uids: Cписок идентификаторов пользователей, с которыми необходимо искать общих друзей. :param order: Порядок, в котором нужно вернуть список общих друзей. :param count: Количество общих друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества общих друзей. :param progress: Callback для отображения прогресса. """ if target_uids: x = [] y = int(len(target_uids) / 100) if int(len(target_uids) / 100) else 1 for t in progress(range(y)): offset = 100 * t r = session.get( f"friends.getMutual?access_token={config.VK_CONFIG['access_token']}" f"&source_uid={source_uid if source_uid else ''}" f"&target_uids={','.join(map(str, target_uids)) if target_uids else ''}&order={order if order else ''}" f"&count={count if count else ''}&offset={offset if offset else 0}" f"&v={config.VK_CONFIG['version']}").json() try: data = r["response"] except KeyError: raise APIError(r["error"]) x += [MutualFriends(**f) for f in data] # type: ignore if t % 3 == 2: time.sleep(1) return x else: r = session.get( f"friends.getMutual?access_token={config.VK_CONFIG['access_token']}" f"&source_uid={source_uid if source_uid else ''}&target_uid={target_uid if target_uid else ''}" f"&order={order if order else ''}" f"&count={count if count else ''}&offset={offset if offset else 0}" f"&v={config.VK_CONFIG['version']}").json() try: return r["response"] except KeyError: raise APIError(r["error"])
def get_friends( user_id: int, count: int = 5000, offset: int = 0, fields: tp.Optional[tp.List[str]] = None, ) -> FriendsResponse: """ Получить список идентификаторов друзей пользователя или расширенную информацию о друзьях пользователя (при использовании параметра fields). :param user_id: Идентификатор пользователя, список друзей для которого нужно получить. :param count: Количество друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества друзей. :param fields: Список полей, которые нужно получить для каждого пользователя. :return: Список идентификаторов друзей пользователя или список пользователей. """ response = session.get( "friends.get", params={ "user_id": user_id, "count": count, "offset": offset, "fields": fields, "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], }, ).json()["response"] return FriendsResponse(count=response["count"], items=response["items"])
def get_friends( user_id: int, count: int = 5000, offset: int = 0, fields: tp.Optional[tp.List[str]] = None, ) -> FriendsResponse: """ Получить список идентификаторов друзей пользователя или расширенную информацию о друзьях пользователя (при использовании параметра fields). :param user_id: Идентификатор пользователя, список друзей для которого нужно получить. :param count: Количество друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества друзей. :param fields: Список полей, которые нужно получить для каждого пользователя. :return: Список идентификаторов друзей пользователя или список пользователей. """ user_data = { "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], "count": count, "user_id": user_id if user_id is not None else "", "fields": ",".join(fields) if fields is not None else "", "offset": offset, } response = session.get("friends.get", params=user_data) if "error" in response.json() or not response.ok: raise APIError(response.json()["error"]["error_msg"]) else: return FriendsResponse( count=response.json()["response"]["count"], items=response.json()["response"]["items"], )
def get_mutual( source_uid: tp.Optional[int] = None, target_uid: tp.Optional[int] = None, target_uids: tp.Optional[tp.List[int]] = None, order: str = "", count: tp.Optional[int] = None, offset: int = 0, progress=None, ) -> tp.Union[tp.List[int], tp.List[MutualFriends]]: """ Получить список идентификаторов общих друзей между парой пользователей. :param source_uid: Идентификатор пользователя, чьи друзья пересекаются с друзьями пользователя с идентификатором target_uid. :param target_uid: Идентификатор пользователя, с которым необходимо искать общих друзей. :param target_uids: Cписок идентификаторов пользователей, с которыми необходимо искать общих друзей. :param order: Порядок, в котором нужно вернуть список общих друзей. :param count: Количество общих друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества общих друзей. :param progress: Callback для отображения прогресса. """ if not target_uids: if not target_uid: raise Exception target_uids = [target_uid] responses = [] if progress: row = progress(range(math.ceil(len(target_uids) / 100))) else: row = range(math.ceil(len(target_uids) / 100)) for n in row: params = { "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], "target_uid": target_uid, "source_uid": source_uid, "target_uids": ", ".join(map(str, target_uids)), "order": order, "count": count, "offset": offset, } response = session.get(f"friends.getMutual", params=params) if response.status_code != 200: raise exceptions.APIError offset += 100 if not isinstance(response.json()["response"], list): response.append( # type: ignore MutualFriends( id=response["response"]["id"], # type: ignore common_friends=response["response"] ["common_friends"], # type: ignore common_count=response["response"] ["common_count"], # type: ignore )) else: responses.extend(response.json()["response"]) time.sleep(1) return responses
def get_friends( user_id: int, count: int = 5000, offset: int = 0, fields: tp.Optional[tp.List[str]] = None, ) -> FriendsResponse: """ Получить список идентификаторов друзей пользователя или расширенную информацию о друзьях пользователя (при использовании параметра fields). :param user_id: Идентификатор пользователя, список друзей для которого нужно получить. :param count: Количество друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества друзей. :param fields: Список полей, которые нужно получить для каждого пользователя. :return: Список идентификаторов друзей пользователя или список пользователей. """ res = session.get( f"friends.get?access_token={config.VK_CONFIG['access_token']}&user_id={user_id}" f"&fields={','.join(fields) if fields else ''}&v={config.VK_CONFIG['version']}" f"&offset={offset}&count={count}").json()["response"] return FriendsResponse(**res)
def get_mutual( source_uid: tp.Optional[int] = None, target_uid: tp.Optional[int] = None, target_uids: tp.Optional[tp.List[int]] = None, # type: ignore order: str = "", count: tp.Optional[int] = None, offset: int = 0, progress=None, ) -> tp.Union[tp.List[int], tp.List[MutualFriends]]: """ Получить список идентификаторов общих друзей между парой пользователей. :param source_uid: Идентификатор пользователя, чьи друзья пересекаются с друзьями пользователя с идентификатором target_uid. :param target_uid: Идентификатор пользователя, с которым необходимо искать общих друзей. :param target_uids: Cписок идентификаторов пользователей, с которыми необходимо искать общих друзей. :param order: Порядок, в котором нужно вернуть список общих друзей. :param count: Количество общих друзей, которое нужно вернуть. :param offset: Смещение, необходимое для выборки определенного подмножества общих друзей. :param progress: Callback для отображения прогресса. """ if target_uid: return session.get( "friends.getMutual", params={ "source_uid": source_uid, "target_uid": target_uid, "order": order, "count": count, "offset": offset, "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], }, ).json()["response"] result: tp.List[MutualFriends] = [] range_ = range(0, len(target_uids), 100) # type: ignore if progress is not None: range_ = progress(range_) for i in range_: response = session.get( "friends.getMutual", params={ "source_uid": source_uid, "target_uids": ",".join([str(i) for i in target_uids[i:i + 100]]), # type: ignore "order": order, "count": count, "offset": offset + i, "access_token": config.VK_CONFIG["access_token"], "v": config.VK_CONFIG["version"], }, ).json()["response"] result.extend( MutualFriends( id=data["id"], common_friends=data["common_friends"], common_count=data["common_count"], ) for data in response) time.sleep(0.5) return result