Files
twitter-cli-cookiefile/twitter_cli/models.py
jackwener 8313a7012f refactor: dynamic UA matching, session reuse, score Optional, --output on all commands
- constants.py: sync_chrome_version() aligns UA/sec-ch-ua with impersonate target
- auth.py: reuse shared cffi session instead of creating duplicate
- filter.py: eliminate double weight building in score_tweet
- models.py: Tweet.score → Optional[float] for accurate display
- cli.py: add --output to search/likes/user-posts for consistency
2026-03-09 21:15:28 +08:00

70 lines
1.3 KiB
Python

"""Data models for twitter-cli.
Defines Tweet, Author, Metrics, and TweetMedia as simple dataclasses.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import List, Optional
@dataclass
class Author:
id: str
name: str
screen_name: str
profile_image_url: str = ""
verified: bool = False
@dataclass
class Metrics:
likes: int = 0
retweets: int = 0
replies: int = 0
quotes: int = 0
views: int = 0
bookmarks: int = 0
@dataclass
class TweetMedia:
type: str # "photo" | "video" | "animated_gif"
url: str
width: Optional[int] = None
height: Optional[int] = None
@dataclass
class Tweet:
id: str
text: str
author: Author
metrics: Metrics
created_at: str
media: List[TweetMedia] = field(default_factory=list)
urls: List[str] = field(default_factory=list)
is_retweet: bool = False
lang: str = ""
retweeted_by: Optional[str] = None
quoted_tweet: Optional[Tweet] = None
score: Optional[float] = None
@dataclass
class UserProfile:
id: str
name: str
screen_name: str
bio: str = ""
location: str = ""
url: str = ""
followers_count: int = 0
following_count: int = 0
tweets_count: int = 0
likes_count: int = 0
verified: bool = False
profile_image_url: str = ""
created_at: str = ""