From 0be1be0aef1fd0d09b08b4aa7992e0da8911b436 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 12 Aug 2026 10:59:35 +0000 Subject: [PATCH 1/2] feat(api): sync public contracts --- .stats.yml | 6 +- pkg/cmd/xtweet.go | 168 ++++++++++++++++++++++++++++++++++++++++- pkg/cmd/xtweet_test.go | 32 ++++++++ pkg/cmd/xuser.go | 10 +-- 4 files changed, 204 insertions(+), 12 deletions(-) diff --git a/.stats.yml b/.stats.yml index 61f7c4d..a89002f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 124 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik/x-twitter-scraper-d5ea5609c8180c1340dd312fcb526d52953040de479617d4755673705d7c1334.yml -openapi_spec_hash: 9b5ddbbd9ca6b21d24051d6b7cec9123 -config_hash: 217d68ca6999ad03cfc4922e9658297e +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik/x-twitter-scraper-878138bbf57021047ac2af87a490a147b1d41367ee7807cc188d3247cc4b255d.yml +openapi_spec_hash: 1f50b417a17776f9f361f34552879e64 +config_hash: a4624963c7e5bdbdf085e64f3101d3b0 diff --git a/pkg/cmd/xtweet.go b/pkg/cmd/xtweet.go index 94e6102..fdf3f80 100644 --- a/pkg/cmd/xtweet.go +++ b/pkg/cmd/xtweet.go @@ -341,7 +341,7 @@ var xTweetsGetQuotes = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ @@ -625,7 +625,7 @@ var xTweetsGetReplies = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ @@ -882,17 +882,177 @@ var xTweetsGetThread = cli.Command{ Required: true, PathParam: "id", }, + &requestflag.Flag[string]{ + Name: "any-words", + Usage: "Words or quoted phrases where any one can match. Separate with spaces, commas, or lines.", + QueryPath: "anyWords", + }, + &requestflag.Flag[bool]{ + Name: "blue-verified-only", + Usage: "Only return tweets from Blue-verified authors.", + QueryPath: "blueVerifiedOnly", + }, + &requestflag.Flag[string]{ + Name: "cashtags", + Usage: "Cashtags separated by spaces, commas, or lines.", + QueryPath: "cashtags", + }, + &requestflag.Flag[string]{ + Name: "conversation-id", + Usage: "Conversation ID filter.", + QueryPath: "conversationId", + }, &requestflag.Flag[string]{ Name: "cursor", Usage: "Pagination cursor for thread tweets", QueryPath: "cursor", }, + &requestflag.Flag[string]{ + Name: "exact-phrase", + Usage: "Exact phrase to match.", + QueryPath: "exactPhrase", + }, + &requestflag.Flag[string]{ + Name: "exclude-words", + Usage: "Words or quoted phrases to exclude. Separate with spaces, commas, or lines.", + QueryPath: "excludeWords", + }, + &requestflag.Flag[string]{ + Name: "from-user", + Usage: "Filter by author username.", + QueryPath: "fromUser", + }, + &requestflag.Flag[string]{ + Name: "hashtags", + Usage: "Hashtags separated by spaces, commas, or lines.", + QueryPath: "hashtags", + }, + &requestflag.Flag[string]{ + Name: "in-reply-to-tweet-id", + Usage: "Only replies to this tweet ID.", + QueryPath: "inReplyToTweetId", + }, + &requestflag.Flag[string]{ + Name: "language", + Usage: "Language code filter, e.g. en or tr.", + QueryPath: "language", + }, + &requestflag.Flag[int64]{ + Name: "max-faves", + Usage: "Maximum likes threshold. maxLikes is also accepted.", + QueryPath: "maxFaves", + }, + &requestflag.Flag[int64]{ + Name: "max-quotes", + Usage: "Maximum quotes threshold.", + QueryPath: "maxQuotes", + }, + &requestflag.Flag[int64]{ + Name: "max-replies", + Usage: "Maximum replies threshold.", + QueryPath: "maxReplies", + }, + &requestflag.Flag[int64]{ + Name: "max-retweets", + Usage: "Maximum retweets threshold.", + QueryPath: "maxRetweets", + }, + &requestflag.Flag[string]{ + Name: "media-type", + Usage: "Filter by media type.", + QueryPath: "mediaType", + }, + &requestflag.Flag[string]{ + Name: "mentioning", + Usage: "Filter tweets mentioning a username.", + QueryPath: "mentioning", + }, + &requestflag.Flag[int64]{ + Name: "min-bookmarks", + Usage: "Minimum bookmark count threshold.", + QueryPath: "minBookmarks", + }, + &requestflag.Flag[int64]{ + Name: "min-faves", + Usage: "Minimum likes threshold. minLikes is also accepted.", + QueryPath: "minFaves", + }, + &requestflag.Flag[int64]{ + Name: "min-quotes", + Usage: "Minimum quote count threshold.", + QueryPath: "minQuotes", + }, + &requestflag.Flag[int64]{ + Name: "min-replies", + Usage: "Minimum replies threshold.", + QueryPath: "minReplies", + }, + &requestflag.Flag[int64]{ + Name: "min-retweets", + Usage: "Minimum retweets threshold.", + QueryPath: "minRetweets", + }, + &requestflag.Flag[int64]{ + Name: "min-views", + Usage: "Minimum view count threshold.", + QueryPath: "minViews", + }, &requestflag.Flag[int64]{ Name: "page-size", Usage: "Maximum page items (1-100, default 20). Source, filters, or credits can reduce results. Continue while has_next_page is true. Deprecated limit and count aliases remain accepted.\n", Default: 20, QueryPath: "pageSize", }, + &requestflag.Flag[string]{ + Name: "quotes", + Usage: "Quote mode.", + QueryPath: "quotes", + }, + &requestflag.Flag[string]{ + Name: "quotes-of-tweet-id", + Usage: "Only quotes of this tweet ID.", + QueryPath: "quotesOfTweetId", + }, + &requestflag.Flag[string]{ + Name: "replies", + Usage: "Reply mode.", + QueryPath: "replies", + }, + &requestflag.Flag[string]{ + Name: "retweets", + Usage: "Retweet mode.", + QueryPath: "retweets", + }, + &requestflag.Flag[string]{ + Name: "retweets-of-tweet-id", + Usage: "Only retweets of this tweet ID.", + QueryPath: "retweetsOfTweetId", + }, + &requestflag.Flag[any]{ + Name: "since-date", + Usage: "Start date in YYYY-MM-DD format.", + QueryPath: "sinceDate", + }, + &requestflag.Flag[string]{ + Name: "to-user", + Usage: "Filter replies sent to a username.", + QueryPath: "toUser", + }, + &requestflag.Flag[any]{ + Name: "until-date", + Usage: "End date in YYYY-MM-DD format.", + QueryPath: "untilDate", + }, + &requestflag.Flag[string]{ + Name: "url", + Usage: "URL substring or domain filter.", + QueryPath: "url", + }, + &requestflag.Flag[bool]{ + Name: "verified-only", + Usage: "Only return tweets from verified authors.", + QueryPath: "verifiedOnly", + }, }, Action: handleXTweetsGetThread, HideHelpCommand: true, @@ -900,7 +1060,7 @@ var xTweetsGetThread = cli.Command{ var xTweetsSearch = cli.Command{ Name: "search", - Usage: "No-mode search maximizes coverage.", + Usage: "No-mode search maximizes coverage. New cursorless `Latest` sessions return rows\nnewest-first across cursor pages. Existing cursors preserve their established\nordering.", Suggest: true, Flags: []cli.Flag{ &requestflag.Flag[string]{ @@ -1041,7 +1201,7 @@ var xTweetsSearch = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ diff --git a/pkg/cmd/xtweet_test.go b/pkg/cmd/xtweet_test.go index ffa27b6..ca67fd7 100644 --- a/pkg/cmd/xtweet_test.go +++ b/pkg/cmd/xtweet_test.go @@ -293,8 +293,40 @@ func TestXTweetsGetThread(t *testing.T) { "--bearer-token", "string", "x:tweets", "get-thread", "--id", "id", + "--any-words", "anyWords", + "--blue-verified-only=true", + "--cashtags", "cashtags", + "--conversation-id", "conversationId", "--cursor", "cursor", + "--exact-phrase", "exactPhrase", + "--exclude-words", "excludeWords", + "--from-user", "fromUser", + "--hashtags", "hashtags", + "--in-reply-to-tweet-id", "inReplyToTweetId", + "--language", "language", + "--max-faves", "0", + "--max-quotes", "0", + "--max-replies", "0", + "--max-retweets", "0", + "--media-type", "images", + "--mentioning", "mentioning", + "--min-bookmarks", "0", + "--min-faves", "0", + "--min-quotes", "0", + "--min-replies", "0", + "--min-retweets", "0", + "--min-views", "0", "--page-size", "1", + "--quotes", "include", + "--quotes-of-tweet-id", "quotesOfTweetId", + "--replies", "include", + "--retweets", "include", + "--retweets-of-tweet-id", "retweetsOfTweetId", + "--since-date", "'2019-12-27'", + "--to-user", "toUser", + "--until-date", "'2019-12-27'", + "--url", "url", + "--verified-only=true", ) }) } diff --git a/pkg/cmd/xuser.go b/pkg/cmd/xuser.go index cfc447f..7edf0b9 100644 --- a/pkg/cmd/xuser.go +++ b/pkg/cmd/xuser.go @@ -515,7 +515,7 @@ var xUsersRetrieveLikes = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ @@ -761,7 +761,7 @@ var xUsersRetrieveMedia = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ @@ -1007,7 +1007,7 @@ var xUsersRetrieveMentions = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ @@ -1269,7 +1269,7 @@ var xUsersRetrieveReplies = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ @@ -1618,7 +1618,7 @@ var xUsersRetrieveTweets = cli.Command{ }, &requestflag.Flag[int64]{ Name: "min-faves", - Usage: "Minimum likes threshold.", + Usage: "Minimum likes threshold. minLikes is also accepted.", QueryPath: "minFaves", }, &requestflag.Flag[int64]{ From 1cf9f6af4b36aa1d14d2e3a5a63299d606cb6ffd Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:00:08 +0000 Subject: [PATCH 2/2] release: 0.13.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pkg/cmd/version.go | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 38acea6..ed21d28 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.12.1" + ".": "0.13.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 393f9ae..97a5a68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.13.0 (2026-08-12) + +Full Changelog: [v0.12.1...v0.13.0](https://github.com/Xquik-dev/x-twitter-scraper-cli/compare/v0.12.1...v0.13.0) + +### Features + +* **api:** sync public contracts ([0be1be0](https://github.com/Xquik-dev/x-twitter-scraper-cli/commit/0be1be0aef1fd0d09b08b4aa7992e0da8911b436)) + ## 0.12.1 (2026-08-11) Full Changelog: [v0.12.0...v0.12.1](https://github.com/Xquik-dev/x-twitter-scraper-cli/compare/v0.12.0...v0.12.1) diff --git a/pkg/cmd/version.go b/pkg/cmd/version.go index 62c3afd..3073a0a 100644 --- a/pkg/cmd/version.go +++ b/pkg/cmd/version.go @@ -6,4 +6,4 @@ package cmd -const Version = "0.12.1" // x-release-please-version +const Version = "0.13.0" // x-release-please-version