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
@@ -0,0 +1,299 @@
1
+ # frozen_string_literal: true
2
+
3
+ module XTwitterScraper
4
+ module Models
5
+ module X
6
+ # No-mode search, user Tweet, user reply, and direct reply reads use automatic
7
+ # coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed
8
+ # cursors remain legacy. Follow next_cursor while has_next_page is true. An empty
9
+ # filtered page can still have has_next_page true.
10
+ #
11
+ # @see XTwitterScraper::Resources::X::Tweets#search
12
+ module TweetSearchResponse
13
+ extend XTwitterScraper::Internal::Type::Union
14
+
15
+ # No-mode search, user Tweet, user reply, and direct reply reads use automatic coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed cursors remain legacy. Follow next_cursor while has_next_page is true. An empty filtered page can still have has_next_page true.
16
+ variant -> { XTwitterScraper::PaginatedTweets }
17
+
18
+ # No-mode search, user Tweet, user reply, and direct reply reads use automatic coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed cursors remain legacy. Follow next_cursor while has_next_page is true. An empty filtered page can still have has_next_page true.
19
+ variant -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse }
20
+
21
+ class TweetSearchCoverageResponse < XTwitterScraper::Models::PaginatedTweets
22
+ # @!attribute diagnostic
23
+ # Coverage evidence across parallel search strategies.
24
+ #
25
+ # @return [XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic]
26
+ required :diagnostic,
27
+ -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic }
28
+
29
+ # @!attribute has_next_page
30
+ #
31
+ # @return [Boolean, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::HasNextPage, nil]
32
+ optional :has_next_page,
33
+ enum: -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::HasNextPage }
34
+
35
+ # @!attribute next_cursor
36
+ #
37
+ # @return [Symbol, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::NextCursor, nil]
38
+ optional :next_cursor,
39
+ enum: -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::NextCursor }
40
+
41
+ # @!method initialize(diagnostic:, has_next_page: nil, next_cursor: nil)
42
+ # No-mode search, user Tweet, user reply, and direct reply reads use automatic
43
+ # coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed
44
+ # cursors remain legacy. Follow next_cursor while has_next_page is true. An empty
45
+ # filtered page can still have has_next_page true.
46
+ #
47
+ # @param diagnostic [XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic] Coverage evidence across parallel search strategies.
48
+ #
49
+ # @param has_next_page [Boolean, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::HasNextPage]
50
+ #
51
+ # @param next_cursor [Symbol, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::NextCursor]
52
+
53
+ class Diagnostic < XTwitterScraper::Internal::Type::BaseModel
54
+ # @!attribute complete
55
+ # True when every strategy exhausted its source.
56
+ #
57
+ # @return [Boolean]
58
+ required :complete, XTwitterScraper::Internal::Type::Boolean
59
+
60
+ # @!attribute cursor_failure_count
61
+ #
62
+ # @return [Integer]
63
+ required :cursor_failure_count, Integer, api_name: :cursorFailureCount
64
+
65
+ # @!attribute deadline_reached
66
+ #
67
+ # @return [Boolean]
68
+ required :deadline_reached, XTwitterScraper::Internal::Type::Boolean, api_name: :deadlineReached
69
+
70
+ # @!attribute duplicate_count
71
+ #
72
+ # @return [Integer]
73
+ required :duplicate_count, Integer, api_name: :duplicateCount
74
+
75
+ # @!attribute failed_strategy_count
76
+ #
77
+ # @return [Integer]
78
+ required :failed_strategy_count, Integer, api_name: :failedStrategyCount
79
+
80
+ # @!attribute malformed_count
81
+ #
82
+ # @return [Integer]
83
+ required :malformed_count, Integer, api_name: :malformedCount
84
+
85
+ # @!attribute pages_fetched
86
+ #
87
+ # @return [Integer]
88
+ required :pages_fetched, Integer, api_name: :pagesFetched
89
+
90
+ # @!attribute partitioned
91
+ # Whether bounded time windows ran in parallel.
92
+ #
93
+ # @return [Boolean]
94
+ required :partitioned, XTwitterScraper::Internal::Type::Boolean
95
+
96
+ # @!attribute response_truncated
97
+ # Whether credits or the requested limit reduced output.
98
+ #
99
+ # @return [Boolean]
100
+ required :response_truncated,
101
+ XTwitterScraper::Internal::Type::Boolean,
102
+ api_name: :responseTruncated
103
+
104
+ # @!attribute result_limit_reached
105
+ #
106
+ # @return [Boolean]
107
+ required :result_limit_reached,
108
+ XTwitterScraper::Internal::Type::Boolean,
109
+ api_name: :resultLimitReached
110
+
111
+ # @!attribute returned_tweets
112
+ #
113
+ # @return [Integer]
114
+ required :returned_tweets, Integer, api_name: :returnedTweets
115
+
116
+ # @!attribute stalled_strategy_count
117
+ #
118
+ # @return [Integer]
119
+ required :stalled_strategy_count, Integer, api_name: :stalledStrategyCount
120
+
121
+ # @!attribute strategies
122
+ #
123
+ # @return [Array<XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy>]
124
+ required :strategies,
125
+ -> { XTwitterScraper::Internal::Type::ArrayOf[XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy] }
126
+
127
+ # @!attribute strategy_count
128
+ #
129
+ # @return [Integer]
130
+ required :strategy_count, Integer, api_name: :strategyCount
131
+
132
+ # @!attribute unique_tweets
133
+ #
134
+ # @return [Integer]
135
+ required :unique_tweets, Integer, api_name: :uniqueTweets
136
+
137
+ # @!method initialize(complete:, cursor_failure_count:, deadline_reached:, duplicate_count:, failed_strategy_count:, malformed_count:, pages_fetched:, partitioned:, response_truncated:, result_limit_reached:, returned_tweets:, stalled_strategy_count:, strategies:, strategy_count:, unique_tweets:)
138
+ # Coverage evidence across parallel search strategies.
139
+ #
140
+ # @param complete [Boolean] True when every strategy exhausted its source.
141
+ #
142
+ # @param cursor_failure_count [Integer]
143
+ #
144
+ # @param deadline_reached [Boolean]
145
+ #
146
+ # @param duplicate_count [Integer]
147
+ #
148
+ # @param failed_strategy_count [Integer]
149
+ #
150
+ # @param malformed_count [Integer]
151
+ #
152
+ # @param pages_fetched [Integer]
153
+ #
154
+ # @param partitioned [Boolean] Whether bounded time windows ran in parallel.
155
+ #
156
+ # @param response_truncated [Boolean] Whether credits or the requested limit reduced output.
157
+ #
158
+ # @param result_limit_reached [Boolean]
159
+ #
160
+ # @param returned_tweets [Integer]
161
+ #
162
+ # @param stalled_strategy_count [Integer]
163
+ #
164
+ # @param strategies [Array<XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy>]
165
+ #
166
+ # @param strategy_count [Integer]
167
+ #
168
+ # @param unique_tweets [Integer]
169
+
170
+ class Strategy < XTwitterScraper::Internal::Type::BaseModel
171
+ # @!attribute duplicate_count
172
+ #
173
+ # @return [Integer]
174
+ required :duplicate_count, Integer, api_name: :duplicateCount
175
+
176
+ # @!attribute pages_fetched
177
+ #
178
+ # @return [Integer]
179
+ required :pages_fetched, Integer, api_name: :pagesFetched
180
+
181
+ # @!attribute query_type
182
+ #
183
+ # @return [Symbol, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::QueryType]
184
+ required :query_type,
185
+ enum: -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::QueryType },
186
+ api_name: :queryType
187
+
188
+ # @!attribute stop_reason
189
+ #
190
+ # @return [Symbol, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::StopReason]
191
+ required :stop_reason,
192
+ enum: -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::StopReason },
193
+ api_name: :stopReason
194
+
195
+ # @!attribute strategy
196
+ #
197
+ # @return [Integer]
198
+ required :strategy, Integer
199
+
200
+ # @!attribute unique_added
201
+ #
202
+ # @return [Integer]
203
+ required :unique_added, Integer, api_name: :uniqueAdded
204
+
205
+ # @!attribute window
206
+ # Non-overlapping time partition used by one strategy.
207
+ #
208
+ # @return [XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::Window, nil]
209
+ optional :window,
210
+ -> { XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::Window }
211
+
212
+ # @!method initialize(duplicate_count:, pages_fetched:, query_type:, stop_reason:, strategy:, unique_added:, window: nil)
213
+ # @param duplicate_count [Integer]
214
+ #
215
+ # @param pages_fetched [Integer]
216
+ #
217
+ # @param query_type [Symbol, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::QueryType]
218
+ #
219
+ # @param stop_reason [Symbol, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::StopReason]
220
+ #
221
+ # @param strategy [Integer]
222
+ #
223
+ # @param unique_added [Integer]
224
+ #
225
+ # @param window [XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy::Window] Non-overlapping time partition used by one strategy.
226
+
227
+ # @see XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy#query_type
228
+ module QueryType
229
+ extend XTwitterScraper::Internal::Type::Enum
230
+
231
+ LATEST = :Latest
232
+ TOP = :Top
233
+
234
+ # @!method self.values
235
+ # @return [Array<Symbol>]
236
+ end
237
+
238
+ # @see XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy#stop_reason
239
+ module StopReason
240
+ extend XTwitterScraper::Internal::Type::Enum
241
+
242
+ CURSOR_FAILURE = :cursor_failure
243
+ DEADLINE = :deadline
244
+ EXHAUSTED = :exhausted
245
+ FAILED = :failed
246
+ PAGE_LIMIT = :page_limit
247
+ RESULT_LIMIT = :result_limit
248
+ STALLED = :stalled
249
+
250
+ # @!method self.values
251
+ # @return [Array<Symbol>]
252
+ end
253
+
254
+ # @see XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse::Diagnostic::Strategy#window
255
+ class Window < XTwitterScraper::Internal::Type::BaseModel
256
+ # @!attribute since_time
257
+ #
258
+ # @return [Time]
259
+ required :since_time, Time, api_name: :sinceTime
260
+
261
+ # @!attribute until_time
262
+ #
263
+ # @return [Time]
264
+ required :until_time, Time, api_name: :untilTime
265
+
266
+ # @!method initialize(since_time:, until_time:)
267
+ # Non-overlapping time partition used by one strategy.
268
+ #
269
+ # @param since_time [Time]
270
+ # @param until_time [Time]
271
+ end
272
+ end
273
+ end
274
+
275
+ module HasNextPage
276
+ extend XTwitterScraper::Internal::Type::Enum
277
+
278
+ FALSE = false
279
+
280
+ # @!method self.values
281
+ # @return [Array<Boolean>]
282
+ end
283
+
284
+ module NextCursor
285
+ extend XTwitterScraper::Internal::Type::Enum
286
+
287
+ EMPTY = :""
288
+
289
+ # @!method self.values
290
+ # @return [Array<Symbol>]
291
+ end
292
+ end
293
+
294
+ # @!method self.variants
295
+ # @return [Array(XTwitterScraper::Models::PaginatedTweets, XTwitterScraper::Models::X::TweetSearchResponse::TweetSearchCoverageResponse)]
296
+ end
297
+ end
298
+ end
299
+ end
@@ -23,28 +23,119 @@ module XTwitterScraper
23
23
  # @return [String, nil]
24
24
  optional :after, String
25
25
 
26
+ # @!attribute bio_contains
27
+ # Match any comma-separated or line-separated bio term, ignoring case.
28
+ #
29
+ # @return [String, nil]
30
+ optional :bio_contains, String
31
+
26
32
  # @!attribute cursor
27
- # Pagination cursor for followers list
33
+ # Cursor from the previous response. Xquik cursors resume automatic coverage.
34
+ # Existing unprefixed cursors keep legacy standard behavior.
28
35
  #
29
36
  # @return [String, nil]
30
37
  optional :cursor, String
31
38
 
39
+ # @!attribute has_location
40
+ # Only return profiles with a location.
41
+ #
42
+ # @return [Boolean, nil]
43
+ optional :has_location, XTwitterScraper::Internal::Type::Boolean
44
+
45
+ # @!attribute has_website
46
+ # Only return profiles with a website.
47
+ #
48
+ # @return [Boolean, nil]
49
+ optional :has_website, XTwitterScraper::Internal::Type::Boolean
50
+
32
51
  # @!attribute limit
33
- # Legacy integer page size alias for following lists. Prefer pageSize.
52
+ # Legacy page-size alias outside explicit coverage mode. Coverage accepts 1-10000.
53
+ # Prefer pageSize.
34
54
  #
35
55
  # @return [Integer, nil]
36
56
  optional :limit, Integer
37
57
 
58
+ # @!attribute location_contains
59
+ # Match a location substring, ignoring case.
60
+ #
61
+ # @return [String, nil]
62
+ optional :location_contains, String
63
+
64
+ # @!attribute max_followers
65
+ # Maximum follower count. Missing counts pass this maximum.
66
+ #
67
+ # @return [Integer, nil]
68
+ optional :max_followers, Integer
69
+
70
+ # @!attribute max_following
71
+ # Maximum following count.
72
+ #
73
+ # @return [Integer, nil]
74
+ optional :max_following, Integer
75
+
76
+ # @!attribute max_statuses
77
+ # Maximum post count. maxPosts is also accepted.
78
+ #
79
+ # @return [Integer, nil]
80
+ optional :max_statuses, Integer
81
+
82
+ # @!attribute min_account_age_days
83
+ # Minimum account age in whole days.
84
+ #
85
+ # @return [Integer, nil]
86
+ optional :min_account_age_days, Integer
87
+
88
+ # @!attribute min_followers
89
+ # Minimum follower count. Filtering happens before billing.
90
+ #
91
+ # @return [Integer, nil]
92
+ optional :min_followers, Integer
93
+
94
+ # @!attribute min_following
95
+ # Minimum following count.
96
+ #
97
+ # @return [Integer, nil]
98
+ optional :min_following, Integer
99
+
100
+ # @!attribute min_statuses
101
+ # Minimum post count. minPosts is also accepted.
102
+ #
103
+ # @return [Integer, nil]
104
+ optional :min_statuses, Integer
105
+
106
+ # @!attribute mode
107
+ # Omit mode for resumable maximum coverage. Standard keeps legacy pagination.
108
+ # Coverage returns diagnostics once and rejects cursors.
109
+ #
110
+ # @return [Symbol, XTwitterScraper::Models::X::UserRetrieveFollowersParams::Mode, nil]
111
+ optional :mode, enum: -> { XTwitterScraper::X::UserRetrieveFollowersParams::Mode }
112
+
38
113
  # @!attribute page_size
39
- # Maximum user profiles requested from this page (20-200, default 200). The
40
- # response can contain fewer profiles because the source returned fewer or
41
- # remaining credits cover fewer results. Keep requesting next_cursor while
42
- # has_next_page is true. The deprecated limit and count aliases remain accepted.
114
+ # Maximum user profiles: automatic 300; standard 200. Sources return fewer
115
+ # profiles. Continue with has_next_page.
43
116
  #
44
117
  # @return [Integer, nil]
45
118
  optional :page_size, Integer
46
119
 
47
- # @!method initialize(id:, after: nil, cursor: nil, limit: nil, page_size: nil, request_options: {})
120
+ # @!attribute username_contains
121
+ # Match a username substring, ignoring case.
122
+ #
123
+ # @return [String, nil]
124
+ optional :username_contains, String
125
+
126
+ # @!attribute verified_only
127
+ # Only return verified profiles.
128
+ #
129
+ # @return [Boolean, nil]
130
+ optional :verified_only, XTwitterScraper::Internal::Type::Boolean
131
+
132
+ # @!attribute verified_type
133
+ # Match the verification type exactly, ignoring case.
134
+ #
135
+ # @return [String, nil]
136
+ optional :verified_type, String
137
+
138
+ # @!method initialize(id:, after: nil, bio_contains: nil, cursor: nil, has_location: nil, has_website: nil, limit: nil, location_contains: nil, max_followers: nil, max_following: nil, max_statuses: nil, min_account_age_days: nil, min_followers: nil, min_following: nil, min_statuses: nil, mode: nil, page_size: nil, username_contains: nil, verified_only: nil, verified_type: nil, request_options: {})
48
139
  # Some parameter documentations has been truncated, see
49
140
  # {XTwitterScraper::Models::X::UserRetrieveFollowersParams} for more details.
50
141
  #
@@ -52,13 +143,55 @@ module XTwitterScraper
52
143
  #
53
144
  # @param after [String] Legacy cursor alias. Prefer cursor.
54
145
  #
55
- # @param cursor [String] Pagination cursor for followers list
146
+ # @param bio_contains [String] Match any comma-separated or line-separated bio term, ignoring case.
147
+ #
148
+ # @param cursor [String] Cursor from the previous response. Xquik cursors resume automatic coverage. Exis
149
+ #
150
+ # @param has_location [Boolean] Only return profiles with a location.
151
+ #
152
+ # @param has_website [Boolean] Only return profiles with a website.
153
+ #
154
+ # @param limit [Integer] Legacy page-size alias outside explicit coverage mode. Coverage accepts 1-10000.
56
155
  #
57
- # @param limit [Integer] Legacy integer page size alias for following lists. Prefer pageSize.
156
+ # @param location_contains [String] Match a location substring, ignoring case.
58
157
  #
59
- # @param page_size [Integer] Maximum user profiles requested from this page (20-200, default 200). The respon
158
+ # @param max_followers [Integer] Maximum follower count. Missing counts pass this maximum.
159
+ #
160
+ # @param max_following [Integer] Maximum following count.
161
+ #
162
+ # @param max_statuses [Integer] Maximum post count. maxPosts is also accepted.
163
+ #
164
+ # @param min_account_age_days [Integer] Minimum account age in whole days.
165
+ #
166
+ # @param min_followers [Integer] Minimum follower count. Filtering happens before billing.
167
+ #
168
+ # @param min_following [Integer] Minimum following count.
169
+ #
170
+ # @param min_statuses [Integer] Minimum post count. minPosts is also accepted.
171
+ #
172
+ # @param mode [Symbol, XTwitterScraper::Models::X::UserRetrieveFollowersParams::Mode] Omit mode for resumable maximum coverage. Standard keeps legacy pagination. Cove
173
+ #
174
+ # @param page_size [Integer] Maximum user profiles: automatic 300; standard 200. Sources return fewer profile
175
+ #
176
+ # @param username_contains [String] Match a username substring, ignoring case.
177
+ #
178
+ # @param verified_only [Boolean] Only return verified profiles.
179
+ #
180
+ # @param verified_type [String] Match the verification type exactly, ignoring case.
60
181
  #
61
182
  # @param request_options [XTwitterScraper::RequestOptions, Hash{Symbol=>Object}]
183
+
184
+ # Omit mode for resumable maximum coverage. Standard keeps legacy pagination.
185
+ # Coverage returns diagnostics once and rejects cursors.
186
+ module Mode
187
+ extend XTwitterScraper::Internal::Type::Enum
188
+
189
+ STANDARD = :standard
190
+ COVERAGE = :coverage
191
+
192
+ # @!method self.values
193
+ # @return [Array<Symbol>]
194
+ end
62
195
  end
63
196
  end
64
197
  end