X-Client-Transaction-ID
Twitter X-Client-Transaction-Id generator written in python.
Reference :
- Twitter Header: Part 1, Deobfuscation
- Twitter Header: Part 2, Reverse Engineering
- Twitter Header: Part 3, Generating the header
Installation
Install XClientTransaction with pip
pip install XClientTransaction -U --no-cache-dir
Usage/Examples
python quickstart.py
Get x.com Home Page and ondemand.s File Response
Synchronous Version
import bs4
import requests
from x_client_transaction.utils import generate_headers, handle_x_migration, get_ondemand_file_url
# INITIALIZE SESSION
session = requests.Session()
session.headers = generate_headers()
# GET HOME PAGE RESPONSE
# required only when hitting twitter.com but not x.com
# returns bs4.BeautifulSoup object
home_page_response = handle_x_migration(session=session)
# for x.com no migration is required, just simply do
home_page = session.get(url="https://x.com/home")
home_page_response = bs4.BeautifulSoup(home_page.content, 'html.parser')
# GET ondemand.s FILE RESPONSE
ondemand_file_url = get_ondemand_file_url(response=home_page_response)
ondemand_file = session.get(url=ondemand_file_url)
ondemand_file_response = bs4.BeautifulSoup(ondemand_file.content, 'html.parser')
# Getting "Couldn't get KEY_BYTE indices" error? Try passing the original response or the response text
# both should work
# ondemand_file_response = ondemand_file
ondemand_file_response = ondemand_file.text
Async Version
import bs4
import httpx
from x_client_transaction.utils import generate_headers, handle_x_migration_async, get_ondemand_file_url
# INITIALIZE SESSION
session = httpx.AsyncClient(headers=generate_headers())
# GET HOME PAGE RESPONSE
# required only when hitting twitter.com but not x.com
# returns bs4.BeautifulSoup object
home_page_response = await handle_x_migration_async(session=session)
# for x.com no migration is required, just simply do
home_page = await session.get(url="https://x.com/home")
home_page_response = bs4.BeautifulSoup(home_page.content, 'html.parser')
# GET ondemand.s FILE RESPONSE
ondemand_file_url = get_ondemand_file_url(response=home_page_response)
ondemand_file = await session.get(url=ondemand_file_url)
ondemand_file_response = bs4.BeautifulSoup(ondemand_file.content, 'html.parser')
# Getting "Couldn't get KEY_BYTE indices" error? Try passing the original response or the response text
# both should work
# ondemand_file_response = ondemand_file
ondemand_file_response = ondemand_file.text
Generate X-Client-Transaction-Id (tid):
from urllib.parse import urlparse
from x_client_transaction import ClientTransaction
# Example 1
# replace the url and http method as per your use case
url = "https://x.com/i/api/1.1/jot/client_event.json"
method = "POST"
path = urlparse(url=url).path
# path will be /i/api/1.1/jot/client_event.json in this case
# Example 2
user_by_screen_name_url = "https://x.com/i/api/graphql/1VOOyvKkiI3FMmkeDNxM9A/UserByScreenName"
user_by_screen_name_http_method = "GET"
user_by_screen_name_path = urlparse(url=url).path
# path will be /i/api/graphql/1VOOyvKkiI3FMmkeDNxM9A/UserByScreenName in this case
ct = ClientTransaction(home_page_response=home_page_response, ondemand_file_response=ondemand_file_response)
transaction_id = ct.generate_transaction_id(method=method, path=path)
transaction_id_for_user_by_screen_name_endpoint = ct.generate_transaction_id(
method=user_by_screen_name_http_method, path=user_by_screen_name_path)
print(transaction_id)
print(transaction_id_for_user_by_screen_name_endpoint)
Authors
Feedback
If you have any feedback, please reach out to us at hello@sarabjitdhiman.com or contact me on Social Media @iSarabjitDhiman
Support
For support, email hello@sarabjitdhiman.com
Metadata
Release files for xclienttransaction 1.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xclienttransaction-1.0.3.tar.gz | 10.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xclienttransaction-1.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.4 kB
Release files / xclienttransaction-1.0.3.tar.gz
| Download URL | xclienttransaction-1.0.3.tar.gz |
|---|---|
| Size | 10.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1eeb5d48cec6a224189bbd8a6021c40486fa3aff650478672bccf82b3436cedc
|
|
BLAKE2b-256 checksum How to use checksums |
1b116f5a55df6d464fe6f839fe96c3863fa2338005ed8e83e89b0a9db5716b5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.7
|
Release files / xclienttransaction-1.0.3-py3-none-any.whl
| Download URL | xclienttransaction-1.0.3-py3-none-any.whl |
|---|---|
| Size | 10.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f73dd2a4b6856f98fa45f0cd26c9a0fdc0b2ceba0e79b5523cdf8aac7efc59fe
|
|
BLAKE2b-256 checksum How to use checksums |
faa1be735112ebe49916065e6f80017b93e92fc8880789c3f4f17380db7f531a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.7
|