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
@@ -40,6 +40,15 @@ module XTwitterScraper
40
40
  sig { returns(Integer) }
41
41
  attr_accessor :view_count
42
42
 
43
+ # Article metadata attached to a tweet.
44
+ sig { returns(T.nilable(XTwitterScraper::X::TweetDetail::Article)) }
45
+ attr_reader :article
46
+
47
+ sig do
48
+ params(article: XTwitterScraper::X::TweetDetail::Article::OrHash).void
49
+ end
50
+ attr_writer :article
51
+
43
52
  # Tweet author profile. The lookup route always includes follower count and
44
53
  # verification state. Other profile fields appear when available.
45
54
  sig { returns(T.nilable(XTwitterScraper::X::TweetAuthor)) }
@@ -48,6 +57,27 @@ module XTwitterScraper
48
57
  sig { params(author: XTwitterScraper::X::TweetAuthor::OrHash).void }
49
58
  attr_writer :author
50
59
 
60
+ # Public card metadata attached to a tweet.
61
+ sig { returns(T.nilable(XTwitterScraper::X::TweetDetail::Card)) }
62
+ attr_reader :card
63
+
64
+ sig { params(card: XTwitterScraper::X::TweetDetail::Card::OrHash).void }
65
+ attr_writer :card
66
+
67
+ # Community Note presentation metadata returned by X.
68
+ sig do
69
+ returns(T.nilable(XTwitterScraper::X::TweetDetail::CommunityNote))
70
+ end
71
+ attr_reader :community_note
72
+
73
+ sig do
74
+ params(
75
+ community_note:
76
+ XTwitterScraper::X::TweetDetail::CommunityNote::OrHash
77
+ ).void
78
+ end
79
+ attr_writer :community_note
80
+
51
81
  # Content disclosure metadata shown by X when a tweet is labeled as paid
52
82
  # partnership content or AI-generated media.
53
83
  sig { returns(T.nilable(XTwitterScraper::ContentDisclosure)) }
@@ -80,6 +110,13 @@ module XTwitterScraper
80
110
  sig { params(display_text_range: T::Array[Integer]).void }
81
111
  attr_writer :display_text_range
82
112
 
113
+ # Edit history metadata returned by X.
114
+ sig { returns(T.nilable(XTwitterScraper::X::TweetDetail::Edit)) }
115
+ attr_reader :edit
116
+
117
+ sig { params(edit: XTwitterScraper::X::TweetDetail::Edit::OrHash).void }
118
+ attr_writer :edit
119
+
83
120
  # Parsed entities from the tweet text (URLs, mentions, hashtags, media)
84
121
  sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
85
122
  attr_reader :entities
@@ -136,6 +173,12 @@ module XTwitterScraper
136
173
  sig { params(is_reply: T::Boolean).void }
137
174
  attr_writer :is_reply
138
175
 
176
+ sig { returns(T.nilable(T::Boolean)) }
177
+ attr_reader :is_translatable
178
+
179
+ sig { params(is_translatable: T::Boolean).void }
180
+ attr_writer :is_translatable
181
+
139
182
  # Tweet language code
140
183
  sig { returns(T.nilable(String)) }
141
184
  attr_reader :lang
@@ -152,6 +195,46 @@ module XTwitterScraper
152
195
  end
153
196
  attr_writer :media
154
197
 
198
+ # Complete Note Tweet content and rich-text metadata.
199
+ sig { returns(T.nilable(XTwitterScraper::X::TweetDetail::NoteTweet)) }
200
+ attr_reader :note_tweet
201
+
202
+ sig do
203
+ params(
204
+ note_tweet: XTwitterScraper::X::TweetDetail::NoteTweet::OrHash
205
+ ).void
206
+ end
207
+ attr_writer :note_tweet
208
+
209
+ # Public place metadata attached to a tweet.
210
+ sig { returns(T.nilable(XTwitterScraper::X::TweetDetail::Place)) }
211
+ attr_reader :place
212
+
213
+ sig do
214
+ params(place: XTwitterScraper::X::TweetDetail::Place::OrHash).void
215
+ end
216
+ attr_writer :place
217
+
218
+ sig { returns(T.nilable(T::Boolean)) }
219
+ attr_reader :possibly_sensitive
220
+
221
+ sig { params(possibly_sensitive: T::Boolean).void }
222
+ attr_writer :possibly_sensitive
223
+
224
+ # Engagement counts retained from a prior tweet edit.
225
+ sig do
226
+ returns(T.nilable(XTwitterScraper::X::TweetDetail::PreviousCounts))
227
+ end
228
+ attr_reader :previous_counts
229
+
230
+ sig do
231
+ params(
232
+ previous_counts:
233
+ XTwitterScraper::X::TweetDetail::PreviousCounts::OrHash
234
+ ).void
235
+ end
236
+ attr_writer :previous_counts
237
+
155
238
  # Quoted or retweeted tweet context. Every object includes id, text, and
156
239
  # engagement metrics. A zero metric can mean X did not report the count. Author,
157
240
  # media, and conversation fields appear when available.
@@ -195,6 +278,12 @@ module XTwitterScraper
195
278
  sig { params(url: String).void }
196
279
  attr_writer :url
197
280
 
281
+ sig { returns(T.nilable(String)) }
282
+ attr_reader :view_state
283
+
284
+ sig { params(view_state: String).void }
285
+ attr_writer :view_state
286
+
198
287
  # Full tweet with text, engagement metrics, media, and metadata. A zero metric can
199
288
  # mean X did not report the count.
200
289
  sig do
@@ -207,11 +296,16 @@ module XTwitterScraper
207
296
  retweet_count: Integer,
208
297
  text: String,
209
298
  view_count: Integer,
299
+ article: XTwitterScraper::X::TweetDetail::Article::OrHash,
210
300
  author: XTwitterScraper::X::TweetAuthor::OrHash,
301
+ card: XTwitterScraper::X::TweetDetail::Card::OrHash,
302
+ community_note:
303
+ XTwitterScraper::X::TweetDetail::CommunityNote::OrHash,
211
304
  content_disclosure: XTwitterScraper::ContentDisclosure::OrHash,
212
305
  conversation_id: String,
213
306
  created_at: String,
214
307
  display_text_range: T::Array[Integer],
308
+ edit: XTwitterScraper::X::TweetDetail::Edit::OrHash,
215
309
  entities: T::Hash[Symbol, T.anything],
216
310
  in_reply_to_id: String,
217
311
  in_reply_to_user_id: String,
@@ -220,13 +314,20 @@ module XTwitterScraper
220
314
  is_note_tweet: T::Boolean,
221
315
  is_quote_status: T::Boolean,
222
316
  is_reply: T::Boolean,
317
+ is_translatable: T::Boolean,
223
318
  lang: String,
224
319
  media: T::Array[XTwitterScraper::TweetMedia::OrHash],
320
+ note_tweet: XTwitterScraper::X::TweetDetail::NoteTweet::OrHash,
321
+ place: XTwitterScraper::X::TweetDetail::Place::OrHash,
322
+ possibly_sensitive: T::Boolean,
323
+ previous_counts:
324
+ XTwitterScraper::X::TweetDetail::PreviousCounts::OrHash,
225
325
  quoted_tweet: XTwitterScraper::EmbeddedTweet::OrHash,
226
326
  retweeted_tweet: XTwitterScraper::EmbeddedTweet::OrHash,
227
327
  source: String,
228
328
  type: String,
229
- url: String
329
+ url: String,
330
+ view_state: String
230
331
  ).returns(T.attached_class)
231
332
  end
232
333
  def self.new(
@@ -238,9 +339,15 @@ module XTwitterScraper
238
339
  retweet_count:,
239
340
  text:,
240
341
  view_count:,
342
+ # Article metadata attached to a tweet.
343
+ article: nil,
241
344
  # Tweet author profile. The lookup route always includes follower count and
242
345
  # verification state. Other profile fields appear when available.
243
346
  author: nil,
347
+ # Public card metadata attached to a tweet.
348
+ card: nil,
349
+ # Community Note presentation metadata returned by X.
350
+ community_note: nil,
244
351
  # Content disclosure metadata shown by X when a tweet is labeled as paid
245
352
  # partnership content or AI-generated media.
246
353
  content_disclosure: nil,
@@ -249,6 +356,8 @@ module XTwitterScraper
249
356
  created_at: nil,
250
357
  # Start and end offsets for rendered tweet text
251
358
  display_text_range: nil,
359
+ # Edit history metadata returned by X.
360
+ edit: nil,
252
361
  # Parsed entities from the tweet text (URLs, mentions, hashtags, media)
253
362
  entities: nil,
254
363
  # Tweet ID being replied to
@@ -265,10 +374,18 @@ module XTwitterScraper
265
374
  is_quote_status: nil,
266
375
  # Whether this tweet is a reply to another tweet
267
376
  is_reply: nil,
377
+ is_translatable: nil,
268
378
  # Tweet language code
269
379
  lang: nil,
270
380
  # Attached media items, omitted when the tweet has no media
271
381
  media: nil,
382
+ # Complete Note Tweet content and rich-text metadata.
383
+ note_tweet: nil,
384
+ # Public place metadata attached to a tweet.
385
+ place: nil,
386
+ possibly_sensitive: nil,
387
+ # Engagement counts retained from a prior tweet edit.
388
+ previous_counts: nil,
272
389
  # Quoted or retweeted tweet context. Every object includes id, text, and
273
390
  # engagement metrics. A zero metric can mean X did not report the count. Author,
274
391
  # media, and conversation fields appear when available.
@@ -282,7 +399,8 @@ module XTwitterScraper
282
399
  # Tweet result type
283
400
  type: nil,
284
401
  # Tweet permalink URL
285
- url: nil
402
+ url: nil,
403
+ view_state: nil
286
404
  )
287
405
  end
288
406
 
@@ -297,11 +415,15 @@ module XTwitterScraper
297
415
  retweet_count: Integer,
298
416
  text: String,
299
417
  view_count: Integer,
418
+ article: XTwitterScraper::X::TweetDetail::Article,
300
419
  author: XTwitterScraper::X::TweetAuthor,
420
+ card: XTwitterScraper::X::TweetDetail::Card,
421
+ community_note: XTwitterScraper::X::TweetDetail::CommunityNote,
301
422
  content_disclosure: XTwitterScraper::ContentDisclosure,
302
423
  conversation_id: String,
303
424
  created_at: String,
304
425
  display_text_range: T::Array[Integer],
426
+ edit: XTwitterScraper::X::TweetDetail::Edit,
305
427
  entities: T::Hash[Symbol, T.anything],
306
428
  in_reply_to_id: String,
307
429
  in_reply_to_user_id: String,
@@ -310,18 +432,583 @@ module XTwitterScraper
310
432
  is_note_tweet: T::Boolean,
311
433
  is_quote_status: T::Boolean,
312
434
  is_reply: T::Boolean,
435
+ is_translatable: T::Boolean,
313
436
  lang: String,
314
437
  media: T::Array[XTwitterScraper::TweetMedia],
438
+ note_tweet: XTwitterScraper::X::TweetDetail::NoteTweet,
439
+ place: XTwitterScraper::X::TweetDetail::Place,
440
+ possibly_sensitive: T::Boolean,
441
+ previous_counts: XTwitterScraper::X::TweetDetail::PreviousCounts,
315
442
  quoted_tweet: XTwitterScraper::EmbeddedTweet,
316
443
  retweeted_tweet: XTwitterScraper::EmbeddedTweet,
317
444
  source: String,
318
445
  type: String,
319
- url: String
446
+ url: String,
447
+ view_state: String
320
448
  }
321
449
  )
322
450
  end
323
451
  def to_hash
324
452
  end
453
+
454
+ class Article < XTwitterScraper::Internal::Type::BaseModel
455
+ OrHash =
456
+ T.type_alias do
457
+ T.any(
458
+ XTwitterScraper::X::TweetDetail::Article,
459
+ XTwitterScraper::Internal::AnyHash
460
+ )
461
+ end
462
+
463
+ sig { returns(T.nilable(String)) }
464
+ attr_reader :id
465
+
466
+ sig { params(id: String).void }
467
+ attr_writer :id
468
+
469
+ sig { returns(T.nilable(String)) }
470
+ attr_reader :cover_media_url
471
+
472
+ sig { params(cover_media_url: String).void }
473
+ attr_writer :cover_media_url
474
+
475
+ sig { returns(T.nilable(String)) }
476
+ attr_reader :preview_text
477
+
478
+ sig { params(preview_text: String).void }
479
+ attr_writer :preview_text
480
+
481
+ sig { returns(T.nilable(String)) }
482
+ attr_reader :title
483
+
484
+ sig { params(title: String).void }
485
+ attr_writer :title
486
+
487
+ # Article metadata attached to a tweet.
488
+ sig do
489
+ params(
490
+ id: String,
491
+ cover_media_url: String,
492
+ preview_text: String,
493
+ title: String
494
+ ).returns(T.attached_class)
495
+ end
496
+ def self.new(
497
+ id: nil,
498
+ cover_media_url: nil,
499
+ preview_text: nil,
500
+ title: nil
501
+ )
502
+ end
503
+
504
+ sig do
505
+ override.returns(
506
+ {
507
+ id: String,
508
+ cover_media_url: String,
509
+ preview_text: String,
510
+ title: String
511
+ }
512
+ )
513
+ end
514
+ def to_hash
515
+ end
516
+ end
517
+
518
+ class Card < XTwitterScraper::Internal::Type::BaseModel
519
+ OrHash =
520
+ T.type_alias do
521
+ T.any(
522
+ XTwitterScraper::X::TweetDetail::Card,
523
+ XTwitterScraper::Internal::AnyHash
524
+ )
525
+ end
526
+
527
+ sig { returns(T.nilable(String)) }
528
+ attr_reader :id
529
+
530
+ sig { params(id: String).void }
531
+ attr_writer :id
532
+
533
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
534
+ attr_reader :binding_values
535
+
536
+ sig { params(binding_values: T::Hash[Symbol, T.anything]).void }
537
+ attr_writer :binding_values
538
+
539
+ sig { returns(T.nilable(String)) }
540
+ attr_reader :name
541
+
542
+ sig { params(name: String).void }
543
+ attr_writer :name
544
+
545
+ sig { returns(T.nilable(String)) }
546
+ attr_reader :url
547
+
548
+ sig { params(url: String).void }
549
+ attr_writer :url
550
+
551
+ # Public card metadata attached to a tweet.
552
+ sig do
553
+ params(
554
+ id: String,
555
+ binding_values: T::Hash[Symbol, T.anything],
556
+ name: String,
557
+ url: String
558
+ ).returns(T.attached_class)
559
+ end
560
+ def self.new(id: nil, binding_values: nil, name: nil, url: nil)
561
+ end
562
+
563
+ sig do
564
+ override.returns(
565
+ {
566
+ id: String,
567
+ binding_values: T::Hash[Symbol, T.anything],
568
+ name: String,
569
+ url: String
570
+ }
571
+ )
572
+ end
573
+ def to_hash
574
+ end
575
+ end
576
+
577
+ class CommunityNote < XTwitterScraper::Internal::Type::BaseModel
578
+ OrHash =
579
+ T.type_alias do
580
+ T.any(
581
+ XTwitterScraper::X::TweetDetail::CommunityNote,
582
+ XTwitterScraper::Internal::AnyHash
583
+ )
584
+ end
585
+
586
+ sig { returns(T.nilable(String)) }
587
+ attr_reader :id
588
+
589
+ sig { params(id: String).void }
590
+ attr_writer :id
591
+
592
+ sig { returns(T.nilable(String)) }
593
+ attr_reader :destination_url
594
+
595
+ sig { params(destination_url: String).void }
596
+ attr_writer :destination_url
597
+
598
+ sig { returns(T.nilable(String)) }
599
+ attr_reader :footer
600
+
601
+ sig { params(footer: String).void }
602
+ attr_writer :footer
603
+
604
+ sig { returns(T.nilable(String)) }
605
+ attr_reader :short_title
606
+
607
+ sig { params(short_title: String).void }
608
+ attr_writer :short_title
609
+
610
+ sig { returns(T.nilable(String)) }
611
+ attr_reader :subtitle
612
+
613
+ sig { params(subtitle: String).void }
614
+ attr_writer :subtitle
615
+
616
+ sig { returns(T.nilable(String)) }
617
+ attr_reader :title
618
+
619
+ sig { params(title: String).void }
620
+ attr_writer :title
621
+
622
+ sig { returns(T.nilable(String)) }
623
+ attr_reader :visual_style
624
+
625
+ sig { params(visual_style: String).void }
626
+ attr_writer :visual_style
627
+
628
+ # Community Note presentation metadata returned by X.
629
+ sig do
630
+ params(
631
+ id: String,
632
+ destination_url: String,
633
+ footer: String,
634
+ short_title: String,
635
+ subtitle: String,
636
+ title: String,
637
+ visual_style: String
638
+ ).returns(T.attached_class)
639
+ end
640
+ def self.new(
641
+ id: nil,
642
+ destination_url: nil,
643
+ footer: nil,
644
+ short_title: nil,
645
+ subtitle: nil,
646
+ title: nil,
647
+ visual_style: nil
648
+ )
649
+ end
650
+
651
+ sig do
652
+ override.returns(
653
+ {
654
+ id: String,
655
+ destination_url: String,
656
+ footer: String,
657
+ short_title: String,
658
+ subtitle: String,
659
+ title: String,
660
+ visual_style: String
661
+ }
662
+ )
663
+ end
664
+ def to_hash
665
+ end
666
+ end
667
+
668
+ class Edit < XTwitterScraper::Internal::Type::BaseModel
669
+ OrHash =
670
+ T.type_alias do
671
+ T.any(
672
+ XTwitterScraper::X::TweetDetail::Edit,
673
+ XTwitterScraper::Internal::AnyHash
674
+ )
675
+ end
676
+
677
+ sig { returns(T.nilable(String)) }
678
+ attr_reader :editable_until_msecs
679
+
680
+ sig { params(editable_until_msecs: String).void }
681
+ attr_writer :editable_until_msecs
682
+
683
+ sig { returns(T.nilable(T::Array[String])) }
684
+ attr_reader :edit_tweet_ids
685
+
686
+ sig { params(edit_tweet_ids: T::Array[String]).void }
687
+ attr_writer :edit_tweet_ids
688
+
689
+ # Edit history metadata returned by X.
690
+ sig do
691
+ params(
692
+ editable_until_msecs: String,
693
+ edit_tweet_ids: T::Array[String]
694
+ ).returns(T.attached_class)
695
+ end
696
+ def self.new(editable_until_msecs: nil, edit_tweet_ids: nil)
697
+ end
698
+
699
+ sig do
700
+ override.returns(
701
+ { editable_until_msecs: String, edit_tweet_ids: T::Array[String] }
702
+ )
703
+ end
704
+ def to_hash
705
+ end
706
+ end
707
+
708
+ class NoteTweet < XTwitterScraper::Internal::Type::BaseModel
709
+ OrHash =
710
+ T.type_alias do
711
+ T.any(
712
+ XTwitterScraper::X::TweetDetail::NoteTweet,
713
+ XTwitterScraper::Internal::AnyHash
714
+ )
715
+ end
716
+
717
+ sig { returns(String) }
718
+ attr_accessor :text
719
+
720
+ sig { returns(T.nilable(String)) }
721
+ attr_reader :id
722
+
723
+ sig { params(id: String).void }
724
+ attr_writer :id
725
+
726
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
727
+ attr_reader :entities
728
+
729
+ sig { params(entities: T::Hash[Symbol, T.anything]).void }
730
+ attr_writer :entities
731
+
732
+ sig { returns(T.nilable(T::Boolean)) }
733
+ attr_reader :is_expandable
734
+
735
+ sig { params(is_expandable: T::Boolean).void }
736
+ attr_writer :is_expandable
737
+
738
+ sig do
739
+ returns(
740
+ T.nilable(
741
+ T::Array[
742
+ XTwitterScraper::X::TweetDetail::NoteTweet::RichtextTag
743
+ ]
744
+ )
745
+ )
746
+ end
747
+ attr_reader :richtext_tags
748
+
749
+ sig do
750
+ params(
751
+ richtext_tags:
752
+ T::Array[
753
+ XTwitterScraper::X::TweetDetail::NoteTweet::RichtextTag::OrHash
754
+ ]
755
+ ).void
756
+ end
757
+ attr_writer :richtext_tags
758
+
759
+ # Complete Note Tweet content and rich-text metadata.
760
+ sig do
761
+ params(
762
+ text: String,
763
+ id: String,
764
+ entities: T::Hash[Symbol, T.anything],
765
+ is_expandable: T::Boolean,
766
+ richtext_tags:
767
+ T::Array[
768
+ XTwitterScraper::X::TweetDetail::NoteTweet::RichtextTag::OrHash
769
+ ]
770
+ ).returns(T.attached_class)
771
+ end
772
+ def self.new(
773
+ text:,
774
+ id: nil,
775
+ entities: nil,
776
+ is_expandable: nil,
777
+ richtext_tags: nil
778
+ )
779
+ end
780
+
781
+ sig do
782
+ override.returns(
783
+ {
784
+ text: String,
785
+ id: String,
786
+ entities: T::Hash[Symbol, T.anything],
787
+ is_expandable: T::Boolean,
788
+ richtext_tags:
789
+ T::Array[
790
+ XTwitterScraper::X::TweetDetail::NoteTweet::RichtextTag
791
+ ]
792
+ }
793
+ )
794
+ end
795
+ def to_hash
796
+ end
797
+
798
+ class RichtextTag < XTwitterScraper::Internal::Type::BaseModel
799
+ OrHash =
800
+ T.type_alias do
801
+ T.any(
802
+ XTwitterScraper::X::TweetDetail::NoteTweet::RichtextTag,
803
+ XTwitterScraper::Internal::AnyHash
804
+ )
805
+ end
806
+
807
+ sig { returns(Integer) }
808
+ attr_accessor :from_index
809
+
810
+ sig { returns(Integer) }
811
+ attr_accessor :to_index
812
+
813
+ sig { returns(T::Array[String]) }
814
+ attr_accessor :types
815
+
816
+ sig do
817
+ params(
818
+ from_index: Integer,
819
+ to_index: Integer,
820
+ types: T::Array[String]
821
+ ).returns(T.attached_class)
822
+ end
823
+ def self.new(from_index:, to_index:, types:)
824
+ end
825
+
826
+ sig do
827
+ override.returns(
828
+ {
829
+ from_index: Integer,
830
+ to_index: Integer,
831
+ types: T::Array[String]
832
+ }
833
+ )
834
+ end
835
+ def to_hash
836
+ end
837
+ end
838
+ end
839
+
840
+ class Place < XTwitterScraper::Internal::Type::BaseModel
841
+ OrHash =
842
+ T.type_alias do
843
+ T.any(
844
+ XTwitterScraper::X::TweetDetail::Place,
845
+ XTwitterScraper::Internal::AnyHash
846
+ )
847
+ end
848
+
849
+ sig { returns(T.nilable(String)) }
850
+ attr_reader :id
851
+
852
+ sig { params(id: String).void }
853
+ attr_writer :id
854
+
855
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
856
+ attr_reader :bounding_box
857
+
858
+ sig { params(bounding_box: T::Hash[Symbol, T.anything]).void }
859
+ attr_writer :bounding_box
860
+
861
+ sig { returns(T.nilable(String)) }
862
+ attr_reader :country
863
+
864
+ sig { params(country: String).void }
865
+ attr_writer :country
866
+
867
+ sig { returns(T.nilable(String)) }
868
+ attr_reader :country_code
869
+
870
+ sig { params(country_code: String).void }
871
+ attr_writer :country_code
872
+
873
+ sig { returns(T.nilable(String)) }
874
+ attr_reader :full_name
875
+
876
+ sig { params(full_name: String).void }
877
+ attr_writer :full_name
878
+
879
+ sig { returns(T.nilable(String)) }
880
+ attr_reader :name
881
+
882
+ sig { params(name: String).void }
883
+ attr_writer :name
884
+
885
+ sig { returns(T.nilable(String)) }
886
+ attr_reader :place_type
887
+
888
+ sig { params(place_type: String).void }
889
+ attr_writer :place_type
890
+
891
+ sig { returns(T.nilable(String)) }
892
+ attr_reader :url
893
+
894
+ sig { params(url: String).void }
895
+ attr_writer :url
896
+
897
+ # Public place metadata attached to a tweet.
898
+ sig do
899
+ params(
900
+ id: String,
901
+ bounding_box: T::Hash[Symbol, T.anything],
902
+ country: String,
903
+ country_code: String,
904
+ full_name: String,
905
+ name: String,
906
+ place_type: String,
907
+ url: String
908
+ ).returns(T.attached_class)
909
+ end
910
+ def self.new(
911
+ id: nil,
912
+ bounding_box: nil,
913
+ country: nil,
914
+ country_code: nil,
915
+ full_name: nil,
916
+ name: nil,
917
+ place_type: nil,
918
+ url: nil
919
+ )
920
+ end
921
+
922
+ sig do
923
+ override.returns(
924
+ {
925
+ id: String,
926
+ bounding_box: T::Hash[Symbol, T.anything],
927
+ country: String,
928
+ country_code: String,
929
+ full_name: String,
930
+ name: String,
931
+ place_type: String,
932
+ url: String
933
+ }
934
+ )
935
+ end
936
+ def to_hash
937
+ end
938
+ end
939
+
940
+ class PreviousCounts < XTwitterScraper::Internal::Type::BaseModel
941
+ OrHash =
942
+ T.type_alias do
943
+ T.any(
944
+ XTwitterScraper::X::TweetDetail::PreviousCounts,
945
+ XTwitterScraper::Internal::AnyHash
946
+ )
947
+ end
948
+
949
+ sig { returns(T.nilable(Integer)) }
950
+ attr_reader :bookmark_count
951
+
952
+ sig { params(bookmark_count: Integer).void }
953
+ attr_writer :bookmark_count
954
+
955
+ sig { returns(T.nilable(Integer)) }
956
+ attr_reader :like_count
957
+
958
+ sig { params(like_count: Integer).void }
959
+ attr_writer :like_count
960
+
961
+ sig { returns(T.nilable(Integer)) }
962
+ attr_reader :quote_count
963
+
964
+ sig { params(quote_count: Integer).void }
965
+ attr_writer :quote_count
966
+
967
+ sig { returns(T.nilable(Integer)) }
968
+ attr_reader :reply_count
969
+
970
+ sig { params(reply_count: Integer).void }
971
+ attr_writer :reply_count
972
+
973
+ sig { returns(T.nilable(Integer)) }
974
+ attr_reader :retweet_count
975
+
976
+ sig { params(retweet_count: Integer).void }
977
+ attr_writer :retweet_count
978
+
979
+ # Engagement counts retained from a prior tweet edit.
980
+ sig do
981
+ params(
982
+ bookmark_count: Integer,
983
+ like_count: Integer,
984
+ quote_count: Integer,
985
+ reply_count: Integer,
986
+ retweet_count: Integer
987
+ ).returns(T.attached_class)
988
+ end
989
+ def self.new(
990
+ bookmark_count: nil,
991
+ like_count: nil,
992
+ quote_count: nil,
993
+ reply_count: nil,
994
+ retweet_count: nil
995
+ )
996
+ end
997
+
998
+ sig do
999
+ override.returns(
1000
+ {
1001
+ bookmark_count: Integer,
1002
+ like_count: Integer,
1003
+ quote_count: Integer,
1004
+ reply_count: Integer,
1005
+ retweet_count: Integer
1006
+ }
1007
+ )
1008
+ end
1009
+ def to_hash
1010
+ end
1011
+ end
325
1012
  end
326
1013
  end
327
1014
  end