x-twitter-scraper 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +1 -1
  4. data/lib/x_twitter_scraper/internal/type/union.rb +25 -9
  5. data/lib/x_twitter_scraper/models/content_disclosure.rb +1 -9
  6. data/lib/x_twitter_scraper/models/embedded_tweet.rb +389 -1
  7. data/lib/x_twitter_scraper/models/paginated_tweets.rb +4 -5
  8. data/lib/x_twitter_scraper/models/search_tweet.rb +371 -1
  9. data/lib/x_twitter_scraper/models/support/ticket_list_response.rb +30 -17
  10. data/lib/x_twitter_scraper/models/support/ticket_retrieve_response.rb +49 -24
  11. data/lib/x_twitter_scraper/models/support/ticket_update_response.rb +18 -6
  12. data/lib/x_twitter_scraper/models/trend_list_response.rb +28 -1
  13. data/lib/x_twitter_scraper/models/tweet_media.rb +213 -1
  14. data/lib/x_twitter_scraper/models/user_profile.rb +211 -21
  15. data/lib/x_twitter_scraper/models/x/account_connection_attempt_retrieve_response.rb +60 -26
  16. data/lib/x_twitter_scraper/models/x/account_connection_challenge_submit_response.rb +4 -4
  17. data/lib/x_twitter_scraper/models/x/account_create_response.rb +149 -2
  18. data/lib/x_twitter_scraper/models/x/account_reauth_response.rb +4 -4
  19. data/lib/x_twitter_scraper/models/x/communities/tweet_list_by_community_params.rb +3 -5
  20. data/lib/x_twitter_scraper/models/x/communities/tweet_list_params.rb +3 -5
  21. data/lib/x_twitter_scraper/models/x/community_retrieve_info_response.rb +1 -17
  22. data/lib/x_twitter_scraper/models/x/community_retrieve_search_params.rb +3 -5
  23. data/lib/x_twitter_scraper/models/x/list_retrieve_tweets_params.rb +3 -5
  24. data/lib/x_twitter_scraper/models/x/tweet_author.rb +14 -1
  25. data/lib/x_twitter_scraper/models/x/tweet_detail.rb +373 -1
  26. data/lib/x_twitter_scraper/models/x/tweet_get_quotes_params.rb +3 -5
  27. data/lib/x_twitter_scraper/models/x/tweet_get_replies_params.rb +34 -6
  28. data/lib/x_twitter_scraper/models/x/tweet_get_replies_response.rb +345 -0
  29. data/lib/x_twitter_scraper/models/x/tweet_get_thread_params.rb +3 -5
  30. data/lib/x_twitter_scraper/models/x/user_retrieve_likes_params.rb +3 -5
  31. data/lib/x_twitter_scraper/models/x/user_retrieve_media_params.rb +3 -5
  32. data/lib/x_twitter_scraper/models/x/user_retrieve_mentions_params.rb +3 -5
  33. data/lib/x_twitter_scraper/models/x/user_retrieve_replies_params.rb +3 -5
  34. data/lib/x_twitter_scraper/models/x/user_retrieve_tweets_params.rb +3 -5
  35. data/lib/x_twitter_scraper/models/x_get_article_response.rb +1 -7
  36. data/lib/x_twitter_scraper/models/x_get_trends_response.rb +28 -1
  37. data/lib/x_twitter_scraper/resources/x/account_connection_attempts.rb +1 -1
  38. data/lib/x_twitter_scraper/resources/x/accounts.rb +2 -2
  39. data/lib/x_twitter_scraper/resources/x/communities/tweets.rb +2 -2
  40. data/lib/x_twitter_scraper/resources/x/communities.rb +1 -1
  41. data/lib/x_twitter_scraper/resources/x/lists.rb +1 -1
  42. data/lib/x_twitter_scraper/resources/x/tweets.rb +14 -11
  43. data/lib/x_twitter_scraper/resources/x/users.rb +5 -5
  44. data/lib/x_twitter_scraper/version.rb +1 -1
  45. data/lib/x_twitter_scraper.rb +2 -1
  46. data/rbi/x_twitter_scraper/models/content_disclosure.rbi +1 -15
  47. data/rbi/x_twitter_scraper/models/embedded_tweet.rbi +708 -3
  48. data/rbi/x_twitter_scraper/models/paginated_tweets.rbi +4 -5
  49. data/rbi/x_twitter_scraper/models/search_tweet.rbi +674 -3
  50. data/rbi/x_twitter_scraper/models/support/ticket_list_response.rbi +75 -55
  51. data/rbi/x_twitter_scraper/models/support/ticket_retrieve_response.rbi +129 -87
  52. data/rbi/x_twitter_scraper/models/support/ticket_update_response.rbi +62 -13
  53. data/rbi/x_twitter_scraper/models/trend_list_response.rbi +40 -3
  54. data/rbi/x_twitter_scraper/models/tweet_media.rbi +313 -3
  55. data/rbi/x_twitter_scraper/models/user_profile.rbi +340 -29
  56. data/rbi/x_twitter_scraper/models/x/account_connection_attempt_retrieve_response.rbi +61 -83
  57. data/rbi/x_twitter_scraper/models/x/account_connection_challenge_submit_response.rbi +6 -6
  58. data/rbi/x_twitter_scraper/models/x/account_create_response.rbi +264 -2
  59. data/rbi/x_twitter_scraper/models/x/account_reauth_response.rbi +6 -6
  60. data/rbi/x_twitter_scraper/models/x/communities/tweet_list_by_community_params.rbi +4 -8
  61. data/rbi/x_twitter_scraper/models/x/communities/tweet_list_params.rbi +4 -8
  62. data/rbi/x_twitter_scraper/models/x/community_retrieve_info_response.rbi +0 -22
  63. data/rbi/x_twitter_scraper/models/x/community_retrieve_search_params.rbi +4 -8
  64. data/rbi/x_twitter_scraper/models/x/list_retrieve_tweets_params.rbi +4 -8
  65. data/rbi/x_twitter_scraper/models/x/tweet_author.rbi +13 -3
  66. data/rbi/x_twitter_scraper/models/x/tweet_detail.rbi +690 -3
  67. data/rbi/x_twitter_scraper/models/x/tweet_get_quotes_params.rbi +4 -8
  68. data/rbi/x_twitter_scraper/models/x/tweet_get_replies_params.rbi +68 -8
  69. data/rbi/x_twitter_scraper/models/x/tweet_get_replies_response.rbi +527 -0
  70. data/rbi/x_twitter_scraper/models/x/tweet_get_thread_params.rbi +4 -8
  71. data/rbi/x_twitter_scraper/models/x/user_retrieve_likes_params.rbi +4 -8
  72. data/rbi/x_twitter_scraper/models/x/user_retrieve_media_params.rbi +4 -8
  73. data/rbi/x_twitter_scraper/models/x/user_retrieve_mentions_params.rbi +4 -8
  74. data/rbi/x_twitter_scraper/models/x/user_retrieve_replies_params.rbi +4 -8
  75. data/rbi/x_twitter_scraper/models/x/user_retrieve_tweets_params.rbi +4 -8
  76. data/rbi/x_twitter_scraper/models/x_get_article_response.rbi +0 -9
  77. data/rbi/x_twitter_scraper/models/x_get_trends_response.rbi +40 -3
  78. data/rbi/x_twitter_scraper/resources/x/accounts.rbi +1 -1
  79. data/rbi/x_twitter_scraper/resources/x/communities/tweets.rbi +4 -8
  80. data/rbi/x_twitter_scraper/resources/x/communities.rbi +2 -4
  81. data/rbi/x_twitter_scraper/resources/x/lists.rbi +2 -4
  82. data/rbi/x_twitter_scraper/resources/x/tweets.rbi +20 -18
  83. data/rbi/x_twitter_scraper/resources/x/users.rbi +10 -20
  84. data/sig/x_twitter_scraper/models/content_disclosure.rbs +1 -11
  85. data/sig/x_twitter_scraper/models/embedded_tweet.rbs +343 -62
  86. data/sig/x_twitter_scraper/models/search_tweet.rbs +333 -70
  87. data/sig/x_twitter_scraper/models/support/ticket_list_response.rbs +29 -32
  88. data/sig/x_twitter_scraper/models/support/ticket_retrieve_response.rbs +49 -48
  89. data/sig/x_twitter_scraper/models/support/ticket_update_response.rbs +25 -7
  90. data/sig/x_twitter_scraper/models/trend_list_response.rbs +16 -20
  91. data/sig/x_twitter_scraper/models/tweet_media.rbs +146 -15
  92. data/sig/x_twitter_scraper/models/user_profile.rbs +164 -86
  93. data/sig/x_twitter_scraper/models/x/account_connection_attempt_retrieve_response.rbs +50 -33
  94. data/sig/x_twitter_scraper/models/x/account_connection_challenge_submit_response.rbs +5 -5
  95. data/sig/x_twitter_scraper/models/x/account_create_response.rbs +147 -1
  96. data/sig/x_twitter_scraper/models/x/account_reauth_response.rbs +5 -5
  97. data/sig/x_twitter_scraper/models/x/community_retrieve_info_response.rbs +0 -14
  98. data/sig/x_twitter_scraper/models/x/tweet_author.rbs +11 -3
  99. data/sig/x_twitter_scraper/models/x/tweet_detail.rbs +333 -70
  100. data/sig/x_twitter_scraper/models/x/tweet_get_replies_params.rbs +26 -0
  101. data/sig/x_twitter_scraper/models/x/tweet_get_replies_response.rbs +274 -0
  102. data/sig/x_twitter_scraper/models/x_get_article_response.rbs +0 -7
  103. data/sig/x_twitter_scraper/models/x_get_trends_response.rbs +25 -3
  104. data/sig/x_twitter_scraper/resources/x/accounts.rbs +1 -1
  105. data/sig/x_twitter_scraper/resources/x/tweets.rbs +3 -1
  106. metadata +4 -1
@@ -39,6 +39,15 @@ module XTwitterScraper
39
39
  sig { returns(Integer) }
40
40
  attr_accessor :view_count
41
41
 
42
+ # Article metadata attached to a tweet.
43
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::Article)) }
44
+ attr_reader :article
45
+
46
+ sig do
47
+ params(article: XTwitterScraper::EmbeddedTweet::Article::OrHash).void
48
+ end
49
+ attr_writer :article
50
+
42
51
  # X user profile with bio, follower counts, and verification status.
43
52
  sig { returns(T.nilable(XTwitterScraper::UserProfile)) }
44
53
  attr_reader :author
@@ -46,6 +55,24 @@ module XTwitterScraper
46
55
  sig { params(author: XTwitterScraper::UserProfile::OrHash).void }
47
56
  attr_writer :author
48
57
 
58
+ # Public card metadata attached to a tweet.
59
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::Card)) }
60
+ attr_reader :card
61
+
62
+ sig { params(card: XTwitterScraper::EmbeddedTweet::Card::OrHash).void }
63
+ attr_writer :card
64
+
65
+ # Community Note presentation metadata returned by X.
66
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::CommunityNote)) }
67
+ attr_reader :community_note
68
+
69
+ sig do
70
+ params(
71
+ community_note: XTwitterScraper::EmbeddedTweet::CommunityNote::OrHash
72
+ ).void
73
+ end
74
+ attr_writer :community_note
75
+
49
76
  # Content disclosure metadata shown by X when a tweet is labeled as paid
50
77
  # partnership content or AI-generated media.
51
78
  sig { returns(T.nilable(XTwitterScraper::ContentDisclosure)) }
@@ -76,6 +103,13 @@ module XTwitterScraper
76
103
  sig { params(display_text_range: T::Array[Integer]).void }
77
104
  attr_writer :display_text_range
78
105
 
106
+ # Edit history metadata returned by X.
107
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::Edit)) }
108
+ attr_reader :edit
109
+
110
+ sig { params(edit: XTwitterScraper::EmbeddedTweet::Edit::OrHash).void }
111
+ attr_writer :edit
112
+
79
113
  sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
80
114
  attr_reader :entities
81
115
 
@@ -124,6 +158,12 @@ module XTwitterScraper
124
158
  sig { params(is_reply: T::Boolean).void }
125
159
  attr_writer :is_reply
126
160
 
161
+ sig { returns(T.nilable(T::Boolean)) }
162
+ attr_reader :is_translatable
163
+
164
+ sig { params(is_translatable: T::Boolean).void }
165
+ attr_writer :is_translatable
166
+
127
167
  sig { returns(T.nilable(String)) }
128
168
  attr_reader :lang
129
169
 
@@ -136,6 +176,60 @@ module XTwitterScraper
136
176
  sig { params(media: T::Array[XTwitterScraper::TweetMedia::OrHash]).void }
137
177
  attr_writer :media
138
178
 
179
+ # Complete Note Tweet content and rich-text metadata.
180
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::NoteTweet)) }
181
+ attr_reader :note_tweet
182
+
183
+ sig do
184
+ params(
185
+ note_tweet: XTwitterScraper::EmbeddedTweet::NoteTweet::OrHash
186
+ ).void
187
+ end
188
+ attr_writer :note_tweet
189
+
190
+ # Public place metadata attached to a tweet.
191
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::Place)) }
192
+ attr_reader :place
193
+
194
+ sig { params(place: XTwitterScraper::EmbeddedTweet::Place::OrHash).void }
195
+ attr_writer :place
196
+
197
+ sig { returns(T.nilable(T::Boolean)) }
198
+ attr_reader :possibly_sensitive
199
+
200
+ sig { params(possibly_sensitive: T::Boolean).void }
201
+ attr_writer :possibly_sensitive
202
+
203
+ # Engagement counts retained from a prior tweet edit.
204
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet::PreviousCounts)) }
205
+ attr_reader :previous_counts
206
+
207
+ sig do
208
+ params(
209
+ previous_counts:
210
+ XTwitterScraper::EmbeddedTweet::PreviousCounts::OrHash
211
+ ).void
212
+ end
213
+ attr_writer :previous_counts
214
+
215
+ # Quoted or retweeted tweet context. Every object includes id, text, and
216
+ # engagement metrics. A zero metric can mean X did not report the count. Author,
217
+ # media, and conversation fields appear when available.
218
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet)) }
219
+ attr_reader :quoted_tweet
220
+
221
+ sig { params(quoted_tweet: XTwitterScraper::EmbeddedTweet).void }
222
+ attr_writer :quoted_tweet
223
+
224
+ # Quoted or retweeted tweet context. Every object includes id, text, and
225
+ # engagement metrics. A zero metric can mean X did not report the count. Author,
226
+ # media, and conversation fields appear when available.
227
+ sig { returns(T.nilable(XTwitterScraper::EmbeddedTweet)) }
228
+ attr_reader :retweeted_tweet
229
+
230
+ sig { params(retweeted_tweet: XTwitterScraper::EmbeddedTweet).void }
231
+ attr_writer :retweeted_tweet
232
+
139
233
  sig { returns(T.nilable(String)) }
140
234
  attr_reader :source
141
235
 
@@ -154,6 +248,12 @@ module XTwitterScraper
154
248
  sig { params(url: String).void }
155
249
  attr_writer :url
156
250
 
251
+ sig { returns(T.nilable(String)) }
252
+ attr_reader :view_state
253
+
254
+ sig { params(view_state: String).void }
255
+ attr_writer :view_state
256
+
157
257
  # Quoted or retweeted tweet context. Every object includes id, text, and
158
258
  # engagement metrics. A zero metric can mean X did not report the count. Author,
159
259
  # media, and conversation fields appear when available.
@@ -167,11 +267,15 @@ module XTwitterScraper
167
267
  retweet_count: Integer,
168
268
  text: String,
169
269
  view_count: Integer,
270
+ article: XTwitterScraper::EmbeddedTweet::Article::OrHash,
170
271
  author: XTwitterScraper::UserProfile::OrHash,
272
+ card: XTwitterScraper::EmbeddedTweet::Card::OrHash,
273
+ community_note: XTwitterScraper::EmbeddedTweet::CommunityNote::OrHash,
171
274
  content_disclosure: XTwitterScraper::ContentDisclosure::OrHash,
172
275
  conversation_id: String,
173
276
  created_at: String,
174
277
  display_text_range: T::Array[Integer],
278
+ edit: XTwitterScraper::EmbeddedTweet::Edit::OrHash,
175
279
  entities: T::Hash[Symbol, T.anything],
176
280
  in_reply_to_id: String,
177
281
  in_reply_to_user_id: String,
@@ -180,11 +284,20 @@ module XTwitterScraper
180
284
  is_note_tweet: T::Boolean,
181
285
  is_quote_status: T::Boolean,
182
286
  is_reply: T::Boolean,
287
+ is_translatable: T::Boolean,
183
288
  lang: String,
184
289
  media: T::Array[XTwitterScraper::TweetMedia::OrHash],
290
+ note_tweet: XTwitterScraper::EmbeddedTweet::NoteTweet::OrHash,
291
+ place: XTwitterScraper::EmbeddedTweet::Place::OrHash,
292
+ possibly_sensitive: T::Boolean,
293
+ previous_counts:
294
+ XTwitterScraper::EmbeddedTweet::PreviousCounts::OrHash,
295
+ quoted_tweet: XTwitterScraper::EmbeddedTweet,
296
+ retweeted_tweet: XTwitterScraper::EmbeddedTweet,
185
297
  source: String,
186
298
  type: String,
187
- url: String
299
+ url: String,
300
+ view_state: String
188
301
  ).returns(T.attached_class)
189
302
  end
190
303
  def self.new(
@@ -196,14 +309,22 @@ module XTwitterScraper
196
309
  retweet_count:,
197
310
  text:,
198
311
  view_count:,
312
+ # Article metadata attached to a tweet.
313
+ article: nil,
199
314
  # X user profile with bio, follower counts, and verification status.
200
315
  author: nil,
316
+ # Public card metadata attached to a tweet.
317
+ card: nil,
318
+ # Community Note presentation metadata returned by X.
319
+ community_note: nil,
201
320
  # Content disclosure metadata shown by X when a tweet is labeled as paid
202
321
  # partnership content or AI-generated media.
203
322
  content_disclosure: nil,
204
323
  conversation_id: nil,
205
324
  created_at: nil,
206
325
  display_text_range: nil,
326
+ # Edit history metadata returned by X.
327
+ edit: nil,
207
328
  entities: nil,
208
329
  in_reply_to_id: nil,
209
330
  in_reply_to_user_id: nil,
@@ -212,11 +333,28 @@ module XTwitterScraper
212
333
  is_note_tweet: nil,
213
334
  is_quote_status: nil,
214
335
  is_reply: nil,
336
+ is_translatable: nil,
215
337
  lang: nil,
216
338
  media: nil,
339
+ # Complete Note Tweet content and rich-text metadata.
340
+ note_tweet: nil,
341
+ # Public place metadata attached to a tweet.
342
+ place: nil,
343
+ possibly_sensitive: nil,
344
+ # Engagement counts retained from a prior tweet edit.
345
+ previous_counts: nil,
346
+ # Quoted or retweeted tweet context. Every object includes id, text, and
347
+ # engagement metrics. A zero metric can mean X did not report the count. Author,
348
+ # media, and conversation fields appear when available.
349
+ quoted_tweet: nil,
350
+ # Quoted or retweeted tweet context. Every object includes id, text, and
351
+ # engagement metrics. A zero metric can mean X did not report the count. Author,
352
+ # media, and conversation fields appear when available.
353
+ retweeted_tweet: nil,
217
354
  source: nil,
218
355
  type: nil,
219
- url: nil
356
+ url: nil,
357
+ view_state: nil
220
358
  )
221
359
  end
222
360
 
@@ -231,11 +369,15 @@ module XTwitterScraper
231
369
  retweet_count: Integer,
232
370
  text: String,
233
371
  view_count: Integer,
372
+ article: XTwitterScraper::EmbeddedTweet::Article,
234
373
  author: XTwitterScraper::UserProfile,
374
+ card: XTwitterScraper::EmbeddedTweet::Card,
375
+ community_note: XTwitterScraper::EmbeddedTweet::CommunityNote,
235
376
  content_disclosure: XTwitterScraper::ContentDisclosure,
236
377
  conversation_id: String,
237
378
  created_at: String,
238
379
  display_text_range: T::Array[Integer],
380
+ edit: XTwitterScraper::EmbeddedTweet::Edit,
239
381
  entities: T::Hash[Symbol, T.anything],
240
382
  in_reply_to_id: String,
241
383
  in_reply_to_user_id: String,
@@ -244,16 +386,579 @@ module XTwitterScraper
244
386
  is_note_tweet: T::Boolean,
245
387
  is_quote_status: T::Boolean,
246
388
  is_reply: T::Boolean,
389
+ is_translatable: T::Boolean,
247
390
  lang: String,
248
391
  media: T::Array[XTwitterScraper::TweetMedia],
392
+ note_tweet: XTwitterScraper::EmbeddedTweet::NoteTweet,
393
+ place: XTwitterScraper::EmbeddedTweet::Place,
394
+ possibly_sensitive: T::Boolean,
395
+ previous_counts: XTwitterScraper::EmbeddedTweet::PreviousCounts,
396
+ quoted_tweet: XTwitterScraper::EmbeddedTweet,
397
+ retweeted_tweet: XTwitterScraper::EmbeddedTweet,
249
398
  source: String,
250
399
  type: String,
251
- url: String
400
+ url: String,
401
+ view_state: String
252
402
  }
253
403
  )
254
404
  end
255
405
  def to_hash
256
406
  end
407
+
408
+ class Article < XTwitterScraper::Internal::Type::BaseModel
409
+ OrHash =
410
+ T.type_alias do
411
+ T.any(
412
+ XTwitterScraper::EmbeddedTweet::Article,
413
+ XTwitterScraper::Internal::AnyHash
414
+ )
415
+ end
416
+
417
+ sig { returns(T.nilable(String)) }
418
+ attr_reader :id
419
+
420
+ sig { params(id: String).void }
421
+ attr_writer :id
422
+
423
+ sig { returns(T.nilable(String)) }
424
+ attr_reader :cover_media_url
425
+
426
+ sig { params(cover_media_url: String).void }
427
+ attr_writer :cover_media_url
428
+
429
+ sig { returns(T.nilable(String)) }
430
+ attr_reader :preview_text
431
+
432
+ sig { params(preview_text: String).void }
433
+ attr_writer :preview_text
434
+
435
+ sig { returns(T.nilable(String)) }
436
+ attr_reader :title
437
+
438
+ sig { params(title: String).void }
439
+ attr_writer :title
440
+
441
+ # Article metadata attached to a tweet.
442
+ sig do
443
+ params(
444
+ id: String,
445
+ cover_media_url: String,
446
+ preview_text: String,
447
+ title: String
448
+ ).returns(T.attached_class)
449
+ end
450
+ def self.new(
451
+ id: nil,
452
+ cover_media_url: nil,
453
+ preview_text: nil,
454
+ title: nil
455
+ )
456
+ end
457
+
458
+ sig do
459
+ override.returns(
460
+ {
461
+ id: String,
462
+ cover_media_url: String,
463
+ preview_text: String,
464
+ title: String
465
+ }
466
+ )
467
+ end
468
+ def to_hash
469
+ end
470
+ end
471
+
472
+ class Card < XTwitterScraper::Internal::Type::BaseModel
473
+ OrHash =
474
+ T.type_alias do
475
+ T.any(
476
+ XTwitterScraper::EmbeddedTweet::Card,
477
+ XTwitterScraper::Internal::AnyHash
478
+ )
479
+ end
480
+
481
+ sig { returns(T.nilable(String)) }
482
+ attr_reader :id
483
+
484
+ sig { params(id: String).void }
485
+ attr_writer :id
486
+
487
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
488
+ attr_reader :binding_values
489
+
490
+ sig { params(binding_values: T::Hash[Symbol, T.anything]).void }
491
+ attr_writer :binding_values
492
+
493
+ sig { returns(T.nilable(String)) }
494
+ attr_reader :name
495
+
496
+ sig { params(name: String).void }
497
+ attr_writer :name
498
+
499
+ sig { returns(T.nilable(String)) }
500
+ attr_reader :url
501
+
502
+ sig { params(url: String).void }
503
+ attr_writer :url
504
+
505
+ # Public card metadata attached to a tweet.
506
+ sig do
507
+ params(
508
+ id: String,
509
+ binding_values: T::Hash[Symbol, T.anything],
510
+ name: String,
511
+ url: String
512
+ ).returns(T.attached_class)
513
+ end
514
+ def self.new(id: nil, binding_values: nil, name: nil, url: nil)
515
+ end
516
+
517
+ sig do
518
+ override.returns(
519
+ {
520
+ id: String,
521
+ binding_values: T::Hash[Symbol, T.anything],
522
+ name: String,
523
+ url: String
524
+ }
525
+ )
526
+ end
527
+ def to_hash
528
+ end
529
+ end
530
+
531
+ class CommunityNote < XTwitterScraper::Internal::Type::BaseModel
532
+ OrHash =
533
+ T.type_alias do
534
+ T.any(
535
+ XTwitterScraper::EmbeddedTweet::CommunityNote,
536
+ XTwitterScraper::Internal::AnyHash
537
+ )
538
+ end
539
+
540
+ sig { returns(T.nilable(String)) }
541
+ attr_reader :id
542
+
543
+ sig { params(id: String).void }
544
+ attr_writer :id
545
+
546
+ sig { returns(T.nilable(String)) }
547
+ attr_reader :destination_url
548
+
549
+ sig { params(destination_url: String).void }
550
+ attr_writer :destination_url
551
+
552
+ sig { returns(T.nilable(String)) }
553
+ attr_reader :footer
554
+
555
+ sig { params(footer: String).void }
556
+ attr_writer :footer
557
+
558
+ sig { returns(T.nilable(String)) }
559
+ attr_reader :short_title
560
+
561
+ sig { params(short_title: String).void }
562
+ attr_writer :short_title
563
+
564
+ sig { returns(T.nilable(String)) }
565
+ attr_reader :subtitle
566
+
567
+ sig { params(subtitle: String).void }
568
+ attr_writer :subtitle
569
+
570
+ sig { returns(T.nilable(String)) }
571
+ attr_reader :title
572
+
573
+ sig { params(title: String).void }
574
+ attr_writer :title
575
+
576
+ sig { returns(T.nilable(String)) }
577
+ attr_reader :visual_style
578
+
579
+ sig { params(visual_style: String).void }
580
+ attr_writer :visual_style
581
+
582
+ # Community Note presentation metadata returned by X.
583
+ sig do
584
+ params(
585
+ id: String,
586
+ destination_url: String,
587
+ footer: String,
588
+ short_title: String,
589
+ subtitle: String,
590
+ title: String,
591
+ visual_style: String
592
+ ).returns(T.attached_class)
593
+ end
594
+ def self.new(
595
+ id: nil,
596
+ destination_url: nil,
597
+ footer: nil,
598
+ short_title: nil,
599
+ subtitle: nil,
600
+ title: nil,
601
+ visual_style: nil
602
+ )
603
+ end
604
+
605
+ sig do
606
+ override.returns(
607
+ {
608
+ id: String,
609
+ destination_url: String,
610
+ footer: String,
611
+ short_title: String,
612
+ subtitle: String,
613
+ title: String,
614
+ visual_style: String
615
+ }
616
+ )
617
+ end
618
+ def to_hash
619
+ end
620
+ end
621
+
622
+ class Edit < XTwitterScraper::Internal::Type::BaseModel
623
+ OrHash =
624
+ T.type_alias do
625
+ T.any(
626
+ XTwitterScraper::EmbeddedTweet::Edit,
627
+ XTwitterScraper::Internal::AnyHash
628
+ )
629
+ end
630
+
631
+ sig { returns(T.nilable(String)) }
632
+ attr_reader :editable_until_msecs
633
+
634
+ sig { params(editable_until_msecs: String).void }
635
+ attr_writer :editable_until_msecs
636
+
637
+ sig { returns(T.nilable(T::Array[String])) }
638
+ attr_reader :edit_tweet_ids
639
+
640
+ sig { params(edit_tweet_ids: T::Array[String]).void }
641
+ attr_writer :edit_tweet_ids
642
+
643
+ # Edit history metadata returned by X.
644
+ sig do
645
+ params(
646
+ editable_until_msecs: String,
647
+ edit_tweet_ids: T::Array[String]
648
+ ).returns(T.attached_class)
649
+ end
650
+ def self.new(editable_until_msecs: nil, edit_tweet_ids: nil)
651
+ end
652
+
653
+ sig do
654
+ override.returns(
655
+ { editable_until_msecs: String, edit_tweet_ids: T::Array[String] }
656
+ )
657
+ end
658
+ def to_hash
659
+ end
660
+ end
661
+
662
+ class NoteTweet < XTwitterScraper::Internal::Type::BaseModel
663
+ OrHash =
664
+ T.type_alias do
665
+ T.any(
666
+ XTwitterScraper::EmbeddedTweet::NoteTweet,
667
+ XTwitterScraper::Internal::AnyHash
668
+ )
669
+ end
670
+
671
+ sig { returns(String) }
672
+ attr_accessor :text
673
+
674
+ sig { returns(T.nilable(String)) }
675
+ attr_reader :id
676
+
677
+ sig { params(id: String).void }
678
+ attr_writer :id
679
+
680
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
681
+ attr_reader :entities
682
+
683
+ sig { params(entities: T::Hash[Symbol, T.anything]).void }
684
+ attr_writer :entities
685
+
686
+ sig { returns(T.nilable(T::Boolean)) }
687
+ attr_reader :is_expandable
688
+
689
+ sig { params(is_expandable: T::Boolean).void }
690
+ attr_writer :is_expandable
691
+
692
+ sig do
693
+ returns(
694
+ T.nilable(
695
+ T::Array[XTwitterScraper::EmbeddedTweet::NoteTweet::RichtextTag]
696
+ )
697
+ )
698
+ end
699
+ attr_reader :richtext_tags
700
+
701
+ sig do
702
+ params(
703
+ richtext_tags:
704
+ T::Array[
705
+ XTwitterScraper::EmbeddedTweet::NoteTweet::RichtextTag::OrHash
706
+ ]
707
+ ).void
708
+ end
709
+ attr_writer :richtext_tags
710
+
711
+ # Complete Note Tweet content and rich-text metadata.
712
+ sig do
713
+ params(
714
+ text: String,
715
+ id: String,
716
+ entities: T::Hash[Symbol, T.anything],
717
+ is_expandable: T::Boolean,
718
+ richtext_tags:
719
+ T::Array[
720
+ XTwitterScraper::EmbeddedTweet::NoteTweet::RichtextTag::OrHash
721
+ ]
722
+ ).returns(T.attached_class)
723
+ end
724
+ def self.new(
725
+ text:,
726
+ id: nil,
727
+ entities: nil,
728
+ is_expandable: nil,
729
+ richtext_tags: nil
730
+ )
731
+ end
732
+
733
+ sig do
734
+ override.returns(
735
+ {
736
+ text: String,
737
+ id: String,
738
+ entities: T::Hash[Symbol, T.anything],
739
+ is_expandable: T::Boolean,
740
+ richtext_tags:
741
+ T::Array[XTwitterScraper::EmbeddedTweet::NoteTweet::RichtextTag]
742
+ }
743
+ )
744
+ end
745
+ def to_hash
746
+ end
747
+
748
+ class RichtextTag < XTwitterScraper::Internal::Type::BaseModel
749
+ OrHash =
750
+ T.type_alias do
751
+ T.any(
752
+ XTwitterScraper::EmbeddedTweet::NoteTweet::RichtextTag,
753
+ XTwitterScraper::Internal::AnyHash
754
+ )
755
+ end
756
+
757
+ sig { returns(Integer) }
758
+ attr_accessor :from_index
759
+
760
+ sig { returns(Integer) }
761
+ attr_accessor :to_index
762
+
763
+ sig { returns(T::Array[String]) }
764
+ attr_accessor :types
765
+
766
+ sig do
767
+ params(
768
+ from_index: Integer,
769
+ to_index: Integer,
770
+ types: T::Array[String]
771
+ ).returns(T.attached_class)
772
+ end
773
+ def self.new(from_index:, to_index:, types:)
774
+ end
775
+
776
+ sig do
777
+ override.returns(
778
+ {
779
+ from_index: Integer,
780
+ to_index: Integer,
781
+ types: T::Array[String]
782
+ }
783
+ )
784
+ end
785
+ def to_hash
786
+ end
787
+ end
788
+ end
789
+
790
+ class Place < XTwitterScraper::Internal::Type::BaseModel
791
+ OrHash =
792
+ T.type_alias do
793
+ T.any(
794
+ XTwitterScraper::EmbeddedTweet::Place,
795
+ XTwitterScraper::Internal::AnyHash
796
+ )
797
+ end
798
+
799
+ sig { returns(T.nilable(String)) }
800
+ attr_reader :id
801
+
802
+ sig { params(id: String).void }
803
+ attr_writer :id
804
+
805
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
806
+ attr_reader :bounding_box
807
+
808
+ sig { params(bounding_box: T::Hash[Symbol, T.anything]).void }
809
+ attr_writer :bounding_box
810
+
811
+ sig { returns(T.nilable(String)) }
812
+ attr_reader :country
813
+
814
+ sig { params(country: String).void }
815
+ attr_writer :country
816
+
817
+ sig { returns(T.nilable(String)) }
818
+ attr_reader :country_code
819
+
820
+ sig { params(country_code: String).void }
821
+ attr_writer :country_code
822
+
823
+ sig { returns(T.nilable(String)) }
824
+ attr_reader :full_name
825
+
826
+ sig { params(full_name: String).void }
827
+ attr_writer :full_name
828
+
829
+ sig { returns(T.nilable(String)) }
830
+ attr_reader :name
831
+
832
+ sig { params(name: String).void }
833
+ attr_writer :name
834
+
835
+ sig { returns(T.nilable(String)) }
836
+ attr_reader :place_type
837
+
838
+ sig { params(place_type: String).void }
839
+ attr_writer :place_type
840
+
841
+ sig { returns(T.nilable(String)) }
842
+ attr_reader :url
843
+
844
+ sig { params(url: String).void }
845
+ attr_writer :url
846
+
847
+ # Public place metadata attached to a tweet.
848
+ sig do
849
+ params(
850
+ id: String,
851
+ bounding_box: T::Hash[Symbol, T.anything],
852
+ country: String,
853
+ country_code: String,
854
+ full_name: String,
855
+ name: String,
856
+ place_type: String,
857
+ url: String
858
+ ).returns(T.attached_class)
859
+ end
860
+ def self.new(
861
+ id: nil,
862
+ bounding_box: nil,
863
+ country: nil,
864
+ country_code: nil,
865
+ full_name: nil,
866
+ name: nil,
867
+ place_type: nil,
868
+ url: nil
869
+ )
870
+ end
871
+
872
+ sig do
873
+ override.returns(
874
+ {
875
+ id: String,
876
+ bounding_box: T::Hash[Symbol, T.anything],
877
+ country: String,
878
+ country_code: String,
879
+ full_name: String,
880
+ name: String,
881
+ place_type: String,
882
+ url: String
883
+ }
884
+ )
885
+ end
886
+ def to_hash
887
+ end
888
+ end
889
+
890
+ class PreviousCounts < XTwitterScraper::Internal::Type::BaseModel
891
+ OrHash =
892
+ T.type_alias do
893
+ T.any(
894
+ XTwitterScraper::EmbeddedTweet::PreviousCounts,
895
+ XTwitterScraper::Internal::AnyHash
896
+ )
897
+ end
898
+
899
+ sig { returns(T.nilable(Integer)) }
900
+ attr_reader :bookmark_count
901
+
902
+ sig { params(bookmark_count: Integer).void }
903
+ attr_writer :bookmark_count
904
+
905
+ sig { returns(T.nilable(Integer)) }
906
+ attr_reader :like_count
907
+
908
+ sig { params(like_count: Integer).void }
909
+ attr_writer :like_count
910
+
911
+ sig { returns(T.nilable(Integer)) }
912
+ attr_reader :quote_count
913
+
914
+ sig { params(quote_count: Integer).void }
915
+ attr_writer :quote_count
916
+
917
+ sig { returns(T.nilable(Integer)) }
918
+ attr_reader :reply_count
919
+
920
+ sig { params(reply_count: Integer).void }
921
+ attr_writer :reply_count
922
+
923
+ sig { returns(T.nilable(Integer)) }
924
+ attr_reader :retweet_count
925
+
926
+ sig { params(retweet_count: Integer).void }
927
+ attr_writer :retweet_count
928
+
929
+ # Engagement counts retained from a prior tweet edit.
930
+ sig do
931
+ params(
932
+ bookmark_count: Integer,
933
+ like_count: Integer,
934
+ quote_count: Integer,
935
+ reply_count: Integer,
936
+ retweet_count: Integer
937
+ ).returns(T.attached_class)
938
+ end
939
+ def self.new(
940
+ bookmark_count: nil,
941
+ like_count: nil,
942
+ quote_count: nil,
943
+ reply_count: nil,
944
+ retweet_count: nil
945
+ )
946
+ end
947
+
948
+ sig do
949
+ override.returns(
950
+ {
951
+ bookmark_count: Integer,
952
+ like_count: Integer,
953
+ quote_count: Integer,
954
+ reply_count: Integer,
955
+ retweet_count: Integer
956
+ }
957
+ )
958
+ end
959
+ def to_hash
960
+ end
961
+ end
257
962
  end
258
963
  end
259
964
  end