feat(08-02): add CommentData models for comment crawling
- Add CommentAuthor model for comment author info - Add CommentData model with content, author, likes, child_count - Add CommentsResult model for crawl operation result - Update CrawlResult to include optional comments field Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
Pydantic models for structured data from Zhihu API responses.
|
Pydantic models for structured data from Zhihu API responses.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union, List
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
|
||||||
@@ -79,6 +79,56 @@ class ArticleData(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class CommentAuthor(BaseModel):
|
||||||
|
"""Comment author information.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
name: Author display name
|
||||||
|
url_token: Author URL token (e.g., 'zhang-san-12')
|
||||||
|
"""
|
||||||
|
name: str = Field(..., description="Author display name")
|
||||||
|
url_token: Optional[str] = Field(None, description="Author URL token")
|
||||||
|
|
||||||
|
|
||||||
|
class CommentData(BaseModel):
|
||||||
|
"""Data model for Zhihu comment.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
id: Comment ID
|
||||||
|
content: Comment content in plain text
|
||||||
|
author: Comment author information
|
||||||
|
created_time: Unix timestamp of creation
|
||||||
|
like_count: Number of likes/upvotes
|
||||||
|
child_count: Number of child/reply comments
|
||||||
|
is_author: Whether the commenter is the content author
|
||||||
|
"""
|
||||||
|
id: int = Field(..., description="Comment ID")
|
||||||
|
content: str = Field(default="", description="Comment content")
|
||||||
|
author: Optional[CommentAuthor] = Field(None, description="Comment author")
|
||||||
|
created_time: Optional[int] = Field(None, description="Creation timestamp")
|
||||||
|
like_count: int = Field(default=0, description="Like/upvote count")
|
||||||
|
child_count: int = Field(default=0, description="Number of child comments")
|
||||||
|
is_author: bool = Field(default=False, description="Whether commenter is content author")
|
||||||
|
|
||||||
|
|
||||||
|
class CommentsResult(BaseModel):
|
||||||
|
"""Result of comment crawling operation.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
content_type: Type of content ("answers" or "articles")
|
||||||
|
content_id: ID of the content
|
||||||
|
comments: List of comments
|
||||||
|
total_count: Total number of comments (may exceed returned count)
|
||||||
|
"""
|
||||||
|
content_type: str = Field(..., description="Content type: answers or articles")
|
||||||
|
content_id: int = Field(..., description="Content ID")
|
||||||
|
comments: List[CommentData] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="List of comments"
|
||||||
|
)
|
||||||
|
total_count: int = Field(default=0, description="Total comment count")
|
||||||
|
|
||||||
|
|
||||||
class CrawlResult(BaseModel):
|
class CrawlResult(BaseModel):
|
||||||
"""Result of a crawl operation.
|
"""Result of a crawl operation.
|
||||||
|
|
||||||
@@ -86,6 +136,7 @@ class CrawlResult(BaseModel):
|
|||||||
success: Whether the crawl was successful
|
success: Whether the crawl was successful
|
||||||
content_type: Type of content ("answer" or "article")
|
content_type: Type of content ("answer" or "article")
|
||||||
data: Extracted content data if successful
|
data: Extracted content data if successful
|
||||||
|
comments: Optional list of comments (when include_comments=True)
|
||||||
error: Error message if failed
|
error: Error message if failed
|
||||||
"""
|
"""
|
||||||
success: bool = Field(..., description="Whether crawl succeeded")
|
success: bool = Field(..., description="Whether crawl succeeded")
|
||||||
@@ -94,4 +145,8 @@ class CrawlResult(BaseModel):
|
|||||||
None,
|
None,
|
||||||
description="Extracted content data"
|
description="Extracted content data"
|
||||||
)
|
)
|
||||||
|
comments: Optional[List[CommentData]] = Field(
|
||||||
|
None,
|
||||||
|
description="Comments if include_comments was True"
|
||||||
|
)
|
||||||
error: Optional[str] = Field(None, description="Error message if failed")
|
error: Optional[str] = Field(None, description="Error message if failed")
|
||||||
|
|||||||
Reference in New Issue
Block a user