x-twitter-scraper 0.7.2 → 0.9.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 (157) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +3 -3
  4. data/lib/x_twitter_scraper/models/credit_topup_balance_response.rb +5 -5
  5. data/lib/x_twitter_scraper/models/draw_export_params.rb +8 -3
  6. data/lib/x_twitter_scraper/models/draw_list_params.rb +2 -2
  7. data/lib/x_twitter_scraper/models/error.rb +8 -0
  8. data/lib/x_twitter_scraper/models/event_list_params.rb +13 -5
  9. data/lib/x_twitter_scraper/models/extraction_estimate_cost_params.rb +731 -82
  10. data/lib/x_twitter_scraper/models/extraction_estimate_cost_response.rb +1 -0
  11. data/lib/x_twitter_scraper/models/extraction_export_results_params.rb +145 -1
  12. data/lib/x_twitter_scraper/models/extraction_list_params.rb +2 -2
  13. data/lib/x_twitter_scraper/models/extraction_retrieve_params.rb +70 -3
  14. data/lib/x_twitter_scraper/models/extraction_run_params.rb +662 -1
  15. data/lib/x_twitter_scraper/models/extraction_run_response.rb +27 -48
  16. data/lib/x_twitter_scraper/models/guest_wallet_create_response.rb +8 -8
  17. data/lib/x_twitter_scraper/models/guest_wallet_topup_response.rb +9 -9
  18. data/lib/x_twitter_scraper/models/monitor.rb +29 -1
  19. data/lib/x_twitter_scraper/models/paginated_tweets.rb +4 -4
  20. data/lib/x_twitter_scraper/models/paginated_users.rb +5 -5
  21. data/lib/x_twitter_scraper/models/support/attachment_download_params.rb +28 -0
  22. data/lib/x_twitter_scraper/models/x/community_retrieve_members_params.rb +113 -1
  23. data/lib/x_twitter_scraper/models/x/community_retrieve_moderators_params.rb +117 -1
  24. data/lib/x_twitter_scraper/models/x/list_retrieve_followers_params.rb +117 -6
  25. data/lib/x_twitter_scraper/models/x/list_retrieve_members_params.rb +116 -1
  26. data/lib/x_twitter_scraper/models/x/tweet_get_favoriters_params.rb +117 -6
  27. data/lib/x_twitter_scraper/models/x/tweet_get_quotes_params.rb +153 -1
  28. data/lib/x_twitter_scraper/models/x/tweet_get_replies_params.rb +246 -16
  29. data/lib/x_twitter_scraper/models/x/tweet_get_replies_response.rb +3 -2
  30. data/lib/x_twitter_scraper/models/x/tweet_get_retweeters_params.rb +117 -6
  31. data/lib/x_twitter_scraper/models/x/tweet_search_params.rb +187 -14
  32. data/lib/x_twitter_scraper/models/x/tweet_search_response.rb +299 -0
  33. data/lib/x_twitter_scraper/models/x/user_retrieve_followers_params.rb +143 -10
  34. data/lib/x_twitter_scraper/models/x/user_retrieve_followers_response.rb +241 -0
  35. data/lib/x_twitter_scraper/models/x/user_retrieve_followers_you_know_params.rb +117 -6
  36. data/lib/x_twitter_scraper/models/x/user_retrieve_following_params.rb +143 -10
  37. data/lib/x_twitter_scraper/models/x/user_retrieve_following_response.rb +241 -0
  38. data/lib/x_twitter_scraper/models/x/user_retrieve_likes_params.rb +153 -1
  39. data/lib/x_twitter_scraper/models/x/user_retrieve_media_params.rb +153 -1
  40. data/lib/x_twitter_scraper/models/x/user_retrieve_mentions_params.rb +153 -1
  41. data/lib/x_twitter_scraper/models/x/user_retrieve_replies_params.rb +159 -7
  42. data/lib/x_twitter_scraper/models/x/user_retrieve_search_params.rb +116 -1
  43. data/lib/x_twitter_scraper/models/x/user_retrieve_tweets_params.rb +159 -7
  44. data/lib/x_twitter_scraper/models/x/user_retrieve_verified_followers_params.rb +157 -8
  45. data/lib/x_twitter_scraper/models/x/user_retrieve_verified_followers_response.rb +245 -0
  46. data/lib/x_twitter_scraper/models/x/x_account.rb +7 -11
  47. data/lib/x_twitter_scraper/resources/credits.rb +2 -2
  48. data/lib/x_twitter_scraper/resources/draws.rb +5 -2
  49. data/lib/x_twitter_scraper/resources/events.rb +10 -4
  50. data/lib/x_twitter_scraper/resources/extractions.rb +383 -84
  51. data/lib/x_twitter_scraper/resources/guest_wallets.rb +9 -13
  52. data/lib/x_twitter_scraper/resources/support/attachments.rb +42 -0
  53. data/lib/x_twitter_scraper/resources/support.rb +5 -0
  54. data/lib/x_twitter_scraper/resources/x/communities.rb +95 -4
  55. data/lib/x_twitter_scraper/resources/x/lists.rb +96 -5
  56. data/lib/x_twitter_scraper/resources/x/tweets.rb +286 -28
  57. data/lib/x_twitter_scraper/resources/x/users.rb +531 -41
  58. data/lib/x_twitter_scraper/version.rb +1 -1
  59. data/lib/x_twitter_scraper.rb +7 -1
  60. data/rbi/x_twitter_scraper/models/credit_topup_balance_response.rbi +6 -6
  61. data/rbi/x_twitter_scraper/models/draw_export_params.rbi +6 -3
  62. data/rbi/x_twitter_scraper/models/draw_list_params.rbi +2 -2
  63. data/rbi/x_twitter_scraper/models/error.rbi +40 -0
  64. data/rbi/x_twitter_scraper/models/event_list_params.rbi +15 -4
  65. data/rbi/x_twitter_scraper/models/extraction_estimate_cost_params.rbi +1338 -86
  66. data/rbi/x_twitter_scraper/models/extraction_estimate_cost_response.rbi +5 -0
  67. data/rbi/x_twitter_scraper/models/extraction_export_results_params.rbi +198 -0
  68. data/rbi/x_twitter_scraper/models/extraction_list_params.rbi +2 -2
  69. data/rbi/x_twitter_scraper/models/extraction_retrieve_params.rbi +194 -2
  70. data/rbi/x_twitter_scraper/models/extraction_run_params.rbi +1221 -0
  71. data/rbi/x_twitter_scraper/models/extraction_run_response.rbi +35 -162
  72. data/rbi/x_twitter_scraper/models/guest_wallet_create_response.rbi +8 -6
  73. data/rbi/x_twitter_scraper/models/guest_wallet_topup_response.rbi +9 -7
  74. data/rbi/x_twitter_scraper/models/monitor.rbi +54 -3
  75. data/rbi/x_twitter_scraper/models/paginated_tweets.rbi +4 -4
  76. data/rbi/x_twitter_scraper/models/paginated_users.rbi +5 -5
  77. data/rbi/x_twitter_scraper/models/support/attachment_download_params.rbi +51 -0
  78. data/rbi/x_twitter_scraper/models/x/community_retrieve_members_params.rbi +154 -0
  79. data/rbi/x_twitter_scraper/models/x/community_retrieve_moderators_params.rbi +154 -0
  80. data/rbi/x_twitter_scraper/models/x/list_retrieve_followers_params.rbi +160 -8
  81. data/rbi/x_twitter_scraper/models/x/list_retrieve_members_params.rbi +154 -0
  82. data/rbi/x_twitter_scraper/models/x/tweet_get_favoriters_params.rbi +160 -8
  83. data/rbi/x_twitter_scraper/models/x/tweet_get_quotes_params.rbi +209 -0
  84. data/rbi/x_twitter_scraper/models/x/tweet_get_replies_params.rbi +403 -20
  85. data/rbi/x_twitter_scraper/models/x/tweet_get_replies_response.rbi +3 -2
  86. data/rbi/x_twitter_scraper/models/x/tweet_get_retweeters_params.rbi +160 -8
  87. data/rbi/x_twitter_scraper/models/x/tweet_search_params.rbi +279 -16
  88. data/rbi/x_twitter_scraper/models/x/tweet_search_response.rbi +543 -0
  89. data/rbi/x_twitter_scraper/models/x/user_retrieve_followers_params.rbi +228 -12
  90. data/rbi/x_twitter_scraper/models/x/user_retrieve_followers_response.rbi +440 -0
  91. data/rbi/x_twitter_scraper/models/x/user_retrieve_followers_you_know_params.rbi +160 -8
  92. data/rbi/x_twitter_scraper/models/x/user_retrieve_following_params.rbi +228 -12
  93. data/rbi/x_twitter_scraper/models/x/user_retrieve_following_response.rbi +440 -0
  94. data/rbi/x_twitter_scraper/models/x/user_retrieve_likes_params.rbi +209 -0
  95. data/rbi/x_twitter_scraper/models/x/user_retrieve_media_params.rbi +209 -0
  96. data/rbi/x_twitter_scraper/models/x/user_retrieve_mentions_params.rbi +209 -0
  97. data/rbi/x_twitter_scraper/models/x/user_retrieve_replies_params.rbi +217 -8
  98. data/rbi/x_twitter_scraper/models/x/user_retrieve_search_params.rbi +154 -0
  99. data/rbi/x_twitter_scraper/models/x/user_retrieve_tweets_params.rbi +217 -8
  100. data/rbi/x_twitter_scraper/models/x/user_retrieve_verified_followers_params.rbi +248 -10
  101. data/rbi/x_twitter_scraper/models/x/user_retrieve_verified_followers_response.rbi +440 -0
  102. data/rbi/x_twitter_scraper/models/x/x_account.rbi +9 -15
  103. data/rbi/x_twitter_scraper/resources/credits.rbi +2 -2
  104. data/rbi/x_twitter_scraper/resources/draws.rbi +3 -2
  105. data/rbi/x_twitter_scraper/resources/events.rbi +5 -2
  106. data/rbi/x_twitter_scraper/resources/extractions.rbi +525 -83
  107. data/rbi/x_twitter_scraper/resources/guest_wallets.rbi +9 -13
  108. data/rbi/x_twitter_scraper/resources/support/attachments.rbi +35 -0
  109. data/rbi/x_twitter_scraper/resources/support.rbi +4 -0
  110. data/rbi/x_twitter_scraper/resources/x/communities.rbi +84 -0
  111. data/rbi/x_twitter_scraper/resources/x/lists.rbi +87 -4
  112. data/rbi/x_twitter_scraper/resources/x/tweets.rbi +307 -31
  113. data/rbi/x_twitter_scraper/resources/x/users.rbi +558 -34
  114. data/sig/x_twitter_scraper/models/error.rbs +16 -0
  115. data/sig/x_twitter_scraper/models/event_list_params.rbs +7 -0
  116. data/sig/x_twitter_scraper/models/extraction_estimate_cost_params.rbs +605 -1
  117. data/sig/x_twitter_scraper/models/extraction_estimate_cost_response.rbs +2 -0
  118. data/sig/x_twitter_scraper/models/extraction_export_results_params.rbs +127 -1
  119. data/sig/x_twitter_scraper/models/extraction_retrieve_params.rbs +74 -1
  120. data/sig/x_twitter_scraper/models/extraction_run_params.rbs +611 -1
  121. data/sig/x_twitter_scraper/models/extraction_run_response.rbs +29 -67
  122. data/sig/x_twitter_scraper/models/guest_wallet_create_response.rbs +4 -4
  123. data/sig/x_twitter_scraper/models/guest_wallet_topup_response.rbs +4 -4
  124. data/sig/x_twitter_scraper/models/monitor.rbs +29 -3
  125. data/sig/x_twitter_scraper/models/support/attachment_download_params.rbs +32 -0
  126. data/sig/x_twitter_scraper/models/x/community_retrieve_members_params.rbs +103 -1
  127. data/sig/x_twitter_scraper/models/x/community_retrieve_moderators_params.rbs +102 -1
  128. data/sig/x_twitter_scraper/models/x/list_retrieve_followers_params.rbs +103 -1
  129. data/sig/x_twitter_scraper/models/x/list_retrieve_members_params.rbs +103 -1
  130. data/sig/x_twitter_scraper/models/x/tweet_get_favoriters_params.rbs +103 -1
  131. data/sig/x_twitter_scraper/models/x/tweet_get_quotes_params.rbs +134 -1
  132. data/sig/x_twitter_scraper/models/x/tweet_get_replies_params.rbs +207 -2
  133. data/sig/x_twitter_scraper/models/x/tweet_get_retweeters_params.rbs +103 -1
  134. data/sig/x_twitter_scraper/models/x/tweet_search_params.rbs +154 -1
  135. data/sig/x_twitter_scraper/models/x/tweet_search_response.rbs +258 -0
  136. data/sig/x_twitter_scraper/models/x/user_retrieve_followers_params.rbs +119 -1
  137. data/sig/x_twitter_scraper/models/x/user_retrieve_followers_response.rbs +216 -0
  138. data/sig/x_twitter_scraper/models/x/user_retrieve_followers_you_know_params.rbs +103 -1
  139. data/sig/x_twitter_scraper/models/x/user_retrieve_following_params.rbs +119 -1
  140. data/sig/x_twitter_scraper/models/x/user_retrieve_following_response.rbs +216 -0
  141. data/sig/x_twitter_scraper/models/x/user_retrieve_likes_params.rbs +134 -1
  142. data/sig/x_twitter_scraper/models/x/user_retrieve_media_params.rbs +134 -1
  143. data/sig/x_twitter_scraper/models/x/user_retrieve_mentions_params.rbs +134 -1
  144. data/sig/x_twitter_scraper/models/x/user_retrieve_replies_params.rbs +134 -1
  145. data/sig/x_twitter_scraper/models/x/user_retrieve_search_params.rbs +102 -1
  146. data/sig/x_twitter_scraper/models/x/user_retrieve_tweets_params.rbs +134 -1
  147. data/sig/x_twitter_scraper/models/x/user_retrieve_verified_followers_params.rbs +137 -1
  148. data/sig/x_twitter_scraper/models/x/user_retrieve_verified_followers_response.rbs +216 -0
  149. data/sig/x_twitter_scraper/resources/events.rbs +1 -0
  150. data/sig/x_twitter_scraper/resources/extractions.rbs +137 -0
  151. data/sig/x_twitter_scraper/resources/support/attachments.rbs +15 -0
  152. data/sig/x_twitter_scraper/resources/support.rbs +2 -0
  153. data/sig/x_twitter_scraper/resources/x/communities.rbs +28 -0
  154. data/sig/x_twitter_scraper/resources/x/lists.rbs +28 -0
  155. data/sig/x_twitter_scraper/resources/x/tweets.rbs +93 -1
  156. data/sig/x_twitter_scraper/resources/x/users.rbs +173 -3
  157. metadata +19 -1
@@ -22,6 +22,13 @@ module XTwitterScraper
22
22
  sig { returns(XTwitterScraper::ExtractionRunParams::ToolType::OrSymbol) }
23
23
  attr_accessor :tool_type
24
24
 
25
+ # Estimate cost without creating an extraction.
26
+ sig { returns(T.nilable(T::Boolean)) }
27
+ attr_reader :dry_run
28
+
29
+ sig { params(dry_run: T::Boolean).void }
30
+ attr_writer :dry_run
31
+
25
32
  # Raw advanced search query appended as-is (tweet_search_extractor)
26
33
  sig { returns(T.nilable(String)) }
27
34
  attr_reader :advanced_query
@@ -37,6 +44,20 @@ module XTwitterScraper
37
44
  sig { params(any_words: String).void }
38
45
  attr_writer :any_words
39
46
 
47
+ # Bio terms separated by commas or lines.
48
+ sig { returns(T.nilable(String)) }
49
+ attr_reader :bio_contains
50
+
51
+ sig { params(bio_contains: String).void }
52
+ attr_writer :bio_contains
53
+
54
+ # Return only Blue-verified Tweet authors.
55
+ sig { returns(T.nilable(T::Boolean)) }
56
+ attr_reader :blue_verified_only
57
+
58
+ sig { params(blue_verified_only: T::Boolean).void }
59
+ attr_writer :blue_verified_only
60
+
40
61
  # Geo bounding box, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
41
62
  sig { returns(T.nilable(String)) }
42
63
  attr_reader :bounding_box
@@ -44,6 +65,13 @@ module XTwitterScraper
44
65
  sig { params(bounding_box: String).void }
45
66
  attr_writer :bounding_box
46
67
 
68
+ # Match the Tweet card name.
69
+ sig { returns(T.nilable(String)) }
70
+ attr_reader :card_name
71
+
72
+ sig { params(card_name: String).void }
73
+ attr_writer :card_name
74
+
47
75
  # Cashtags separated by spaces, commas, or lines. (tweet_search_extractor)
48
76
  sig { returns(T.nilable(String)) }
49
77
  attr_reader :cashtags
@@ -51,6 +79,24 @@ module XTwitterScraper
51
79
  sig { params(cashtags: String).void }
52
80
  attr_writer :cashtags
53
81
 
82
+ # Reply collection strategy.
83
+ sig do
84
+ returns(
85
+ T.nilable(
86
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::OrSymbol
87
+ )
88
+ )
89
+ end
90
+ attr_reader :collection_strategy
91
+
92
+ sig do
93
+ params(
94
+ collection_strategy:
95
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::OrSymbol
96
+ ).void
97
+ end
98
+ attr_writer :collection_strategy
99
+
54
100
  # Conversation ID filter (tweet_search_extractor)
55
101
  sig { returns(T.nilable(String)) }
56
102
  attr_reader :conversation_id
@@ -58,6 +104,29 @@ module XTwitterScraper
58
104
  sig { params(conversation_id: String).void }
59
105
  attr_writer :conversation_id
60
106
 
107
+ # Merge duplicate results across collection targets.
108
+ sig { returns(T.nilable(T::Boolean)) }
109
+ attr_reader :dedupe_across_targets
110
+
111
+ sig { params(dedupe_across_targets: T::Boolean).void }
112
+ attr_writer :dedupe_across_targets
113
+
114
+ # Keep target duplicates, first rows, or merged overlap.
115
+ sig do
116
+ returns(
117
+ T.nilable(XTwitterScraper::ExtractionRunParams::DedupeMode::OrSymbol)
118
+ )
119
+ end
120
+ attr_reader :dedupe_mode
121
+
122
+ sig do
123
+ params(
124
+ dedupe_mode:
125
+ XTwitterScraper::ExtractionRunParams::DedupeMode::OrSymbol
126
+ ).void
127
+ end
128
+ attr_writer :dedupe_mode
129
+
61
130
  # Exact phrase to match (tweet_search_extractor)
62
131
  sig { returns(T.nilable(String)) }
63
132
  attr_reader :exact_phrase
@@ -65,6 +134,20 @@ module XTwitterScraper
65
134
  sig { params(exact_phrase: String).void }
66
135
  attr_writer :exact_phrase
67
136
 
137
+ # Exclude replies from the source author.
138
+ sig { returns(T.nilable(T::Boolean)) }
139
+ attr_reader :exclude_original_author
140
+
141
+ sig { params(exclude_original_author: T::Boolean).void }
142
+ attr_writer :exclude_original_author
143
+
144
+ # Exclude a source application.
145
+ sig { returns(T.nilable(String)) }
146
+ attr_reader :exclude_source
147
+
148
+ sig { params(exclude_source: String).void }
149
+ attr_writer :exclude_source
150
+
68
151
  # Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
69
152
  # (tweet_search_extractor)
70
153
  sig { returns(T.nilable(String)) }
@@ -80,6 +163,13 @@ module XTwitterScraper
80
163
  sig { params(from_user: String).void }
81
164
  attr_writer :from_user
82
165
 
166
+ # Match latitude, longitude, and radius.
167
+ sig { returns(T.nilable(String)) }
168
+ attr_reader :geocode
169
+
170
+ sig { params(geocode: String).void }
171
+ attr_writer :geocode
172
+
83
173
  # Hashtags separated by spaces, commas, or lines. (tweet_search_extractor)
84
174
  sig { returns(T.nilable(String)) }
85
175
  attr_reader :hashtags
@@ -87,6 +177,48 @@ module XTwitterScraper
87
177
  sig { params(hashtags: String).void }
88
178
  attr_writer :hashtags
89
179
 
180
+ # Require a profile location.
181
+ sig { returns(T.nilable(T::Boolean)) }
182
+ attr_reader :has_location
183
+
184
+ sig { params(has_location: T::Boolean).void }
185
+ attr_writer :has_location
186
+
187
+ # Return only replies with media.
188
+ sig { returns(T.nilable(T::Boolean)) }
189
+ attr_reader :has_media_only
190
+
191
+ sig { params(has_media_only: T::Boolean).void }
192
+ attr_writer :has_media_only
193
+
194
+ # Require a profile website.
195
+ sig { returns(T.nilable(T::Boolean)) }
196
+ attr_reader :has_website
197
+
198
+ sig { params(has_website: T::Boolean).void }
199
+ attr_writer :has_website
200
+
201
+ # Include the source post in reply results.
202
+ sig { returns(T.nilable(T::Boolean)) }
203
+ attr_reader :include_original_post
204
+
205
+ sig { params(include_original_post: T::Boolean).void }
206
+ attr_writer :include_original_post
207
+
208
+ # Add matching search terms to collection metadata.
209
+ sig { returns(T.nilable(T::Boolean)) }
210
+ attr_reader :include_search_terms
211
+
212
+ sig { params(include_search_terms: T::Boolean).void }
213
+ attr_writer :include_search_terms
214
+
215
+ # Add source target metadata to each result.
216
+ sig { returns(T.nilable(T::Boolean)) }
217
+ attr_reader :include_target_metadata
218
+
219
+ sig { params(include_target_metadata: T::Boolean).void }
220
+ attr_writer :include_target_metadata
221
+
90
222
  # Only replies to this tweet ID (tweet_search_extractor)
91
223
  sig { returns(T.nilable(String)) }
92
224
  attr_reader :in_reply_to_tweet_id
@@ -108,6 +240,90 @@ module XTwitterScraper
108
240
  sig { params(list_id: String).void }
109
241
  attr_writer :list_id
110
242
 
243
+ # Required profile location text.
244
+ sig { returns(T.nilable(String)) }
245
+ attr_reader :location_contains
246
+
247
+ sig { params(location_contains: String).void }
248
+ attr_writer :location_contains
249
+
250
+ # Maximum nested reply depth.
251
+ sig { returns(T.nilable(Integer)) }
252
+ attr_reader :max_depth
253
+
254
+ sig { params(max_depth: Integer).void }
255
+ attr_writer :max_depth
256
+
257
+ # Maximum follower count for profile results.
258
+ sig { returns(T.nilable(Integer)) }
259
+ attr_reader :max_followers
260
+
261
+ sig { params(max_followers: Integer).void }
262
+ attr_writer :max_followers
263
+
264
+ # Maximum following count for profile results.
265
+ sig { returns(T.nilable(Integer)) }
266
+ attr_reader :max_following
267
+
268
+ sig { params(max_following: Integer).void }
269
+ attr_writer :max_following
270
+
271
+ # Return Tweets older than this Tweet ID.
272
+ sig { returns(T.nilable(String)) }
273
+ attr_reader :max_id
274
+
275
+ sig { params(max_id: String).void }
276
+ attr_writer :max_id
277
+
278
+ # Maximum results collected for each target.
279
+ sig { returns(T.nilable(Integer)) }
280
+ attr_reader :max_items_per_target
281
+
282
+ sig { params(max_items_per_target: Integer).void }
283
+ attr_writer :max_items_per_target
284
+
285
+ # Maximum Tweet like count.
286
+ sig { returns(T.nilable(Integer)) }
287
+ attr_reader :max_likes
288
+
289
+ sig { params(max_likes: Integer).void }
290
+ attr_writer :max_likes
291
+
292
+ # Reply pages collected for each target.
293
+ sig { returns(T.nilable(Integer)) }
294
+ attr_reader :max_pages_per_target
295
+
296
+ sig { params(max_pages_per_target: Integer).void }
297
+ attr_writer :max_pages_per_target
298
+
299
+ # Maximum post count for profile results.
300
+ sig { returns(T.nilable(Integer)) }
301
+ attr_reader :max_posts
302
+
303
+ sig { params(max_posts: Integer).void }
304
+ attr_writer :max_posts
305
+
306
+ # Maximum Tweet quote count.
307
+ sig { returns(T.nilable(Integer)) }
308
+ attr_reader :max_quotes
309
+
310
+ sig { params(max_quotes: Integer).void }
311
+ attr_writer :max_quotes
312
+
313
+ # Maximum Tweet reply count.
314
+ sig { returns(T.nilable(Integer)) }
315
+ attr_reader :max_replies
316
+
317
+ sig { params(max_replies: Integer).void }
318
+ attr_writer :max_replies
319
+
320
+ # Maximum Tweet repost count.
321
+ sig { returns(T.nilable(Integer)) }
322
+ attr_reader :max_retweets
323
+
324
+ sig { params(max_retweets: Integer).void }
325
+ attr_writer :max_retweets
326
+
111
327
  # Media type filter (tweet_search_extractor)
112
328
  sig do
113
329
  returns(
@@ -130,6 +346,20 @@ module XTwitterScraper
130
346
  sig { params(mentioning: String).void }
131
347
  attr_writer :mentioning
132
348
 
349
+ # Minimum profile age in days.
350
+ sig { returns(T.nilable(Integer)) }
351
+ attr_reader :min_account_age_days
352
+
353
+ sig { params(min_account_age_days: Integer).void }
354
+ attr_writer :min_account_age_days
355
+
356
+ # Minimum Tweet bookmark count.
357
+ sig { returns(T.nilable(Integer)) }
358
+ attr_reader :min_bookmarks
359
+
360
+ sig { params(min_bookmarks: Integer).void }
361
+ attr_writer :min_bookmarks
362
+
133
363
  # Minimum likes threshold (tweet_search_extractor)
134
364
  sig { returns(T.nilable(Integer)) }
135
365
  attr_reader :min_faves
@@ -137,6 +367,27 @@ module XTwitterScraper
137
367
  sig { params(min_faves: Integer).void }
138
368
  attr_writer :min_faves
139
369
 
370
+ # Minimum follower count for profile results.
371
+ sig { returns(T.nilable(Integer)) }
372
+ attr_reader :min_followers
373
+
374
+ sig { params(min_followers: Integer).void }
375
+ attr_writer :min_followers
376
+
377
+ # Minimum following count for profile results.
378
+ sig { returns(T.nilable(Integer)) }
379
+ attr_reader :min_following
380
+
381
+ sig { params(min_following: Integer).void }
382
+ attr_writer :min_following
383
+
384
+ # Minimum post count for profile results.
385
+ sig { returns(T.nilable(Integer)) }
386
+ attr_reader :min_posts
387
+
388
+ sig { params(min_posts: Integer).void }
389
+ attr_writer :min_posts
390
+
140
391
  # Minimum quote count threshold (tweet_search_extractor)
141
392
  sig { returns(T.nilable(Integer)) }
142
393
  attr_reader :min_quotes
@@ -158,6 +409,41 @@ module XTwitterScraper
158
409
  sig { params(min_retweets: Integer).void }
159
410
  attr_writer :min_retweets
160
411
 
412
+ # Minimum Tweet view count.
413
+ sig { returns(T.nilable(Integer)) }
414
+ attr_reader :min_views
415
+
416
+ sig { params(min_views: Integer).void }
417
+ attr_writer :min_views
418
+
419
+ # Only return native reposts.
420
+ sig { returns(T.nilable(T::Boolean)) }
421
+ attr_reader :native_retweets
422
+
423
+ sig { params(native_retweets: T::Boolean).void }
424
+ attr_writer :native_retweets
425
+
426
+ # Match a place name.
427
+ sig { returns(T.nilable(String)) }
428
+ attr_reader :near
429
+
430
+ sig { params(near: String).void }
431
+ attr_writer :near
432
+
433
+ # Only return news results.
434
+ sig { returns(T.nilable(T::Boolean)) }
435
+ attr_reader :news
436
+
437
+ sig { params(news: T::Boolean).void }
438
+ attr_writer :news
439
+
440
+ # Shortcut for dedupeMode=merge.
441
+ sig { returns(T.nilable(T::Boolean)) }
442
+ attr_reader :overlap_mode
443
+
444
+ sig { params(overlap_mode: T::Boolean).void }
445
+ attr_writer :overlap_mode
446
+
161
447
  # Search within a place ID (tweet_search_extractor)
162
448
  sig { returns(T.nilable(String)) }
163
449
  attr_reader :place
@@ -179,6 +465,21 @@ module XTwitterScraper
179
465
  sig { params(point_radius: String).void }
180
466
  attr_writer :point_radius
181
467
 
468
+ # Search ranking applied to every query.
469
+ sig do
470
+ returns(
471
+ T.nilable(XTwitterScraper::ExtractionRunParams::QueryType::OrSymbol)
472
+ )
473
+ end
474
+ attr_reader :query_type
475
+
476
+ sig do
477
+ params(
478
+ query_type: XTwitterScraper::ExtractionRunParams::QueryType::OrSymbol
479
+ ).void
480
+ end
481
+ attr_writer :query_type
482
+
182
483
  # Quote mode (tweet_search_extractor)
183
484
  sig do
184
485
  returns(
@@ -201,6 +502,26 @@ module XTwitterScraper
201
502
  sig { params(quotes_of_tweet_id: String).void }
202
503
  attr_writer :quotes_of_tweet_id
203
504
 
505
+ # Profile relations processed within one job.
506
+ sig do
507
+ returns(
508
+ T.nilable(
509
+ T::Array[XTwitterScraper::ExtractionRunParams::RelationTarget]
510
+ )
511
+ )
512
+ end
513
+ attr_reader :relation_targets
514
+
515
+ sig do
516
+ params(
517
+ relation_targets:
518
+ T::Array[
519
+ XTwitterScraper::ExtractionRunParams::RelationTarget::OrHash
520
+ ]
521
+ ).void
522
+ end
523
+ attr_writer :relation_targets
524
+
204
525
  # Reply mode (tweet_search_extractor)
205
526
  sig do
206
527
  returns(
@@ -246,6 +567,35 @@ module XTwitterScraper
246
567
  sig { params(retweets_of_tweet_id: String).void }
247
568
  attr_writer :retweets_of_tweet_id
248
569
 
570
+ # Enable the safe-search filter.
571
+ sig { returns(T.nilable(T::Boolean)) }
572
+ attr_reader :safe
573
+
574
+ sig { params(safe: T::Boolean).void }
575
+ attr_writer :safe
576
+
577
+ # Reply depth scope.
578
+ sig do
579
+ returns(
580
+ T.nilable(XTwitterScraper::ExtractionRunParams::Scope::OrSymbol)
581
+ )
582
+ end
583
+ attr_reader :scope
584
+
585
+ sig do
586
+ params(
587
+ scope: XTwitterScraper::ExtractionRunParams::Scope::OrSymbol
588
+ ).void
589
+ end
590
+ attr_writer :scope
591
+
592
+ # Search queries processed as one collection job.
593
+ sig { returns(T.nilable(T::Array[String])) }
594
+ attr_reader :search_queries
595
+
596
+ sig { params(search_queries: T::Array[String]).void }
597
+ attr_writer :search_queries
598
+
249
599
  # Required for tweet_search_extractor & community_search.
250
600
  sig { returns(T.nilable(String)) }
251
601
  attr_reader :search_query
@@ -260,6 +610,53 @@ module XTwitterScraper
260
610
  sig { params(since_date: Date).void }
261
611
  attr_writer :since_date
262
612
 
613
+ # Return Tweets newer than this Tweet ID.
614
+ sig { returns(T.nilable(String)) }
615
+ attr_reader :since_id
616
+
617
+ sig { params(since_id: String).void }
618
+ attr_writer :since_id
619
+
620
+ # Reply start time as ISO 8601 or Unix seconds.
621
+ sig do
622
+ returns(
623
+ T.nilable(XTwitterScraper::ExtractionRunParams::SinceTime::Variants)
624
+ )
625
+ end
626
+ attr_reader :since_time
627
+
628
+ sig do
629
+ params(
630
+ since_time: XTwitterScraper::ExtractionRunParams::SinceTime::Variants
631
+ ).void
632
+ end
633
+ attr_writer :since_time
634
+
635
+ # Reply result order.
636
+ sig do
637
+ returns(T.nilable(XTwitterScraper::ExtractionRunParams::Sort::OrSymbol))
638
+ end
639
+ attr_reader :sort
640
+
641
+ sig do
642
+ params(sort: XTwitterScraper::ExtractionRunParams::Sort::OrSymbol).void
643
+ end
644
+ attr_writer :sort
645
+
646
+ # Match the source application.
647
+ sig { returns(T.nilable(String)) }
648
+ attr_reader :source
649
+
650
+ sig { params(source: String).void }
651
+ attr_writer :source
652
+
653
+ # Resume one reply target from this cursor.
654
+ sig { returns(T.nilable(String)) }
655
+ attr_reader :start_cursor
656
+
657
+ sig { params(start_cursor: String).void }
658
+ attr_writer :start_cursor
659
+
263
660
  # Required for community_post_extractor & community_search.
264
661
  sig { returns(T.nilable(String)) }
265
662
  attr_reader :target_community_id
@@ -267,6 +664,13 @@ module XTwitterScraper
267
664
  sig { params(target_community_id: String).void }
268
665
  attr_writer :target_community_id
269
666
 
667
+ # Community IDs processed as one collection job.
668
+ sig { returns(T.nilable(T::Array[String])) }
669
+ attr_reader :target_community_ids
670
+
671
+ sig { params(target_community_ids: T::Array[String]).void }
672
+ attr_writer :target_community_ids
673
+
270
674
  # Required for list_follower_explorer, list_member_extractor &
271
675
  # list_post_extractor.
272
676
  sig { returns(T.nilable(String)) }
@@ -275,6 +679,41 @@ module XTwitterScraper
275
679
  sig { params(target_list_id: String).void }
276
680
  attr_writer :target_list_id
277
681
 
682
+ # List IDs processed as one collection job.
683
+ sig { returns(T.nilable(T::Array[String])) }
684
+ attr_reader :target_list_ids
685
+
686
+ sig { params(target_list_ids: T::Array[String]).void }
687
+ attr_writer :target_list_ids
688
+
689
+ # Mixed targets auto-routed within one job.
690
+ sig do
691
+ returns(
692
+ T.nilable(
693
+ T::Array[
694
+ T.any(
695
+ String,
696
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1
697
+ )
698
+ ]
699
+ )
700
+ )
701
+ end
702
+ attr_reader :targets
703
+
704
+ sig do
705
+ params(
706
+ targets:
707
+ T::Array[
708
+ T.any(
709
+ String,
710
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::OrHash
711
+ )
712
+ ]
713
+ ).void
714
+ end
715
+ attr_writer :targets
716
+
278
717
  # Required for space_explorer.
279
718
  sig { returns(T.nilable(String)) }
280
719
  attr_reader :target_space_id
@@ -288,12 +727,26 @@ module XTwitterScraper
288
727
  sig { params(target_tweet_id: String).void }
289
728
  attr_writer :target_tweet_id
290
729
 
730
+ # Tweet IDs processed as one collection job.
731
+ sig { returns(T.nilable(T::Array[String])) }
732
+ attr_reader :target_tweet_ids
733
+
734
+ sig { params(target_tweet_ids: T::Array[String]).void }
735
+ attr_writer :target_tweet_ids
736
+
291
737
  sig { returns(T.nilable(String)) }
292
738
  attr_reader :target_username
293
739
 
294
740
  sig { params(target_username: String).void }
295
741
  attr_writer :target_username
296
742
 
743
+ # Usernames processed as one collection job.
744
+ sig { returns(T.nilable(T::Array[String])) }
745
+ attr_reader :target_usernames
746
+
747
+ sig { params(target_usernames: T::Array[String]).void }
748
+ attr_writer :target_usernames
749
+
297
750
  # Filter replies sent to a username (tweet_search_extractor)
298
751
  sig { returns(T.nilable(String)) }
299
752
  attr_reader :to_user
@@ -308,6 +761,21 @@ module XTwitterScraper
308
761
  sig { params(until_date: Date).void }
309
762
  attr_writer :until_date
310
763
 
764
+ # Reply end time as ISO 8601 or Unix seconds.
765
+ sig do
766
+ returns(
767
+ T.nilable(XTwitterScraper::ExtractionRunParams::UntilTime::Variants)
768
+ )
769
+ end
770
+ attr_reader :until_time
771
+
772
+ sig do
773
+ params(
774
+ until_time: XTwitterScraper::ExtractionRunParams::UntilTime::Variants
775
+ ).void
776
+ end
777
+ attr_writer :until_time
778
+
311
779
  # URL substring or domain filter (tweet_search_extractor)
312
780
  sig { returns(T.nilable(String)) }
313
781
  attr_reader :url
@@ -315,6 +783,13 @@ module XTwitterScraper
315
783
  sig { params(url: String).void }
316
784
  attr_writer :url
317
785
 
786
+ # Required username text.
787
+ sig { returns(T.nilable(String)) }
788
+ attr_reader :username_contains
789
+
790
+ sig { params(username_contains: String).void }
791
+ attr_writer :username_contains
792
+
318
793
  # Only verified authors (tweet_search_extractor)
319
794
  sig { returns(T.nilable(T::Boolean)) }
320
795
  attr_reader :verified_only
@@ -322,101 +797,271 @@ module XTwitterScraper
322
797
  sig { params(verified_only: T::Boolean).void }
323
798
  attr_writer :verified_only
324
799
 
800
+ # Exact profile verification type.
801
+ sig { returns(T.nilable(String)) }
802
+ attr_reader :verified_type
803
+
804
+ sig { params(verified_type: String).void }
805
+ attr_writer :verified_type
806
+
807
+ # Set the radius for the near filter.
808
+ sig { returns(T.nilable(String)) }
809
+ attr_reader :within
810
+
811
+ sig { params(within: String).void }
812
+ attr_writer :within
813
+
814
+ # Match Tweets inside a recent time window.
815
+ sig { returns(T.nilable(String)) }
816
+ attr_reader :within_time
817
+
818
+ sig { params(within_time: String).void }
819
+ attr_writer :within_time
820
+
325
821
  sig do
326
822
  params(
327
823
  tool_type: XTwitterScraper::ExtractionRunParams::ToolType::OrSymbol,
824
+ dry_run: T::Boolean,
328
825
  advanced_query: String,
329
826
  any_words: String,
827
+ bio_contains: String,
828
+ blue_verified_only: T::Boolean,
330
829
  bounding_box: String,
830
+ card_name: String,
331
831
  cashtags: String,
832
+ collection_strategy:
833
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::OrSymbol,
332
834
  conversation_id: String,
835
+ dedupe_across_targets: T::Boolean,
836
+ dedupe_mode:
837
+ XTwitterScraper::ExtractionRunParams::DedupeMode::OrSymbol,
333
838
  exact_phrase: String,
839
+ exclude_original_author: T::Boolean,
840
+ exclude_source: String,
334
841
  exclude_words: String,
335
842
  from_user: String,
843
+ geocode: String,
336
844
  hashtags: String,
845
+ has_location: T::Boolean,
846
+ has_media_only: T::Boolean,
847
+ has_website: T::Boolean,
848
+ include_original_post: T::Boolean,
849
+ include_search_terms: T::Boolean,
850
+ include_target_metadata: T::Boolean,
337
851
  in_reply_to_tweet_id: String,
338
852
  language: String,
339
853
  list_id: String,
854
+ location_contains: String,
855
+ max_depth: Integer,
856
+ max_followers: Integer,
857
+ max_following: Integer,
858
+ max_id: String,
859
+ max_items_per_target: Integer,
860
+ max_likes: Integer,
861
+ max_pages_per_target: Integer,
862
+ max_posts: Integer,
863
+ max_quotes: Integer,
864
+ max_replies: Integer,
865
+ max_retweets: Integer,
340
866
  media_type: XTwitterScraper::ExtractionRunParams::MediaType::OrSymbol,
341
867
  mentioning: String,
868
+ min_account_age_days: Integer,
869
+ min_bookmarks: Integer,
342
870
  min_faves: Integer,
871
+ min_followers: Integer,
872
+ min_following: Integer,
873
+ min_posts: Integer,
343
874
  min_quotes: Integer,
344
875
  min_replies: Integer,
345
876
  min_retweets: Integer,
877
+ min_views: Integer,
878
+ native_retweets: T::Boolean,
879
+ near: String,
880
+ news: T::Boolean,
881
+ overlap_mode: T::Boolean,
346
882
  place: String,
347
883
  place_country: String,
348
884
  point_radius: String,
885
+ query_type: XTwitterScraper::ExtractionRunParams::QueryType::OrSymbol,
349
886
  quotes: XTwitterScraper::ExtractionRunParams::Quotes::OrSymbol,
350
887
  quotes_of_tweet_id: String,
888
+ relation_targets:
889
+ T::Array[
890
+ XTwitterScraper::ExtractionRunParams::RelationTarget::OrHash
891
+ ],
351
892
  replies: XTwitterScraper::ExtractionRunParams::Replies::OrSymbol,
352
893
  results_limit: Integer,
353
894
  retweets: XTwitterScraper::ExtractionRunParams::Retweets::OrSymbol,
354
895
  retweets_of_tweet_id: String,
896
+ safe: T::Boolean,
897
+ scope: XTwitterScraper::ExtractionRunParams::Scope::OrSymbol,
898
+ search_queries: T::Array[String],
355
899
  search_query: String,
356
900
  since_date: Date,
901
+ since_id: String,
902
+ since_time: XTwitterScraper::ExtractionRunParams::SinceTime::Variants,
903
+ sort: XTwitterScraper::ExtractionRunParams::Sort::OrSymbol,
904
+ source: String,
905
+ start_cursor: String,
357
906
  target_community_id: String,
907
+ target_community_ids: T::Array[String],
358
908
  target_list_id: String,
909
+ target_list_ids: T::Array[String],
910
+ targets:
911
+ T::Array[
912
+ T.any(
913
+ String,
914
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::OrHash
915
+ )
916
+ ],
359
917
  target_space_id: String,
360
918
  target_tweet_id: String,
919
+ target_tweet_ids: T::Array[String],
361
920
  target_username: String,
921
+ target_usernames: T::Array[String],
362
922
  to_user: String,
363
923
  until_date: Date,
924
+ until_time: XTwitterScraper::ExtractionRunParams::UntilTime::Variants,
364
925
  url: String,
926
+ username_contains: String,
365
927
  verified_only: T::Boolean,
928
+ verified_type: String,
929
+ within: String,
930
+ within_time: String,
366
931
  request_options: XTwitterScraper::RequestOptions::OrHash
367
932
  ).returns(T.attached_class)
368
933
  end
369
934
  def self.new(
370
935
  # Identifier for the extraction tool used to run a job.
371
936
  tool_type:,
937
+ # Estimate cost without creating an extraction.
938
+ dry_run: nil,
372
939
  # Raw advanced search query appended as-is (tweet_search_extractor)
373
940
  advanced_query: nil,
374
941
  # Words or quoted phrases where any one can match. Separate with spaces, commas,
375
942
  # or lines. (tweet_search_extractor)
376
943
  any_words: nil,
944
+ # Bio terms separated by commas or lines.
945
+ bio_contains: nil,
946
+ # Return only Blue-verified Tweet authors.
947
+ blue_verified_only: nil,
377
948
  # Geo bounding box, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
378
949
  bounding_box: nil,
950
+ # Match the Tweet card name.
951
+ card_name: nil,
379
952
  # Cashtags separated by spaces, commas, or lines. (tweet_search_extractor)
380
953
  cashtags: nil,
954
+ # Reply collection strategy.
955
+ collection_strategy: nil,
381
956
  # Conversation ID filter (tweet_search_extractor)
382
957
  conversation_id: nil,
958
+ # Merge duplicate results across collection targets.
959
+ dedupe_across_targets: nil,
960
+ # Keep target duplicates, first rows, or merged overlap.
961
+ dedupe_mode: nil,
383
962
  # Exact phrase to match (tweet_search_extractor)
384
963
  exact_phrase: nil,
964
+ # Exclude replies from the source author.
965
+ exclude_original_author: nil,
966
+ # Exclude a source application.
967
+ exclude_source: nil,
385
968
  # Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
386
969
  # (tweet_search_extractor)
387
970
  exclude_words: nil,
388
971
  # Filter by author username (tweet_search_extractor)
389
972
  from_user: nil,
973
+ # Match latitude, longitude, and radius.
974
+ geocode: nil,
390
975
  # Hashtags separated by spaces, commas, or lines. (tweet_search_extractor)
391
976
  hashtags: nil,
977
+ # Require a profile location.
978
+ has_location: nil,
979
+ # Return only replies with media.
980
+ has_media_only: nil,
981
+ # Require a profile website.
982
+ has_website: nil,
983
+ # Include the source post in reply results.
984
+ include_original_post: nil,
985
+ # Add matching search terms to collection metadata.
986
+ include_search_terms: nil,
987
+ # Add source target metadata to each result.
988
+ include_target_metadata: nil,
392
989
  # Only replies to this tweet ID (tweet_search_extractor)
393
990
  in_reply_to_tweet_id: nil,
394
991
  # Language code filter (tweet_search_extractor)
395
992
  language: nil,
396
993
  # Search within a list ID (tweet_search_extractor)
397
994
  list_id: nil,
995
+ # Required profile location text.
996
+ location_contains: nil,
997
+ # Maximum nested reply depth.
998
+ max_depth: nil,
999
+ # Maximum follower count for profile results.
1000
+ max_followers: nil,
1001
+ # Maximum following count for profile results.
1002
+ max_following: nil,
1003
+ # Return Tweets older than this Tweet ID.
1004
+ max_id: nil,
1005
+ # Maximum results collected for each target.
1006
+ max_items_per_target: nil,
1007
+ # Maximum Tweet like count.
1008
+ max_likes: nil,
1009
+ # Reply pages collected for each target.
1010
+ max_pages_per_target: nil,
1011
+ # Maximum post count for profile results.
1012
+ max_posts: nil,
1013
+ # Maximum Tweet quote count.
1014
+ max_quotes: nil,
1015
+ # Maximum Tweet reply count.
1016
+ max_replies: nil,
1017
+ # Maximum Tweet repost count.
1018
+ max_retweets: nil,
398
1019
  # Media type filter (tweet_search_extractor)
399
1020
  media_type: nil,
400
1021
  # Filter tweets mentioning a username (tweet_search_extractor)
401
1022
  mentioning: nil,
1023
+ # Minimum profile age in days.
1024
+ min_account_age_days: nil,
1025
+ # Minimum Tweet bookmark count.
1026
+ min_bookmarks: nil,
402
1027
  # Minimum likes threshold (tweet_search_extractor)
403
1028
  min_faves: nil,
1029
+ # Minimum follower count for profile results.
1030
+ min_followers: nil,
1031
+ # Minimum following count for profile results.
1032
+ min_following: nil,
1033
+ # Minimum post count for profile results.
1034
+ min_posts: nil,
404
1035
  # Minimum quote count threshold (tweet_search_extractor)
405
1036
  min_quotes: nil,
406
1037
  # Minimum replies threshold (tweet_search_extractor)
407
1038
  min_replies: nil,
408
1039
  # Minimum retweets threshold (tweet_search_extractor)
409
1040
  min_retweets: nil,
1041
+ # Minimum Tweet view count.
1042
+ min_views: nil,
1043
+ # Only return native reposts.
1044
+ native_retweets: nil,
1045
+ # Match a place name.
1046
+ near: nil,
1047
+ # Only return news results.
1048
+ news: nil,
1049
+ # Shortcut for dedupeMode=merge.
1050
+ overlap_mode: nil,
410
1051
  # Search within a place ID (tweet_search_extractor)
411
1052
  place: nil,
412
1053
  # Search within a country code (tweet_search_extractor)
413
1054
  place_country: nil,
414
1055
  # Geo point radius, e.g. -73.99 40.73 25mi (tweet_search_extractor)
415
1056
  point_radius: nil,
1057
+ # Search ranking applied to every query.
1058
+ query_type: nil,
416
1059
  # Quote mode (tweet_search_extractor)
417
1060
  quotes: nil,
418
1061
  # Only quotes of this tweet ID (tweet_search_extractor)
419
1062
  quotes_of_tweet_id: nil,
1063
+ # Profile relations processed within one job.
1064
+ relation_targets: nil,
420
1065
  # Reply mode (tweet_search_extractor)
421
1066
  replies: nil,
422
1067
  # Maximum number of results to extract. When set, the extraction stops after
@@ -426,27 +1071,63 @@ module XTwitterScraper
426
1071
  retweets: nil,
427
1072
  # Only retweets of this tweet ID (tweet_search_extractor)
428
1073
  retweets_of_tweet_id: nil,
1074
+ # Enable the safe-search filter.
1075
+ safe: nil,
1076
+ # Reply depth scope.
1077
+ scope: nil,
1078
+ # Search queries processed as one collection job.
1079
+ search_queries: nil,
429
1080
  # Required for tweet_search_extractor & community_search.
430
1081
  search_query: nil,
431
1082
  # Start date YYYY-MM-DD (tweet_search_extractor)
432
1083
  since_date: nil,
1084
+ # Return Tweets newer than this Tweet ID.
1085
+ since_id: nil,
1086
+ # Reply start time as ISO 8601 or Unix seconds.
1087
+ since_time: nil,
1088
+ # Reply result order.
1089
+ sort: nil,
1090
+ # Match the source application.
1091
+ source: nil,
1092
+ # Resume one reply target from this cursor.
1093
+ start_cursor: nil,
433
1094
  # Required for community_post_extractor & community_search.
434
1095
  target_community_id: nil,
1096
+ # Community IDs processed as one collection job.
1097
+ target_community_ids: nil,
435
1098
  # Required for list_follower_explorer, list_member_extractor &
436
1099
  # list_post_extractor.
437
1100
  target_list_id: nil,
1101
+ # List IDs processed as one collection job.
1102
+ target_list_ids: nil,
1103
+ # Mixed targets auto-routed within one job.
1104
+ targets: nil,
438
1105
  # Required for space_explorer.
439
1106
  target_space_id: nil,
440
1107
  target_tweet_id: nil,
1108
+ # Tweet IDs processed as one collection job.
1109
+ target_tweet_ids: nil,
441
1110
  target_username: nil,
1111
+ # Usernames processed as one collection job.
1112
+ target_usernames: nil,
442
1113
  # Filter replies sent to a username (tweet_search_extractor)
443
1114
  to_user: nil,
444
1115
  # End date YYYY-MM-DD (tweet_search_extractor)
445
1116
  until_date: nil,
1117
+ # Reply end time as ISO 8601 or Unix seconds.
1118
+ until_time: nil,
446
1119
  # URL substring or domain filter (tweet_search_extractor)
447
1120
  url: nil,
1121
+ # Required username text.
1122
+ username_contains: nil,
448
1123
  # Only verified authors (tweet_search_extractor)
449
1124
  verified_only: nil,
1125
+ # Exact profile verification type.
1126
+ verified_type: nil,
1127
+ # Set the radius for the near filter.
1128
+ within: nil,
1129
+ # Match Tweets inside a recent time window.
1130
+ within_time: nil,
450
1131
  request_options: {}
451
1132
  )
452
1133
  end
@@ -455,45 +1136,115 @@ module XTwitterScraper
455
1136
  override.returns(
456
1137
  {
457
1138
  tool_type: XTwitterScraper::ExtractionRunParams::ToolType::OrSymbol,
1139
+ dry_run: T::Boolean,
458
1140
  advanced_query: String,
459
1141
  any_words: String,
1142
+ bio_contains: String,
1143
+ blue_verified_only: T::Boolean,
460
1144
  bounding_box: String,
1145
+ card_name: String,
461
1146
  cashtags: String,
1147
+ collection_strategy:
1148
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::OrSymbol,
462
1149
  conversation_id: String,
1150
+ dedupe_across_targets: T::Boolean,
1151
+ dedupe_mode:
1152
+ XTwitterScraper::ExtractionRunParams::DedupeMode::OrSymbol,
463
1153
  exact_phrase: String,
1154
+ exclude_original_author: T::Boolean,
1155
+ exclude_source: String,
464
1156
  exclude_words: String,
465
1157
  from_user: String,
1158
+ geocode: String,
466
1159
  hashtags: String,
1160
+ has_location: T::Boolean,
1161
+ has_media_only: T::Boolean,
1162
+ has_website: T::Boolean,
1163
+ include_original_post: T::Boolean,
1164
+ include_search_terms: T::Boolean,
1165
+ include_target_metadata: T::Boolean,
467
1166
  in_reply_to_tweet_id: String,
468
1167
  language: String,
469
1168
  list_id: String,
1169
+ location_contains: String,
1170
+ max_depth: Integer,
1171
+ max_followers: Integer,
1172
+ max_following: Integer,
1173
+ max_id: String,
1174
+ max_items_per_target: Integer,
1175
+ max_likes: Integer,
1176
+ max_pages_per_target: Integer,
1177
+ max_posts: Integer,
1178
+ max_quotes: Integer,
1179
+ max_replies: Integer,
1180
+ max_retweets: Integer,
470
1181
  media_type:
471
1182
  XTwitterScraper::ExtractionRunParams::MediaType::OrSymbol,
472
1183
  mentioning: String,
1184
+ min_account_age_days: Integer,
1185
+ min_bookmarks: Integer,
473
1186
  min_faves: Integer,
1187
+ min_followers: Integer,
1188
+ min_following: Integer,
1189
+ min_posts: Integer,
474
1190
  min_quotes: Integer,
475
1191
  min_replies: Integer,
476
1192
  min_retweets: Integer,
1193
+ min_views: Integer,
1194
+ native_retweets: T::Boolean,
1195
+ near: String,
1196
+ news: T::Boolean,
1197
+ overlap_mode: T::Boolean,
477
1198
  place: String,
478
1199
  place_country: String,
479
1200
  point_radius: String,
1201
+ query_type:
1202
+ XTwitterScraper::ExtractionRunParams::QueryType::OrSymbol,
480
1203
  quotes: XTwitterScraper::ExtractionRunParams::Quotes::OrSymbol,
481
1204
  quotes_of_tweet_id: String,
1205
+ relation_targets:
1206
+ T::Array[XTwitterScraper::ExtractionRunParams::RelationTarget],
482
1207
  replies: XTwitterScraper::ExtractionRunParams::Replies::OrSymbol,
483
1208
  results_limit: Integer,
484
1209
  retweets: XTwitterScraper::ExtractionRunParams::Retweets::OrSymbol,
485
1210
  retweets_of_tweet_id: String,
1211
+ safe: T::Boolean,
1212
+ scope: XTwitterScraper::ExtractionRunParams::Scope::OrSymbol,
1213
+ search_queries: T::Array[String],
486
1214
  search_query: String,
487
1215
  since_date: Date,
1216
+ since_id: String,
1217
+ since_time:
1218
+ XTwitterScraper::ExtractionRunParams::SinceTime::Variants,
1219
+ sort: XTwitterScraper::ExtractionRunParams::Sort::OrSymbol,
1220
+ source: String,
1221
+ start_cursor: String,
488
1222
  target_community_id: String,
1223
+ target_community_ids: T::Array[String],
489
1224
  target_list_id: String,
1225
+ target_list_ids: T::Array[String],
1226
+ targets:
1227
+ T::Array[
1228
+ T.any(
1229
+ String,
1230
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1
1231
+ )
1232
+ ],
490
1233
  target_space_id: String,
491
1234
  target_tweet_id: String,
1235
+ target_tweet_ids: T::Array[String],
492
1236
  target_username: String,
1237
+ target_usernames: T::Array[String],
493
1238
  to_user: String,
494
1239
  until_date: Date,
1240
+ until_time:
1241
+ XTwitterScraper::ExtractionRunParams::UntilTime::Variants,
495
1242
  url: String,
1243
+ username_contains: String,
496
1244
  verified_only: T::Boolean,
1245
+ verified_type: String,
1246
+ within: String,
1247
+ within_time: String,
497
1248
  request_options: XTwitterScraper::RequestOptions
498
1249
  }
499
1250
  )
@@ -638,6 +1389,93 @@ module XTwitterScraper
638
1389
  end
639
1390
  end
640
1391
 
1392
+ # Reply collection strategy.
1393
+ module CollectionStrategy
1394
+ extend XTwitterScraper::Internal::Type::Enum
1395
+
1396
+ TaggedSymbol =
1397
+ T.type_alias do
1398
+ T.all(
1399
+ Symbol,
1400
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy
1401
+ )
1402
+ end
1403
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1404
+
1405
+ AUTO =
1406
+ T.let(
1407
+ :auto,
1408
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::TaggedSymbol
1409
+ )
1410
+ COMPLETE =
1411
+ T.let(
1412
+ :complete,
1413
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::TaggedSymbol
1414
+ )
1415
+ DIRECT =
1416
+ T.let(
1417
+ :direct,
1418
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::TaggedSymbol
1419
+ )
1420
+ SEARCH =
1421
+ T.let(
1422
+ :search,
1423
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::TaggedSymbol
1424
+ )
1425
+ THREAD =
1426
+ T.let(
1427
+ :thread,
1428
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::TaggedSymbol
1429
+ )
1430
+
1431
+ sig do
1432
+ override.returns(
1433
+ T::Array[
1434
+ XTwitterScraper::ExtractionRunParams::CollectionStrategy::TaggedSymbol
1435
+ ]
1436
+ )
1437
+ end
1438
+ def self.values
1439
+ end
1440
+ end
1441
+
1442
+ # Keep target duplicates, first rows, or merged overlap.
1443
+ module DedupeMode
1444
+ extend XTwitterScraper::Internal::Type::Enum
1445
+
1446
+ TaggedSymbol =
1447
+ T.type_alias do
1448
+ T.all(Symbol, XTwitterScraper::ExtractionRunParams::DedupeMode)
1449
+ end
1450
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1451
+
1452
+ NONE =
1453
+ T.let(
1454
+ :none,
1455
+ XTwitterScraper::ExtractionRunParams::DedupeMode::TaggedSymbol
1456
+ )
1457
+ FIRST =
1458
+ T.let(
1459
+ :first,
1460
+ XTwitterScraper::ExtractionRunParams::DedupeMode::TaggedSymbol
1461
+ )
1462
+ MERGE =
1463
+ T.let(
1464
+ :merge,
1465
+ XTwitterScraper::ExtractionRunParams::DedupeMode::TaggedSymbol
1466
+ )
1467
+
1468
+ sig do
1469
+ override.returns(
1470
+ T::Array[
1471
+ XTwitterScraper::ExtractionRunParams::DedupeMode::TaggedSymbol
1472
+ ]
1473
+ )
1474
+ end
1475
+ def self.values
1476
+ end
1477
+ end
1478
+
641
1479
  # Media type filter (tweet_search_extractor)
642
1480
  module MediaType
643
1481
  extend XTwitterScraper::Internal::Type::Enum
@@ -690,6 +1528,43 @@ module XTwitterScraper
690
1528
  end
691
1529
  end
692
1530
 
1531
+ # Search ranking applied to every query.
1532
+ module QueryType
1533
+ extend XTwitterScraper::Internal::Type::Enum
1534
+
1535
+ TaggedSymbol =
1536
+ T.type_alias do
1537
+ T.all(Symbol, XTwitterScraper::ExtractionRunParams::QueryType)
1538
+ end
1539
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1540
+
1541
+ LATEST =
1542
+ T.let(
1543
+ :Latest,
1544
+ XTwitterScraper::ExtractionRunParams::QueryType::TaggedSymbol
1545
+ )
1546
+ TOP =
1547
+ T.let(
1548
+ :Top,
1549
+ XTwitterScraper::ExtractionRunParams::QueryType::TaggedSymbol
1550
+ )
1551
+ BOTH =
1552
+ T.let(
1553
+ :Both,
1554
+ XTwitterScraper::ExtractionRunParams::QueryType::TaggedSymbol
1555
+ )
1556
+
1557
+ sig do
1558
+ override.returns(
1559
+ T::Array[
1560
+ XTwitterScraper::ExtractionRunParams::QueryType::TaggedSymbol
1561
+ ]
1562
+ )
1563
+ end
1564
+ def self.values
1565
+ end
1566
+ end
1567
+
693
1568
  # Quote mode (tweet_search_extractor)
694
1569
  module Quotes
695
1570
  extend XTwitterScraper::Internal::Type::Enum
@@ -725,6 +1600,103 @@ module XTwitterScraper
725
1600
  end
726
1601
  end
727
1602
 
1603
+ class RelationTarget < XTwitterScraper::Internal::Type::BaseModel
1604
+ OrHash =
1605
+ T.type_alias do
1606
+ T.any(
1607
+ XTwitterScraper::ExtractionRunParams::RelationTarget,
1608
+ XTwitterScraper::Internal::AnyHash
1609
+ )
1610
+ end
1611
+
1612
+ sig do
1613
+ returns(
1614
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::OrSymbol
1615
+ )
1616
+ end
1617
+ attr_accessor :relation
1618
+
1619
+ sig { returns(String) }
1620
+ attr_accessor :value
1621
+
1622
+ # One target and relation in a mixed profile collection.
1623
+ sig do
1624
+ params(
1625
+ relation:
1626
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::OrSymbol,
1627
+ value: String
1628
+ ).returns(T.attached_class)
1629
+ end
1630
+ def self.new(relation:, value:)
1631
+ end
1632
+
1633
+ sig do
1634
+ override.returns(
1635
+ {
1636
+ relation:
1637
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::OrSymbol,
1638
+ value: String
1639
+ }
1640
+ )
1641
+ end
1642
+ def to_hash
1643
+ end
1644
+
1645
+ module Relation
1646
+ extend XTwitterScraper::Internal::Type::Enum
1647
+
1648
+ TaggedSymbol =
1649
+ T.type_alias do
1650
+ T.all(
1651
+ Symbol,
1652
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation
1653
+ )
1654
+ end
1655
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1656
+
1657
+ COMMUNITY_MEMBERS =
1658
+ T.let(
1659
+ :community_members,
1660
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1661
+ )
1662
+ FOLLOWERS =
1663
+ T.let(
1664
+ :followers,
1665
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1666
+ )
1667
+ FOLLOWING =
1668
+ T.let(
1669
+ :following,
1670
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1671
+ )
1672
+ LIST_FOLLOWERS =
1673
+ T.let(
1674
+ :list_followers,
1675
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1676
+ )
1677
+ LIST_MEMBERS =
1678
+ T.let(
1679
+ :list_members,
1680
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1681
+ )
1682
+ VERIFIED_FOLLOWERS =
1683
+ T.let(
1684
+ :verified_followers,
1685
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1686
+ )
1687
+
1688
+ sig do
1689
+ override.returns(
1690
+ T::Array[
1691
+ XTwitterScraper::ExtractionRunParams::RelationTarget::Relation::TaggedSymbol
1692
+ ]
1693
+ )
1694
+ end
1695
+ def self.values
1696
+ end
1697
+ end
1698
+ end
1699
+
728
1700
  # Reply mode (tweet_search_extractor)
729
1701
  module Replies
730
1702
  extend XTwitterScraper::Internal::Type::Enum
@@ -798,6 +1770,255 @@ module XTwitterScraper
798
1770
  def self.values
799
1771
  end
800
1772
  end
1773
+
1774
+ # Reply depth scope.
1775
+ module Scope
1776
+ extend XTwitterScraper::Internal::Type::Enum
1777
+
1778
+ TaggedSymbol =
1779
+ T.type_alias do
1780
+ T.all(Symbol, XTwitterScraper::ExtractionRunParams::Scope)
1781
+ end
1782
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1783
+
1784
+ ALL =
1785
+ T.let(:all, XTwitterScraper::ExtractionRunParams::Scope::TaggedSymbol)
1786
+ DIRECT =
1787
+ T.let(
1788
+ :direct,
1789
+ XTwitterScraper::ExtractionRunParams::Scope::TaggedSymbol
1790
+ )
1791
+ NESTED =
1792
+ T.let(
1793
+ :nested,
1794
+ XTwitterScraper::ExtractionRunParams::Scope::TaggedSymbol
1795
+ )
1796
+
1797
+ sig do
1798
+ override.returns(
1799
+ T::Array[XTwitterScraper::ExtractionRunParams::Scope::TaggedSymbol]
1800
+ )
1801
+ end
1802
+ def self.values
1803
+ end
1804
+ end
1805
+
1806
+ # Reply start time as ISO 8601 or Unix seconds.
1807
+ module SinceTime
1808
+ extend XTwitterScraper::Internal::Type::Union
1809
+
1810
+ Variants = T.type_alias { T.any(Time, Integer) }
1811
+
1812
+ sig do
1813
+ override.returns(
1814
+ T::Array[XTwitterScraper::ExtractionRunParams::SinceTime::Variants]
1815
+ )
1816
+ end
1817
+ def self.variants
1818
+ end
1819
+ end
1820
+
1821
+ # Reply result order.
1822
+ module Sort
1823
+ extend XTwitterScraper::Internal::Type::Enum
1824
+
1825
+ TaggedSymbol =
1826
+ T.type_alias do
1827
+ T.all(Symbol, XTwitterScraper::ExtractionRunParams::Sort)
1828
+ end
1829
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1830
+
1831
+ RELEVANCE =
1832
+ T.let(
1833
+ :relevance,
1834
+ XTwitterScraper::ExtractionRunParams::Sort::TaggedSymbol
1835
+ )
1836
+ LATEST =
1837
+ T.let(
1838
+ :latest,
1839
+ XTwitterScraper::ExtractionRunParams::Sort::TaggedSymbol
1840
+ )
1841
+ OLDEST =
1842
+ T.let(
1843
+ :oldest,
1844
+ XTwitterScraper::ExtractionRunParams::Sort::TaggedSymbol
1845
+ )
1846
+ LIKES =
1847
+ T.let(
1848
+ :likes,
1849
+ XTwitterScraper::ExtractionRunParams::Sort::TaggedSymbol
1850
+ )
1851
+
1852
+ sig do
1853
+ override.returns(
1854
+ T::Array[XTwitterScraper::ExtractionRunParams::Sort::TaggedSymbol]
1855
+ )
1856
+ end
1857
+ def self.values
1858
+ end
1859
+ end
1860
+
1861
+ # One auto-routed target in a mixed Tweet collection.
1862
+ module Target
1863
+ extend XTwitterScraper::Internal::Type::Union
1864
+
1865
+ Variants =
1866
+ T.type_alias do
1867
+ T.any(
1868
+ String,
1869
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1
1870
+ )
1871
+ end
1872
+
1873
+ class UnionMember1 < XTwitterScraper::Internal::Type::BaseModel
1874
+ OrHash =
1875
+ T.type_alias do
1876
+ T.any(
1877
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1,
1878
+ XTwitterScraper::Internal::AnyHash
1879
+ )
1880
+ end
1881
+
1882
+ sig do
1883
+ returns(
1884
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::OrSymbol
1885
+ )
1886
+ end
1887
+ attr_accessor :kind
1888
+
1889
+ sig { returns(String) }
1890
+ attr_accessor :value
1891
+
1892
+ sig do
1893
+ params(
1894
+ kind:
1895
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::OrSymbol,
1896
+ value: String
1897
+ ).returns(T.attached_class)
1898
+ end
1899
+ def self.new(kind:, value:)
1900
+ end
1901
+
1902
+ sig do
1903
+ override.returns(
1904
+ {
1905
+ kind:
1906
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::OrSymbol,
1907
+ value: String
1908
+ }
1909
+ )
1910
+ end
1911
+ def to_hash
1912
+ end
1913
+
1914
+ module Kind
1915
+ extend XTwitterScraper::Internal::Type::Enum
1916
+
1917
+ TaggedSymbol =
1918
+ T.type_alias do
1919
+ T.all(
1920
+ Symbol,
1921
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind
1922
+ )
1923
+ end
1924
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
1925
+
1926
+ FAVORITERS =
1927
+ T.let(
1928
+ :favoriters,
1929
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1930
+ )
1931
+ LIST =
1932
+ T.let(
1933
+ :list,
1934
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1935
+ )
1936
+ PROFILE =
1937
+ T.let(
1938
+ :profile,
1939
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1940
+ )
1941
+ PROFILE_LIKES =
1942
+ T.let(
1943
+ :profile_likes,
1944
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1945
+ )
1946
+ PROFILE_MEDIA =
1947
+ T.let(
1948
+ :profile_media,
1949
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1950
+ )
1951
+ PROFILE_REPLIES =
1952
+ T.let(
1953
+ :profile_replies,
1954
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1955
+ )
1956
+ QUOTES =
1957
+ T.let(
1958
+ :quotes,
1959
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1960
+ )
1961
+ REPLIES =
1962
+ T.let(
1963
+ :replies,
1964
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1965
+ )
1966
+ RETWEETERS =
1967
+ T.let(
1968
+ :retweeters,
1969
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1970
+ )
1971
+ SEARCH =
1972
+ T.let(
1973
+ :search,
1974
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1975
+ )
1976
+ THREAD =
1977
+ T.let(
1978
+ :thread,
1979
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1980
+ )
1981
+ TWEET =
1982
+ T.let(
1983
+ :tweet,
1984
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1985
+ )
1986
+
1987
+ sig do
1988
+ override.returns(
1989
+ T::Array[
1990
+ XTwitterScraper::ExtractionRunParams::Target::UnionMember1::Kind::TaggedSymbol
1991
+ ]
1992
+ )
1993
+ end
1994
+ def self.values
1995
+ end
1996
+ end
1997
+ end
1998
+
1999
+ sig do
2000
+ override.returns(
2001
+ T::Array[XTwitterScraper::ExtractionRunParams::Target::Variants]
2002
+ )
2003
+ end
2004
+ def self.variants
2005
+ end
2006
+ end
2007
+
2008
+ # Reply end time as ISO 8601 or Unix seconds.
2009
+ module UntilTime
2010
+ extend XTwitterScraper::Internal::Type::Union
2011
+
2012
+ Variants = T.type_alias { T.any(Time, Integer) }
2013
+
2014
+ sig do
2015
+ override.returns(
2016
+ T::Array[XTwitterScraper::ExtractionRunParams::UntilTime::Variants]
2017
+ )
2018
+ end
2019
+ def self.variants
2020
+ end
2021
+ end
801
2022
  end
802
2023
  end
803
2024
  end