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