feat: parse message_me card (2586390716:message_me) (#333)

This commit is contained in:
Fla
2026-08-28 18:40:06 +03:00
committed by GitHub
parent 5271cbdc5d
commit 55ac729f39
3 changed files with 2497 additions and 1 deletions
File diff suppressed because it is too large Load Diff
+11
View File
@@ -8,6 +8,7 @@ from twscrape import API, gather
from twscrape.models import (
AudiospaceCard,
BroadcastCard,
MessageMeCard,
PollCard,
SummaryCard,
Trend,
@@ -689,6 +690,16 @@ async def test_cards():
assert isinstance(doc.card, AudiospaceCard)
assert doc.card.url is not None
# Check MessageMeCard
raw = fake_rep("card_message_me").json()
doc = parse_tweet(raw, 1916063270131191983)
assert doc is not None and doc.card is not None
assert doc.card._type == "message_me"
assert isinstance(doc.card, MessageMeCard)
assert doc.card.url is not None
assert doc.card.cta is not None
assert doc.card.recipientId == "85741735"
async def test_tweet_new_fields():
tweets = [
+28 -1
View File
@@ -273,7 +273,9 @@ class Tweet(JSONTrait):
source: str | None = None
sourceUrl: str | None = None
sourceLabel: str | None = None
card: Union[None, "SummaryCard", "PollCard", "BroadcastCard", "AudiospaceCard"] = None
card: Union[
None, "SummaryCard", "PollCard", "BroadcastCard", "AudiospaceCard", "MessageMeCard"
] = None
possibly_sensitive: bool | None = None
isQuoteStatus: bool = False
isTranslatable: bool = False
@@ -495,6 +497,14 @@ class AudiospaceCard(Card):
_type: str = "audiospace"
@dataclass
class MessageMeCard(Card):
url: str
cta: str | None = None
recipientId: str | None = None
_type: str = "message_me"
@dataclass
class RequestParam(JSONTrait):
key: str
@@ -710,6 +720,23 @@ def _parse_card(obj: dict, url: str):
# print(json.dumps(val, indent=2))
return AudiospaceCard(url=card_url)
if name == "2586390716:message_me":
val = _parse_card_prepare_values(obj)
card_url = _parse_card_get_str(val, "card_url")
if card_url is None:
return None
cta = _parse_card_get_str(val, "cta")
recipient_id = next(
(
x["value"]["user_value"]["id_str"]
for x in val
if x["key"] == "recipient" and x["value"]["type"] == "USER"
),
None,
)
return MessageMeCard(url=card_url, cta=cta, recipientId=recipient_id)
logger.warning(f"Unknown card type '{name}' on {url}")
if "PYTEST_CURRENT_TEST" in os.environ: # help debugging tests
print(f"Unknown card type '{name}' on {url}", file=sys.stderr)