Esempio n. 1
0
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
Esempio n. 2
0
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"])
Esempio n. 3
0
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"])
Esempio n. 4
0
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"],
        )
Esempio n. 5
0
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
Esempio n. 6
0
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)
Esempio n. 7
0
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