Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.12.1"
".": "0.13.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -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
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@

package cmd

const Version = "0.12.1" // x-release-please-version
const Version = "0.13.0" // x-release-please-version
168 changes: 164 additions & 4 deletions pkg/cmd/xtweet.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]{
Expand Down Expand Up @@ -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]{
Expand Down Expand Up @@ -882,25 +882,185 @@ 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,
}

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]{
Expand Down Expand Up @@ -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]{
Expand Down
32 changes: 32 additions & 0 deletions pkg/cmd/xtweet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
})
}
Expand Down
10 changes: 5 additions & 5 deletions pkg/cmd/xuser.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]{
Expand Down Expand Up @@ -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]{
Expand Down Expand Up @@ -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]{
Expand Down Expand Up @@ -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]{
Expand Down Expand Up @@ -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]{
Expand Down