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
6 changes: 2 additions & 4 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ jobs:
publish:
name: publish
runs-on: ubuntu-latest
environment: pypi
permissions:
contents: read
id-token: write

steps:
- uses: actions/checkout@v6
Expand All @@ -28,3 +24,5 @@ jobs:
- name: Publish to PyPI
run: |
bash ./bin/publish-pypi
env:
PYPI_TOKEN: ${{ secrets.X_TWITTER_SCRAPER_PYPI_TOKEN || secrets.PYPI_TOKEN }}
2 changes: 2 additions & 0 deletions .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@ jobs:
- name: Check release environment
run: |
bash ./bin/check-release-environment
env:
PYPI_TOKEN: ${{ secrets.X_TWITTER_SCRAPER_PYPI_TOKEN || secrets.PYPI_TOKEN }}
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.1.3"
".": "0.2.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: 115
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik%2Fx-twitter-scraper-af60c455e2c8579c3d7f0e33c07c0b8332aa3fe8869688c47b2fbf151e271235.yml
openapi_spec_hash: a49d40286e54da6a4978a103b118d33f
config_hash: cec075ca53645b9620ec200be71bdc48
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik%2Fx-twitter-scraper-3b2c6c771ad1da0bbfeb0af115972929ed2c7fcd5e47a79556d66cd21431b224.yml
openapi_spec_hash: de2890233b68387bf5f9b6d19e7d87dc
config_hash: 8894c96caeb6df84c9394518810221bd
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Changelog

## 0.2.0 (2026-04-01)

Full Changelog: [v0.1.3...v0.2.0](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.1.3...v0.2.0)

### Features

* **api:** api update ([dcfbf4f](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/dcfbf4f110165019fa851654c1911715009be8bb))
* **api:** api update ([017a1e4](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/017a1e4dd340690e38449cb036f40d3f6b1360b9))


### Chores

* update SDK settings ([3f45efe](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/3f45efe97044b419663bd45d9f769bf2af860c0b))

## 0.1.3 (2026-03-30)

Full Changelog: [v0.1.2...v0.1.3](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.1.2...v0.1.3)
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ client = XTwitterScraper(
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # This is the default and can be omitted
)

paginated_tweets = client.x.tweets.search(
response = client.x.tweets.search(
q="from:elonmusk",
limit=10,
)
print(paginated_tweets.has_next_page)
print(response.has_next_page)
```

While you can provide an `api_key` keyword argument,
Expand All @@ -59,11 +59,11 @@ client = AsyncXTwitterScraper(


async def main() -> None:
paginated_tweets = await client.x.tweets.search(
response = await client.x.tweets.search(
q="from:elonmusk",
limit=10,
)
print(paginated_tweets.has_next_page)
print(response.has_next_page)


asyncio.run(main())
Expand Down Expand Up @@ -98,11 +98,11 @@ async def main() -> None:
), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
paginated_tweets = await client.x.tweets.search(
response = await client.x.tweets.search(
q="from:elonmusk",
limit=10,
)
print(paginated_tweets.has_next_page)
print(response.has_next_page)


asyncio.run(main())
Expand Down
105 changes: 72 additions & 33 deletions api.md

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions bin/check-release-environment
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

errors=()

if [ -z "${PYPI_TOKEN}" ]; then
errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.")
fi

lenErrors=${#errors[@]}

if [[ lenErrors -gt 0 ]]; then
Expand Down
6 changes: 1 addition & 5 deletions bin/publish-pypi
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,4 @@ set -eux
rm -rf dist
mkdir -p dist
uv build
if [ -n "${PYPI_TOKEN:-}" ]; then
uv publish --token=$PYPI_TOKEN
else
uv publish
fi
uv publish --token=$PYPI_TOKEN
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "x_twitter_scraper"
version = "0.1.3"
version = "0.2.0"
description = "The official Python library for the x-twitter-scraper API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/x_twitter_scraper/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "x_twitter_scraper"
__version__ = "0.1.3" # x-release-please-version
__version__ = "0.2.0" # x-release-please-version
19 changes: 10 additions & 9 deletions src/x_twitter_scraper/resources/drafts.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
async_to_streamed_response_wrapper,
)
from .._base_client import make_request_options
from ..types.draft_detail import DraftDetail
from ..types.draft_list_response import DraftListResponse
from ..types.draft_create_response import DraftCreateResponse
from ..types.draft_retrieve_response import DraftRetrieveResponse

__all__ = ["DraftsResource", "AsyncDraftsResource"]

Expand Down Expand Up @@ -58,7 +59,7 @@ def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> DraftDetail:
) -> DraftCreateResponse:
"""
Save a tweet draft

Expand All @@ -84,7 +85,7 @@ def create(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=DraftDetail,
cast_to=DraftCreateResponse,
)

def retrieve(
Expand All @@ -97,7 +98,7 @@ def retrieve(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> DraftDetail:
) -> DraftRetrieveResponse:
"""
Get draft by ID

Expand All @@ -117,7 +118,7 @@ def retrieve(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=DraftDetail,
cast_to=DraftRetrieveResponse,
)

def list(
Expand Down Expand Up @@ -233,7 +234,7 @@ async def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> DraftDetail:
) -> DraftCreateResponse:
"""
Save a tweet draft

Expand All @@ -259,7 +260,7 @@ async def create(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=DraftDetail,
cast_to=DraftCreateResponse,
)

async def retrieve(
Expand All @@ -272,7 +273,7 @@ async def retrieve(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> DraftDetail:
) -> DraftRetrieveResponse:
"""
Get draft by ID

Expand All @@ -292,7 +293,7 @@ async def retrieve(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=DraftDetail,
cast_to=DraftRetrieveResponse,
)

async def list(
Expand Down
23 changes: 15 additions & 8 deletions src/x_twitter_scraper/resources/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from __future__ import annotations

from typing_extensions import Literal

import httpx

from ..types import event_list_params
Expand All @@ -16,9 +18,8 @@
async_to_streamed_response_wrapper,
)
from .._base_client import make_request_options
from ..types.event_detail import EventDetail
from ..types.shared.event_type import EventType
from ..types.event_list_response import EventListResponse
from ..types.event_retrieve_response import EventRetrieveResponse

__all__ = ["EventsResource", "AsyncEventsResource"]

Expand Down Expand Up @@ -55,7 +56,7 @@ def retrieve(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> EventDetail:
) -> EventRetrieveResponse:
"""
Get event

Expand All @@ -75,14 +76,17 @@ def retrieve(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=EventDetail,
cast_to=EventRetrieveResponse,
)

def list(
self,
*,
after: str | Omit = omit,
event_type: EventType | Omit = omit,
event_type: Literal[
"tweet.new", "tweet.reply", "tweet.retweet", "tweet.quote", "follower.gained", "follower.lost"
]
| Omit = omit,
limit: int | Omit = omit,
monitor_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
Expand Down Expand Up @@ -160,7 +164,7 @@ async def retrieve(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> EventDetail:
) -> EventRetrieveResponse:
"""
Get event

Expand All @@ -180,14 +184,17 @@ async def retrieve(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=EventDetail,
cast_to=EventRetrieveResponse,
)

async def list(
self,
*,
after: str | Omit = omit,
event_type: EventType | Omit = omit,
event_type: Literal[
"tweet.new", "tweet.reply", "tweet.retweet", "tweet.quote", "follower.gained", "follower.lost"
]
| Omit = omit,
limit: int | Omit = omit,
monitor_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
Expand Down
Loading
Loading