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
@@ -23,6 +23,137 @@ module XTwitterScraper
23
23
  sig { returns(String) }
24
24
  attr_accessor :url
25
25
 
26
+ # X media entity ID.
27
+ sig { returns(T.nilable(String)) }
28
+ attr_reader :id
29
+
30
+ sig { params(id: String).void }
31
+ attr_writer :id
32
+
33
+ # Whether X permits direct media download.
34
+ sig { returns(T.nilable(T::Boolean)) }
35
+ attr_reader :allow_download
36
+
37
+ sig { params(allow_download: T::Boolean).void }
38
+ attr_writer :allow_download
39
+
40
+ # Accessibility text supplied for the media.
41
+ sig { returns(T.nilable(String)) }
42
+ attr_reader :alt_text
43
+
44
+ sig { params(alt_text: String).void }
45
+ attr_writer :alt_text
46
+
47
+ # Video aspect ratio as width and height.
48
+ sig { returns(T.nilable(T::Array[Integer])) }
49
+ attr_reader :aspect_ratio
50
+
51
+ sig { params(aspect_ratio: T::Array[Integer]).void }
52
+ attr_writer :aspect_ratio
53
+
54
+ # Media availability state reported by X.
55
+ sig { returns(T.nilable(String)) }
56
+ attr_reader :availability_status
57
+
58
+ sig { params(availability_status: String).void }
59
+ attr_writer :availability_status
60
+
61
+ # Display-friendly media URL reported by X.
62
+ sig { returns(T.nilable(String)) }
63
+ attr_reader :display_url
64
+
65
+ sig { params(display_url: String).void }
66
+ attr_writer :display_url
67
+
68
+ # Video duration in milliseconds.
69
+ sig { returns(T.nilable(Integer)) }
70
+ attr_reader :duration_millis
71
+
72
+ sig { params(duration_millis: Integer).void }
73
+ attr_writer :duration_millis
74
+
75
+ # Expanded X media URL.
76
+ sig { returns(T.nilable(String)) }
77
+ attr_reader :expanded_url
78
+
79
+ sig { params(expanded_url: String).void }
80
+ attr_writer :expanded_url
81
+
82
+ # Face-aware crop rectangles grouped by media size.
83
+ sig do
84
+ returns(
85
+ T.nilable(
86
+ T::Hash[Symbol, T::Array[XTwitterScraper::TweetMedia::FaceRect]]
87
+ )
88
+ )
89
+ end
90
+ attr_reader :face_rects
91
+
92
+ sig do
93
+ params(
94
+ face_rects:
95
+ T::Hash[
96
+ Symbol,
97
+ T::Array[XTwitterScraper::TweetMedia::FaceRect::OrHash]
98
+ ]
99
+ ).void
100
+ end
101
+ attr_writer :face_rects
102
+
103
+ # Suggested image crops reported by X.
104
+ sig do
105
+ returns(T.nilable(T::Array[XTwitterScraper::TweetMedia::FocusRect]))
106
+ end
107
+ attr_reader :focus_rects
108
+
109
+ sig do
110
+ params(
111
+ focus_rects: T::Array[XTwitterScraper::TweetMedia::FocusRect::OrHash]
112
+ ).void
113
+ end
114
+ attr_writer :focus_rects
115
+
116
+ # Original media height.
117
+ sig { returns(T.nilable(Integer)) }
118
+ attr_reader :height
119
+
120
+ sig { params(height: Integer).void }
121
+ attr_writer :height
122
+
123
+ # Media entity offsets in the tweet text.
124
+ sig { returns(T.nilable(T::Array[Integer])) }
125
+ attr_reader :indices
126
+
127
+ sig { params(indices: T::Array[Integer]).void }
128
+ attr_writer :indices
129
+
130
+ # Stable X media key.
131
+ sig { returns(T.nilable(String)) }
132
+ attr_reader :media_key
133
+
134
+ sig { params(media_key: String).void }
135
+ attr_writer :media_key
136
+
137
+ # Whether X reports the media as monetizable.
138
+ sig { returns(T.nilable(T::Boolean)) }
139
+ attr_reader :monetizable
140
+
141
+ sig { params(monetizable: T::Boolean).void }
142
+ attr_writer :monetizable
143
+
144
+ # Named media renditions and resize modes.
145
+ sig do
146
+ returns(T.nilable(T::Hash[Symbol, XTwitterScraper::TweetMedia::Size]))
147
+ end
148
+ attr_reader :sizes
149
+
150
+ sig do
151
+ params(
152
+ sizes: T::Hash[Symbol, XTwitterScraper::TweetMedia::Size::OrHash]
153
+ ).void
154
+ end
155
+ attr_writer :sizes
156
+
26
157
  # Available video encodings, ordered as returned
27
158
  sig do
28
159
  returns(T.nilable(T::Array[XTwitterScraper::TweetMedia::VideoVariant]))
@@ -37,14 +168,41 @@ module XTwitterScraper
37
168
  end
38
169
  attr_writer :video_variants
39
170
 
171
+ # Original media width.
172
+ sig { returns(T.nilable(Integer)) }
173
+ attr_reader :width
174
+
175
+ sig { params(width: Integer).void }
176
+ attr_writer :width
177
+
40
178
  # Normalized media attached to a tweet.
41
179
  sig do
42
180
  params(
43
181
  media_url: String,
44
182
  type: XTwitterScraper::TweetMedia::Type::OrSymbol,
45
183
  url: String,
184
+ id: String,
185
+ allow_download: T::Boolean,
186
+ alt_text: String,
187
+ aspect_ratio: T::Array[Integer],
188
+ availability_status: String,
189
+ display_url: String,
190
+ duration_millis: Integer,
191
+ expanded_url: String,
192
+ face_rects:
193
+ T::Hash[
194
+ Symbol,
195
+ T::Array[XTwitterScraper::TweetMedia::FaceRect::OrHash]
196
+ ],
197
+ focus_rects: T::Array[XTwitterScraper::TweetMedia::FocusRect::OrHash],
198
+ height: Integer,
199
+ indices: T::Array[Integer],
200
+ media_key: String,
201
+ monetizable: T::Boolean,
202
+ sizes: T::Hash[Symbol, XTwitterScraper::TweetMedia::Size::OrHash],
46
203
  video_variants:
47
- T::Array[XTwitterScraper::TweetMedia::VideoVariant::OrHash]
204
+ T::Array[XTwitterScraper::TweetMedia::VideoVariant::OrHash],
205
+ width: Integer
48
206
  ).returns(T.attached_class)
49
207
  end
50
208
  def self.new(
@@ -53,8 +211,40 @@ module XTwitterScraper
53
211
  type:,
54
212
  # X media link from the tweet
55
213
  url:,
214
+ # X media entity ID.
215
+ id: nil,
216
+ # Whether X permits direct media download.
217
+ allow_download: nil,
218
+ # Accessibility text supplied for the media.
219
+ alt_text: nil,
220
+ # Video aspect ratio as width and height.
221
+ aspect_ratio: nil,
222
+ # Media availability state reported by X.
223
+ availability_status: nil,
224
+ # Display-friendly media URL reported by X.
225
+ display_url: nil,
226
+ # Video duration in milliseconds.
227
+ duration_millis: nil,
228
+ # Expanded X media URL.
229
+ expanded_url: nil,
230
+ # Face-aware crop rectangles grouped by media size.
231
+ face_rects: nil,
232
+ # Suggested image crops reported by X.
233
+ focus_rects: nil,
234
+ # Original media height.
235
+ height: nil,
236
+ # Media entity offsets in the tweet text.
237
+ indices: nil,
238
+ # Stable X media key.
239
+ media_key: nil,
240
+ # Whether X reports the media as monetizable.
241
+ monetizable: nil,
242
+ # Named media renditions and resize modes.
243
+ sizes: nil,
56
244
  # Available video encodings, ordered as returned
57
- video_variants: nil
245
+ video_variants: nil,
246
+ # Original media width.
247
+ width: nil
58
248
  )
59
249
  end
60
250
 
@@ -64,7 +254,24 @@ module XTwitterScraper
64
254
  media_url: String,
65
255
  type: XTwitterScraper::TweetMedia::Type::TaggedSymbol,
66
256
  url: String,
67
- video_variants: T::Array[XTwitterScraper::TweetMedia::VideoVariant]
257
+ id: String,
258
+ allow_download: T::Boolean,
259
+ alt_text: String,
260
+ aspect_ratio: T::Array[Integer],
261
+ availability_status: String,
262
+ display_url: String,
263
+ duration_millis: Integer,
264
+ expanded_url: String,
265
+ face_rects:
266
+ T::Hash[Symbol, T::Array[XTwitterScraper::TweetMedia::FaceRect]],
267
+ focus_rects: T::Array[XTwitterScraper::TweetMedia::FocusRect],
268
+ height: Integer,
269
+ indices: T::Array[Integer],
270
+ media_key: String,
271
+ monetizable: T::Boolean,
272
+ sizes: T::Hash[Symbol, XTwitterScraper::TweetMedia::Size],
273
+ video_variants: T::Array[XTwitterScraper::TweetMedia::VideoVariant],
274
+ width: Integer
68
275
  }
69
276
  )
70
277
  end
@@ -92,6 +299,109 @@ module XTwitterScraper
92
299
  end
93
300
  end
94
301
 
302
+ class FaceRect < XTwitterScraper::Internal::Type::BaseModel
303
+ OrHash =
304
+ T.type_alias do
305
+ T.any(
306
+ XTwitterScraper::TweetMedia::FaceRect,
307
+ XTwitterScraper::Internal::AnyHash
308
+ )
309
+ end
310
+
311
+ sig { returns(Integer) }
312
+ attr_accessor :h
313
+
314
+ sig { returns(Integer) }
315
+ attr_accessor :w
316
+
317
+ sig { returns(Integer) }
318
+ attr_accessor :x
319
+
320
+ sig { returns(Integer) }
321
+ attr_accessor :y_
322
+
323
+ sig do
324
+ params(h: Integer, w: Integer, x: Integer, y_: Integer).returns(
325
+ T.attached_class
326
+ )
327
+ end
328
+ def self.new(h:, w:, x:, y_:)
329
+ end
330
+
331
+ sig do
332
+ override.returns({ h: Integer, w: Integer, x: Integer, y_: Integer })
333
+ end
334
+ def to_hash
335
+ end
336
+ end
337
+
338
+ class FocusRect < XTwitterScraper::Internal::Type::BaseModel
339
+ OrHash =
340
+ T.type_alias do
341
+ T.any(
342
+ XTwitterScraper::TweetMedia::FocusRect,
343
+ XTwitterScraper::Internal::AnyHash
344
+ )
345
+ end
346
+
347
+ sig { returns(Integer) }
348
+ attr_accessor :h
349
+
350
+ sig { returns(Integer) }
351
+ attr_accessor :w
352
+
353
+ sig { returns(Integer) }
354
+ attr_accessor :x
355
+
356
+ sig { returns(Integer) }
357
+ attr_accessor :y_
358
+
359
+ sig do
360
+ params(h: Integer, w: Integer, x: Integer, y_: Integer).returns(
361
+ T.attached_class
362
+ )
363
+ end
364
+ def self.new(h:, w:, x:, y_:)
365
+ end
366
+
367
+ sig do
368
+ override.returns({ h: Integer, w: Integer, x: Integer, y_: Integer })
369
+ end
370
+ def to_hash
371
+ end
372
+ end
373
+
374
+ class Size < XTwitterScraper::Internal::Type::BaseModel
375
+ OrHash =
376
+ T.type_alias do
377
+ T.any(
378
+ XTwitterScraper::TweetMedia::Size,
379
+ XTwitterScraper::Internal::AnyHash
380
+ )
381
+ end
382
+
383
+ sig { returns(Integer) }
384
+ attr_accessor :h
385
+
386
+ sig { returns(String) }
387
+ attr_accessor :resize
388
+
389
+ sig { returns(Integer) }
390
+ attr_accessor :w
391
+
392
+ sig do
393
+ params(h: Integer, resize: String, w: Integer).returns(
394
+ T.attached_class
395
+ )
396
+ end
397
+ def self.new(h:, resize:, w:)
398
+ end
399
+
400
+ sig { override.returns({ h: Integer, resize: String, w: Integer }) }
401
+ def to_hash
402
+ end
403
+ end
404
+
95
405
  class VideoVariant < XTwitterScraper::Internal::Type::BaseModel
96
406
  OrHash =
97
407
  T.type_alias do