get_followers
Retrieve follower lists for Weibo users to analyze audience connections, manage relationships, or gather user data through paginated results.
Instructions
Get a Weibo user's followers.
Returns:
list[dict]: List of dictionaries containing follower information
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | The unique identifier of the Weibo user | |
| limit | No | Maximum number of followers to return, defaults to 15 | |
| page | No | Page number for pagination, defaults to 1 |
Implementation Reference
- src/mcp_server_weibo/server.py:113-127 (handler)MCP tool handler and registration for 'get_followers'. Defines input schema via Annotated Fields (uid, limit, page) and delegates execution to WeiboCrawler instance.@mcp.tool() async def get_followers( ctx: Context, uid: Annotated[int, Field(description="The unique identifier of the Weibo user")], limit: Annotated[int, Field(description="Maximum number of followers to return, defaults to 15", default=15)] = 15, page: Annotated[int, Field(description="Page number for pagination, defaults to 1", default=1)] = 1 ) -> list[dict]: """ Get a Weibo user's followers. Returns: list[dict]: List of dictionaries containing follower information """ return await crawler.get_followers(uid, limit, page)
- src/mcp_server_weibo/schemas.py:4-32 (schema)Pydantic BaseModel schema for UserProfile, used to type and validate individual follower profiles returned by the tool (list[UserProfile] internally).class UserProfile(BaseModel): """ Data model for a Weibo user's profile information. Attributes: id (int): User's unique identifier screen_name (str): User's display name profile_image_url (str): URL to user's profile image profile_url (str): URL to user's Weibo profile page description (str): User's profile description follow_count (int): Number of users the user is following followers_count (str): Number of followers (as string) avatar_hd (str): URL to user's high-resolution avatar image verified (bool): Whether the user is verified verified_reason (str): Reason for verification gender (str): User's gender """ id: int = Field() screen_name: str = Field() profile_image_url: str = Field() profile_url: str = Field() description: str = Field() follow_count: int = Field() followers_count: str = Field() avatar_hd: str = Field() verified: bool = Field() verified_reason: str = Field() gender: str = Field()
- Core helper method in WeiboCrawler that implements the follower fetching logic: constructs API URL, makes HTTP request to Weibo search endpoint, parses cards, extracts user profiles using _to_user_profile.async def get_followers(self, uid: int, limit: int = 15, page: int = 1) -> list[UserProfile]: """ Get followers of a specific Weibo user. Args: uid (int): The unique identifier of the Weibo user limit (int): Maximum number of followers to return, defaults to 15 page (int): The page number for pagination, defaults to 1 Returns: list[UserProfile]: List of UserProfile objects containing follower information """ async with httpx.AsyncClient() as client: try: params = { 'containerid': f'231051_-_followers_-_{str(uid)}', 'page': page, } encoded_params = urlencode(params) response = await client.get(f'{SEARCH_URL}?{encoded_params}', headers=DEFAULT_HEADERS) result = response.json() cards = result["data"]["cards"] if len(cards) < 1: return [] else: cardGroup = cards[-1]['card_group'] return [self._to_user_profile(item['user']) for item in cardGroup][:limit] except httpx.HTTPError: self.logger.error(f"Unable to get followers for uid '{str(uid)}'", exc_info=True) return []
- Supporting helper utility that transforms raw Weibo API user data dictionary into a structured UserProfile Pydantic model, called within get_followers.def _to_user_profile(self, user: dict) -> UserProfile: """ Convert raw user data to UserProfile object. Args: user (dict): Raw user data from Weibo API Returns: UserProfile: Formatted user profile information """ return UserProfile( id = user['id'], screen_name = user['screen_name'], profile_image_url = user['profile_image_url'], profile_url = user['profile_url'], description = user.get('description', ''), follow_count = user.get('follow_count', 0), followers_count = user.get('followers_count', ''), avatar_hd = user.get('avatar_hd', ''), verified = user.get('verified', False), verified_reason = user.get('verified_reason', ''), gender = user.get('gender', '') )