# coding: utf-8

"""
    用户全部 API 文档

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

    The version of the OpenAPI document: v1
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501

import warnings
from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
from typing import Any, Dict, List, Optional, Tuple, Union
from typing_extensions import Annotated

from pydantic import Field, StrictBool, StrictFloat, StrictInt, StrictStr
from typing import Optional, Union
from typing_extensions import Annotated
from ZSGF.Client.models.boolean_api_response import BooleanApiResponse
from ZSGF.Client.models.follower_put_model import FollowerPutModel
from ZSGF.Client.models.get_user_profile_result_api_response import GetUserProfileResultApiResponse
from ZSGF.Client.models.user_common_interests_result_api_response import UserCommonInterestsResultApiResponse
from ZSGF.Client.models.user_followers_result_api_response import UserFollowersResultApiResponse
from ZSGF.Client.models.user_friends_near_by_result_api_response import UserFriendsNearByResultApiResponse
from ZSGF.Client.models.user_mutual_followers_result_api_response import UserMutualFollowersResultApiResponse
from ZSGF.Client.models.user_mutual_followings_result_api_response import UserMutualFollowingsResultApiResponse

from ZSGF.Client.api_client import ApiClient, RequestSerialized
from ZSGF.Client.api_response import ApiResponse
from ZSGF.Client.rest import RESTResponseType


class UserFriendsApi:
    """NOTE: This class is auto generated by OpenAPI Generator
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    def __init__(self, api_client=None) -> None:
        if api_client is None:
            api_client = ApiClient.get_default()
        self.api_client = api_client


    @validate_call
    def user_common_interests(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="兴趣标签")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> UserCommonInterestsResultApiResponse:
        """推荐相似兴趣用户

        推荐有共同爱好的用户

        :param app_key: (required)
        :type app_key: str
        :param tag: 兴趣标签
        :type tag: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_common_interests_serialize(
            app_key=app_key,
            tag=tag,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserCommonInterestsResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_common_interests_with_http_info(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="兴趣标签")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[UserCommonInterestsResultApiResponse]:
        """推荐相似兴趣用户

        推荐有共同爱好的用户

        :param app_key: (required)
        :type app_key: str
        :param tag: 兴趣标签
        :type tag: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_common_interests_serialize(
            app_key=app_key,
            tag=tag,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserCommonInterestsResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_common_interests_without_preload_content(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="兴趣标签")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """推荐相似兴趣用户

        推荐有共同爱好的用户

        :param app_key: (required)
        :type app_key: str
        :param tag: 兴趣标签
        :type tag: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_common_interests_serialize(
            app_key=app_key,
            tag=tag,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserCommonInterestsResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_common_interests_serialize(
        self,
        app_key,
        tag,
        skip,
        take,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        if tag is not None:
            
            _query_params.append(('tag', tag))
            
        if skip is not None:
            
            _query_params.append(('skip', skip))
            
        if take is not None:
            
            _query_params.append(('take', take))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/CommonInterests',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_follow_user(
        self,
        user_id: Annotated[StrictInt, Field(description="要关注的用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> BooleanApiResponse:
        """添加关注

        关注指定用户

        :param user_id: 要关注的用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_follow_user_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_follow_user_with_http_info(
        self,
        user_id: Annotated[StrictInt, Field(description="要关注的用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[BooleanApiResponse]:
        """添加关注

        关注指定用户

        :param user_id: 要关注的用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_follow_user_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_follow_user_without_preload_content(
        self,
        user_id: Annotated[StrictInt, Field(description="要关注的用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """添加关注

        关注指定用户

        :param user_id: 要关注的用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_follow_user_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_follow_user_serialize(
        self,
        user_id,
        app_key,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if user_id is not None:
            _path_params['userId'] = user_id
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/UserFriends/{appKey}/Follower/{userId}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_follower_put(
        self,
        id: Annotated[StrictInt, Field(description="粉丝ID")],
        app_key: StrictStr,
        follower_put_model: Annotated[Optional[FollowerPutModel], Field(description="更新粉丝的请求参数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> BooleanApiResponse:
        """刷新粉丝数据

        根据粉丝ID更新粉丝信息

        :param id: 粉丝ID (required)
        :type id: int
        :param app_key: (required)
        :type app_key: str
        :param follower_put_model: 更新粉丝的请求参数
        :type follower_put_model: FollowerPutModel
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_follower_put_serialize(
            id=id,
            app_key=app_key,
            follower_put_model=follower_put_model,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_follower_put_with_http_info(
        self,
        id: Annotated[StrictInt, Field(description="粉丝ID")],
        app_key: StrictStr,
        follower_put_model: Annotated[Optional[FollowerPutModel], Field(description="更新粉丝的请求参数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[BooleanApiResponse]:
        """刷新粉丝数据

        根据粉丝ID更新粉丝信息

        :param id: 粉丝ID (required)
        :type id: int
        :param app_key: (required)
        :type app_key: str
        :param follower_put_model: 更新粉丝的请求参数
        :type follower_put_model: FollowerPutModel
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_follower_put_serialize(
            id=id,
            app_key=app_key,
            follower_put_model=follower_put_model,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_follower_put_without_preload_content(
        self,
        id: Annotated[StrictInt, Field(description="粉丝ID")],
        app_key: StrictStr,
        follower_put_model: Annotated[Optional[FollowerPutModel], Field(description="更新粉丝的请求参数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """刷新粉丝数据

        根据粉丝ID更新粉丝信息

        :param id: 粉丝ID (required)
        :type id: int
        :param app_key: (required)
        :type app_key: str
        :param follower_put_model: 更新粉丝的请求参数
        :type follower_put_model: FollowerPutModel
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_follower_put_serialize(
            id=id,
            app_key=app_key,
            follower_put_model=follower_put_model,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_follower_put_serialize(
        self,
        id,
        app_key,
        follower_put_model,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if id is not None:
            _path_params['id'] = id
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if follower_put_model is not None:
            _body_params = follower_put_model


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )

        # set the HTTP header `Content-Type`
        if _content_type:
            _header_params['Content-Type'] = _content_type
        else:
            _default_content_type = (
                self.api_client.select_header_content_type(
                    [
                        'application/json-patch+json', 
                        'application/json', 
                        'text/json', 
                        'application/*+json'
                    ]
                )
            )
            if _default_content_type is not None:
                _header_params['Content-Type'] = _default_content_type

        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='PUT',
            resource_path='/UserFriends/{appKey}/Follower/{id}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_followers(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="标签")] = None,
        status: Annotated[Optional[StrictStr], Field(description="状态")] = None,
        target_user_id: Annotated[Optional[StrictInt], Field(description="指定用户的粉丝")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> UserFollowersResultApiResponse:
        """获取粉丝列表

        根据条件获取我的粉丝列表

        :param app_key: (required)
        :type app_key: str
        :param tag: 标签
        :type tag: str
        :param status: 状态
        :type status: str
        :param target_user_id: 指定用户的粉丝
        :type target_user_id: int
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_followers_serialize(
            app_key=app_key,
            tag=tag,
            status=status,
            target_user_id=target_user_id,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserFollowersResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_followers_with_http_info(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="标签")] = None,
        status: Annotated[Optional[StrictStr], Field(description="状态")] = None,
        target_user_id: Annotated[Optional[StrictInt], Field(description="指定用户的粉丝")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[UserFollowersResultApiResponse]:
        """获取粉丝列表

        根据条件获取我的粉丝列表

        :param app_key: (required)
        :type app_key: str
        :param tag: 标签
        :type tag: str
        :param status: 状态
        :type status: str
        :param target_user_id: 指定用户的粉丝
        :type target_user_id: int
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_followers_serialize(
            app_key=app_key,
            tag=tag,
            status=status,
            target_user_id=target_user_id,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserFollowersResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_followers_without_preload_content(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="标签")] = None,
        status: Annotated[Optional[StrictStr], Field(description="状态")] = None,
        target_user_id: Annotated[Optional[StrictInt], Field(description="指定用户的粉丝")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """获取粉丝列表

        根据条件获取我的粉丝列表

        :param app_key: (required)
        :type app_key: str
        :param tag: 标签
        :type tag: str
        :param status: 状态
        :type status: str
        :param target_user_id: 指定用户的粉丝
        :type target_user_id: int
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_followers_serialize(
            app_key=app_key,
            tag=tag,
            status=status,
            target_user_id=target_user_id,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserFollowersResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_followers_serialize(
        self,
        app_key,
        tag,
        status,
        target_user_id,
        skip,
        take,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        if tag is not None:
            
            _query_params.append(('tag', tag))
            
        if status is not None:
            
            _query_params.append(('status', status))
            
        if target_user_id is not None:
            
            _query_params.append(('targetUserId', target_user_id))
            
        if skip is not None:
            
            _query_params.append(('skip', skip))
            
        if take is not None:
            
            _query_params.append(('take', take))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/Followers',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_following(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="用于过滤关注列表的标签（可选）。")] = None,
        status: Annotated[Optional[StrictStr], Field(description="用于过滤关注列表的状态（可选）。")] = None,
        target_user_id: Annotated[Optional[StrictInt], Field(description="指定用户的关注记录，如果不提供则默认为当前用户的关注。")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数，用于分页（默认0）。")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数，用于分页（默认10）。")] = None,
        check_user_id: Annotated[Optional[StrictInt], Field(description="要判断是否关注的目标用户ID。如果提供此参数，方法将返回一个布尔值，表示当前用户是否关注该目标用户。")] = None,
        only_ids: Annotated[Optional[StrictBool], Field(description="是否只返回关注用户的ID集合，默认为false（即返回完整的关注用户信息）。")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> BooleanApiResponse:
        """获取关注列表 / 判断是否关注

        根据条件获取我的关注列表，或判断是否关注某个用户

        :param app_key: (required)
        :type app_key: str
        :param tag: 用于过滤关注列表的标签（可选）。
        :type tag: str
        :param status: 用于过滤关注列表的状态（可选）。
        :type status: str
        :param target_user_id: 指定用户的关注记录，如果不提供则默认为当前用户的关注。
        :type target_user_id: int
        :param skip: 跳过的记录数，用于分页（默认0）。
        :type skip: int
        :param take: 获取的记录数，用于分页（默认10）。
        :type take: int
        :param check_user_id: 要判断是否关注的目标用户ID。如果提供此参数，方法将返回一个布尔值，表示当前用户是否关注该目标用户。
        :type check_user_id: int
        :param only_ids: 是否只返回关注用户的ID集合，默认为false（即返回完整的关注用户信息）。
        :type only_ids: bool
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_following_serialize(
            app_key=app_key,
            tag=tag,
            status=status,
            target_user_id=target_user_id,
            skip=skip,
            take=take,
            check_user_id=check_user_id,
            only_ids=only_ids,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_following_with_http_info(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="用于过滤关注列表的标签（可选）。")] = None,
        status: Annotated[Optional[StrictStr], Field(description="用于过滤关注列表的状态（可选）。")] = None,
        target_user_id: Annotated[Optional[StrictInt], Field(description="指定用户的关注记录，如果不提供则默认为当前用户的关注。")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数，用于分页（默认0）。")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数，用于分页（默认10）。")] = None,
        check_user_id: Annotated[Optional[StrictInt], Field(description="要判断是否关注的目标用户ID。如果提供此参数，方法将返回一个布尔值，表示当前用户是否关注该目标用户。")] = None,
        only_ids: Annotated[Optional[StrictBool], Field(description="是否只返回关注用户的ID集合，默认为false（即返回完整的关注用户信息）。")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[BooleanApiResponse]:
        """获取关注列表 / 判断是否关注

        根据条件获取我的关注列表，或判断是否关注某个用户

        :param app_key: (required)
        :type app_key: str
        :param tag: 用于过滤关注列表的标签（可选）。
        :type tag: str
        :param status: 用于过滤关注列表的状态（可选）。
        :type status: str
        :param target_user_id: 指定用户的关注记录，如果不提供则默认为当前用户的关注。
        :type target_user_id: int
        :param skip: 跳过的记录数，用于分页（默认0）。
        :type skip: int
        :param take: 获取的记录数，用于分页（默认10）。
        :type take: int
        :param check_user_id: 要判断是否关注的目标用户ID。如果提供此参数，方法将返回一个布尔值，表示当前用户是否关注该目标用户。
        :type check_user_id: int
        :param only_ids: 是否只返回关注用户的ID集合，默认为false（即返回完整的关注用户信息）。
        :type only_ids: bool
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_following_serialize(
            app_key=app_key,
            tag=tag,
            status=status,
            target_user_id=target_user_id,
            skip=skip,
            take=take,
            check_user_id=check_user_id,
            only_ids=only_ids,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_following_without_preload_content(
        self,
        app_key: StrictStr,
        tag: Annotated[Optional[StrictStr], Field(description="用于过滤关注列表的标签（可选）。")] = None,
        status: Annotated[Optional[StrictStr], Field(description="用于过滤关注列表的状态（可选）。")] = None,
        target_user_id: Annotated[Optional[StrictInt], Field(description="指定用户的关注记录，如果不提供则默认为当前用户的关注。")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数，用于分页（默认0）。")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数，用于分页（默认10）。")] = None,
        check_user_id: Annotated[Optional[StrictInt], Field(description="要判断是否关注的目标用户ID。如果提供此参数，方法将返回一个布尔值，表示当前用户是否关注该目标用户。")] = None,
        only_ids: Annotated[Optional[StrictBool], Field(description="是否只返回关注用户的ID集合，默认为false（即返回完整的关注用户信息）。")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """获取关注列表 / 判断是否关注

        根据条件获取我的关注列表，或判断是否关注某个用户

        :param app_key: (required)
        :type app_key: str
        :param tag: 用于过滤关注列表的标签（可选）。
        :type tag: str
        :param status: 用于过滤关注列表的状态（可选）。
        :type status: str
        :param target_user_id: 指定用户的关注记录，如果不提供则默认为当前用户的关注。
        :type target_user_id: int
        :param skip: 跳过的记录数，用于分页（默认0）。
        :type skip: int
        :param take: 获取的记录数，用于分页（默认10）。
        :type take: int
        :param check_user_id: 要判断是否关注的目标用户ID。如果提供此参数，方法将返回一个布尔值，表示当前用户是否关注该目标用户。
        :type check_user_id: int
        :param only_ids: 是否只返回关注用户的ID集合，默认为false（即返回完整的关注用户信息）。
        :type only_ids: bool
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_following_serialize(
            app_key=app_key,
            tag=tag,
            status=status,
            target_user_id=target_user_id,
            skip=skip,
            take=take,
            check_user_id=check_user_id,
            only_ids=only_ids,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_following_serialize(
        self,
        app_key,
        tag,
        status,
        target_user_id,
        skip,
        take,
        check_user_id,
        only_ids,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        if tag is not None:
            
            _query_params.append(('tag', tag))
            
        if status is not None:
            
            _query_params.append(('status', status))
            
        if target_user_id is not None:
            
            _query_params.append(('targetUserId', target_user_id))
            
        if skip is not None:
            
            _query_params.append(('skip', skip))
            
        if take is not None:
            
            _query_params.append(('take', take))
            
        if check_user_id is not None:
            
            _query_params.append(('checkUserId', check_user_id))
            
        if only_ids is not None:
            
            _query_params.append(('onlyIDs', only_ids))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/Following',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_friends_near_by(
        self,
        longitude: Annotated[Union[StrictFloat, StrictInt], Field(description="当前用户经度坐标(WGS84坐标系)")],
        latitude: Annotated[Union[StrictFloat, StrictInt], Field(description="当前用户纬度坐标(WGS84坐标系)")],
        app_key: StrictStr,
        country: Annotated[Optional[StrictStr], Field(description="国家过滤条件（精确匹配）")] = None,
        state: Annotated[Optional[StrictStr], Field(description="省份过滤条件（精确匹配）")] = None,
        city: Annotated[Optional[StrictStr], Field(description="城市过滤条件（精确匹配）")] = None,
        district: Annotated[Optional[StrictStr], Field(description="区县过滤条件（精确匹配）")] = None,
        gender: Annotated[Optional[StrictStr], Field(description="性别过滤条件（可选值示例：Male/Female/Other）")] = None,
        age_s: Annotated[Optional[StrictInt], Field(description="年龄起始范围（包含，0表示不限制）")] = None,
        age_e: Annotated[Optional[StrictInt], Field(description="年龄结束范围（包含，0表示不限制）")] = None,
        tag: Annotated[Optional[StrictStr], Field(description="兴趣标签过滤（支持模糊匹配，如：\"运动\"）")] = None,
        distance: Annotated[Optional[StrictInt], Field(description="搜索半径（单位：米，0表示不限制距离）")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数（分页起始位置，默认0）")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数（分页大小，默认10，最大100）")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> UserFriendsNearByResultApiResponse:
        """推荐附近用户

        根据地理位置坐标和多种筛选条件，查询附近满足条件的用户列表，支持分页和按距离排序。 地理位置查询使用MySQL的ST_Distance_Sphere函数计算球面距离。 注意：longitude为经度(X轴)，latitude为纬度(Y轴)，参数顺序与常规坐标系一致

        :param longitude: 当前用户经度坐标(WGS84坐标系) (required)
        :type longitude: float
        :param latitude: 当前用户纬度坐标(WGS84坐标系) (required)
        :type latitude: float
        :param app_key: (required)
        :type app_key: str
        :param country: 国家过滤条件（精确匹配）
        :type country: str
        :param state: 省份过滤条件（精确匹配）
        :type state: str
        :param city: 城市过滤条件（精确匹配）
        :type city: str
        :param district: 区县过滤条件（精确匹配）
        :type district: str
        :param gender: 性别过滤条件（可选值示例：Male/Female/Other）
        :type gender: str
        :param age_s: 年龄起始范围（包含，0表示不限制）
        :type age_s: int
        :param age_e: 年龄结束范围（包含，0表示不限制）
        :type age_e: int
        :param tag: 兴趣标签过滤（支持模糊匹配，如：\"运动\"）
        :type tag: str
        :param distance: 搜索半径（单位：米，0表示不限制距离）
        :type distance: int
        :param skip: 跳过的记录数（分页起始位置，默认0）
        :type skip: int
        :param take: 获取的记录数（分页大小，默认10，最大100）
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_friends_near_by_serialize(
            longitude=longitude,
            latitude=latitude,
            app_key=app_key,
            country=country,
            state=state,
            city=city,
            district=district,
            gender=gender,
            age_s=age_s,
            age_e=age_e,
            tag=tag,
            distance=distance,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserFriendsNearByResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_friends_near_by_with_http_info(
        self,
        longitude: Annotated[Union[StrictFloat, StrictInt], Field(description="当前用户经度坐标(WGS84坐标系)")],
        latitude: Annotated[Union[StrictFloat, StrictInt], Field(description="当前用户纬度坐标(WGS84坐标系)")],
        app_key: StrictStr,
        country: Annotated[Optional[StrictStr], Field(description="国家过滤条件（精确匹配）")] = None,
        state: Annotated[Optional[StrictStr], Field(description="省份过滤条件（精确匹配）")] = None,
        city: Annotated[Optional[StrictStr], Field(description="城市过滤条件（精确匹配）")] = None,
        district: Annotated[Optional[StrictStr], Field(description="区县过滤条件（精确匹配）")] = None,
        gender: Annotated[Optional[StrictStr], Field(description="性别过滤条件（可选值示例：Male/Female/Other）")] = None,
        age_s: Annotated[Optional[StrictInt], Field(description="年龄起始范围（包含，0表示不限制）")] = None,
        age_e: Annotated[Optional[StrictInt], Field(description="年龄结束范围（包含，0表示不限制）")] = None,
        tag: Annotated[Optional[StrictStr], Field(description="兴趣标签过滤（支持模糊匹配，如：\"运动\"）")] = None,
        distance: Annotated[Optional[StrictInt], Field(description="搜索半径（单位：米，0表示不限制距离）")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数（分页起始位置，默认0）")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数（分页大小，默认10，最大100）")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[UserFriendsNearByResultApiResponse]:
        """推荐附近用户

        根据地理位置坐标和多种筛选条件，查询附近满足条件的用户列表，支持分页和按距离排序。 地理位置查询使用MySQL的ST_Distance_Sphere函数计算球面距离。 注意：longitude为经度(X轴)，latitude为纬度(Y轴)，参数顺序与常规坐标系一致

        :param longitude: 当前用户经度坐标(WGS84坐标系) (required)
        :type longitude: float
        :param latitude: 当前用户纬度坐标(WGS84坐标系) (required)
        :type latitude: float
        :param app_key: (required)
        :type app_key: str
        :param country: 国家过滤条件（精确匹配）
        :type country: str
        :param state: 省份过滤条件（精确匹配）
        :type state: str
        :param city: 城市过滤条件（精确匹配）
        :type city: str
        :param district: 区县过滤条件（精确匹配）
        :type district: str
        :param gender: 性别过滤条件（可选值示例：Male/Female/Other）
        :type gender: str
        :param age_s: 年龄起始范围（包含，0表示不限制）
        :type age_s: int
        :param age_e: 年龄结束范围（包含，0表示不限制）
        :type age_e: int
        :param tag: 兴趣标签过滤（支持模糊匹配，如：\"运动\"）
        :type tag: str
        :param distance: 搜索半径（单位：米，0表示不限制距离）
        :type distance: int
        :param skip: 跳过的记录数（分页起始位置，默认0）
        :type skip: int
        :param take: 获取的记录数（分页大小，默认10，最大100）
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_friends_near_by_serialize(
            longitude=longitude,
            latitude=latitude,
            app_key=app_key,
            country=country,
            state=state,
            city=city,
            district=district,
            gender=gender,
            age_s=age_s,
            age_e=age_e,
            tag=tag,
            distance=distance,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserFriendsNearByResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_friends_near_by_without_preload_content(
        self,
        longitude: Annotated[Union[StrictFloat, StrictInt], Field(description="当前用户经度坐标(WGS84坐标系)")],
        latitude: Annotated[Union[StrictFloat, StrictInt], Field(description="当前用户纬度坐标(WGS84坐标系)")],
        app_key: StrictStr,
        country: Annotated[Optional[StrictStr], Field(description="国家过滤条件（精确匹配）")] = None,
        state: Annotated[Optional[StrictStr], Field(description="省份过滤条件（精确匹配）")] = None,
        city: Annotated[Optional[StrictStr], Field(description="城市过滤条件（精确匹配）")] = None,
        district: Annotated[Optional[StrictStr], Field(description="区县过滤条件（精确匹配）")] = None,
        gender: Annotated[Optional[StrictStr], Field(description="性别过滤条件（可选值示例：Male/Female/Other）")] = None,
        age_s: Annotated[Optional[StrictInt], Field(description="年龄起始范围（包含，0表示不限制）")] = None,
        age_e: Annotated[Optional[StrictInt], Field(description="年龄结束范围（包含，0表示不限制）")] = None,
        tag: Annotated[Optional[StrictStr], Field(description="兴趣标签过滤（支持模糊匹配，如：\"运动\"）")] = None,
        distance: Annotated[Optional[StrictInt], Field(description="搜索半径（单位：米，0表示不限制距离）")] = None,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数（分页起始位置，默认0）")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数（分页大小，默认10，最大100）")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """推荐附近用户

        根据地理位置坐标和多种筛选条件，查询附近满足条件的用户列表，支持分页和按距离排序。 地理位置查询使用MySQL的ST_Distance_Sphere函数计算球面距离。 注意：longitude为经度(X轴)，latitude为纬度(Y轴)，参数顺序与常规坐标系一致

        :param longitude: 当前用户经度坐标(WGS84坐标系) (required)
        :type longitude: float
        :param latitude: 当前用户纬度坐标(WGS84坐标系) (required)
        :type latitude: float
        :param app_key: (required)
        :type app_key: str
        :param country: 国家过滤条件（精确匹配）
        :type country: str
        :param state: 省份过滤条件（精确匹配）
        :type state: str
        :param city: 城市过滤条件（精确匹配）
        :type city: str
        :param district: 区县过滤条件（精确匹配）
        :type district: str
        :param gender: 性别过滤条件（可选值示例：Male/Female/Other）
        :type gender: str
        :param age_s: 年龄起始范围（包含，0表示不限制）
        :type age_s: int
        :param age_e: 年龄结束范围（包含，0表示不限制）
        :type age_e: int
        :param tag: 兴趣标签过滤（支持模糊匹配，如：\"运动\"）
        :type tag: str
        :param distance: 搜索半径（单位：米，0表示不限制距离）
        :type distance: int
        :param skip: 跳过的记录数（分页起始位置，默认0）
        :type skip: int
        :param take: 获取的记录数（分页大小，默认10，最大100）
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_friends_near_by_serialize(
            longitude=longitude,
            latitude=latitude,
            app_key=app_key,
            country=country,
            state=state,
            city=city,
            district=district,
            gender=gender,
            age_s=age_s,
            age_e=age_e,
            tag=tag,
            distance=distance,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserFriendsNearByResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_friends_near_by_serialize(
        self,
        longitude,
        latitude,
        app_key,
        country,
        state,
        city,
        district,
        gender,
        age_s,
        age_e,
        tag,
        distance,
        skip,
        take,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        if longitude is not None:
            
            _query_params.append(('longitude', longitude))
            
        if latitude is not None:
            
            _query_params.append(('latitude', latitude))
            
        if country is not None:
            
            _query_params.append(('country', country))
            
        if state is not None:
            
            _query_params.append(('state', state))
            
        if city is not None:
            
            _query_params.append(('city', city))
            
        if district is not None:
            
            _query_params.append(('district', district))
            
        if gender is not None:
            
            _query_params.append(('gender', gender))
            
        if age_s is not None:
            
            _query_params.append(('ageS', age_s))
            
        if age_e is not None:
            
            _query_params.append(('ageE', age_e))
            
        if tag is not None:
            
            _query_params.append(('tag', tag))
            
        if distance is not None:
            
            _query_params.append(('distance', distance))
            
        if skip is not None:
            
            _query_params.append(('skip', skip))
            
        if take is not None:
            
            _query_params.append(('take', take))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/NearBy',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_mutual_followers(
        self,
        app_key: StrictStr,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> UserMutualFollowersResultApiResponse:
        """推荐共同粉丝用户

        推荐有共同粉丝的用户

        :param app_key: (required)
        :type app_key: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_mutual_followers_serialize(
            app_key=app_key,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserMutualFollowersResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_mutual_followers_with_http_info(
        self,
        app_key: StrictStr,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[UserMutualFollowersResultApiResponse]:
        """推荐共同粉丝用户

        推荐有共同粉丝的用户

        :param app_key: (required)
        :type app_key: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_mutual_followers_serialize(
            app_key=app_key,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserMutualFollowersResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_mutual_followers_without_preload_content(
        self,
        app_key: StrictStr,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """推荐共同粉丝用户

        推荐有共同粉丝的用户

        :param app_key: (required)
        :type app_key: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_mutual_followers_serialize(
            app_key=app_key,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserMutualFollowersResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_mutual_followers_serialize(
        self,
        app_key,
        skip,
        take,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        if skip is not None:
            
            _query_params.append(('skip', skip))
            
        if take is not None:
            
            _query_params.append(('take', take))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/MutualFollowers',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_mutual_followings(
        self,
        app_key: StrictStr,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> UserMutualFollowingsResultApiResponse:
        """推荐共同关注用户

        推荐有共同关注的用户

        :param app_key: (required)
        :type app_key: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_mutual_followings_serialize(
            app_key=app_key,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserMutualFollowingsResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_mutual_followings_with_http_info(
        self,
        app_key: StrictStr,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[UserMutualFollowingsResultApiResponse]:
        """推荐共同关注用户

        推荐有共同关注的用户

        :param app_key: (required)
        :type app_key: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_mutual_followings_serialize(
            app_key=app_key,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserMutualFollowingsResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_mutual_followings_without_preload_content(
        self,
        app_key: StrictStr,
        skip: Annotated[Optional[StrictInt], Field(description="跳过的记录数")] = None,
        take: Annotated[Optional[StrictInt], Field(description="获取的记录数")] = None,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """推荐共同关注用户

        推荐有共同关注的用户

        :param app_key: (required)
        :type app_key: str
        :param skip: 跳过的记录数
        :type skip: int
        :param take: 获取的记录数
        :type take: int
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_mutual_followings_serialize(
            app_key=app_key,
            skip=skip,
            take=take,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "UserMutualFollowingsResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_mutual_followings_serialize(
        self,
        app_key,
        skip,
        take,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        if skip is not None:
            
            _query_params.append(('skip', skip))
            
        if take is not None:
            
            _query_params.append(('take', take))
            
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/MutualFollowings',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_profile_by_id(
        self,
        user_id: Annotated[StrictInt, Field(description="用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> GetUserProfileResultApiResponse:
        """获取用户资料

        用于他人主页展示

        :param user_id: 用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_profile_by_id_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "GetUserProfileResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_profile_by_id_with_http_info(
        self,
        user_id: Annotated[StrictInt, Field(description="用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[GetUserProfileResultApiResponse]:
        """获取用户资料

        用于他人主页展示

        :param user_id: 用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_profile_by_id_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "GetUserProfileResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_profile_by_id_without_preload_content(
        self,
        user_id: Annotated[StrictInt, Field(description="用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """获取用户资料

        用于他人主页展示

        :param user_id: 用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_profile_by_id_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "GetUserProfileResultApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_profile_by_id_serialize(
        self,
        user_id,
        app_key,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if user_id is not None:
            _path_params['userId'] = user_id
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/UserFriends/{appKey}/Profile/{userId}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )




    @validate_call
    def user_unfollow_user(
        self,
        user_id: Annotated[StrictInt, Field(description="要取消关注的用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> BooleanApiResponse:
        """取消关注

        取消关注指定用户

        :param user_id: 要取消关注的用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_unfollow_user_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def user_unfollow_user_with_http_info(
        self,
        user_id: Annotated[StrictInt, Field(description="要取消关注的用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> ApiResponse[BooleanApiResponse]:
        """取消关注

        取消关注指定用户

        :param user_id: 要取消关注的用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_unfollow_user_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def user_unfollow_user_without_preload_content(
        self,
        user_id: Annotated[StrictInt, Field(description="要取消关注的用户ID")],
        app_key: StrictStr,
        _request_timeout: Union[
            None,
            Annotated[StrictFloat, Field(gt=0)],
            Tuple[
                Annotated[StrictFloat, Field(gt=0)],
                Annotated[StrictFloat, Field(gt=0)]
            ]
        ] = None,
        _request_auth: Optional[Dict[StrictStr, Any]] = None,
        _content_type: Optional[StrictStr] = None,
        _headers: Optional[Dict[StrictStr, Any]] = None,
        _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
    ) -> RESTResponseType:
        """取消关注

        取消关注指定用户

        :param user_id: 要取消关注的用户ID (required)
        :type user_id: int
        :param app_key: (required)
        :type app_key: str
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :type _request_timeout: int, tuple(int, int), optional
        :param _request_auth: set to override the auth_settings for an a single
                              request; this effectively ignores the
                              authentication in the spec for a single request.
        :type _request_auth: dict, optional
        :param _content_type: force content-type for the request.
        :type _content_type: str, Optional
        :param _headers: set to override the headers for a single
                         request; this effectively ignores the headers
                         in the spec for a single request.
        :type _headers: dict, optional
        :param _host_index: set to override the host_index for a single
                            request; this effectively ignores the host_index
                            in the spec for a single request.
        :type _host_index: int, optional
        :return: Returns the result object.
        """ # noqa: E501

        _param = self._user_unfollow_user_serialize(
            user_id=user_id,
            app_key=app_key,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "BooleanApiResponse",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _user_unfollow_user_serialize(
        self,
        user_id,
        app_key,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
        }

        _path_params: Dict[str, str] = {}
        _query_params: List[Tuple[str, str]] = []
        _header_params: Dict[str, Optional[str]] = _headers or {}
        _form_params: List[Tuple[str, str]] = []
        _files: Dict[
            str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if user_id is not None:
            _path_params['userId'] = user_id
        if app_key is not None:
            _path_params['appKey'] = app_key
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter


        # set the HTTP header `Accept`
        if 'Accept' not in _header_params:
            _header_params['Accept'] = self.api_client.select_header_accept(
                [
                    'application/json'
                ]
            )


        # authentication setting
        _auth_settings: List[str] = [
            'Bearer'
        ]

        return self.api_client.param_serialize(
            method='DELETE',
            resource_path='/UserFriends/{appKey}/Follower/{userId}',
            path_params=_path_params,
            query_params=_query_params,
            header_params=_header_params,
            body=_body_params,
            post_params=_form_params,
            files=_files,
            auth_settings=_auth_settings,
            collection_formats=_collection_formats,
            _host=_host,
            _request_auth=_request_auth
        )


