mirror of
https://github.com/vladkens/twscrape.git
synced 2026-10-10 15:17:19 -04:00
feat: parse message_me card (2586390716:message_me) (#333)
This commit is contained in:
Generated
+2458
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user