A Python client for the SurferCID API
Project description
SurferCID API Client
A Python client for interacting with the SurferCID API. This client provides easy access to SurferCID's services including purchasing accounts, creating and refreshing LTokens, checking orders, and managing balance.
Project Structure
surfercid_client/
├── models.py # Data models and response types
├── surfercid_client.py # Main API client implementation
└── requirements.txt # Project dependencies
Installation
- Install via pip:
pip install surfercid-client
Usage
from surfercid import SurferCIDClient
from surfercid.models import LTokenAccount, Status
# Initialize the client
client = SurferCIDClient(api_key="your_api_key_here")
# Get stock information for a product
stock_info = client.get_stock("Ltoken_create")
print("Stock Info: ", stock_info)
# Check account balance
balance = client.get_balance()
print("Balance: ", balance)
# Create new LTokens
creation_order = client.create_token(quantity=1)
print(f"Order ID: {creation_order.order_id}")
# Wait for token creation to complete
order = client.get_task_status(creation_order.order_id, wait=True)
if order.status == Status.SUCCESS:
for account in order.accounts:
if isinstance(account, LTokenAccount):
print(f"Token created: {account.to_format()}")
# Outputs: mac:XX:XX:XX:XX:XX:XX|wk:NONE0|platform:1|rid:XXX|name:XXX|cbits:1536|playerAge:25|token:XXX|vid:XXX
# Example of refreshing tokens
if isinstance(account, LTokenAccount):
refreshed = client.refresh_token(account)
print(f"Refreshed token: {refreshed.to_format()}")
Available Methods
Token Creation and Management
create_token(quantity: int = 1) -> OrderResponse: Create new LTokensget_task_status(order_id: int, wait: bool = False) -> OrderResponse: Check token creation statusrefresh_token(token_data: Union[str, LTokenAccount]) -> LTokenAccount: Refresh an LToken
Account Management
get_stock(product_name: str) -> Dict[str, Any]: Get stock information for a specific productget_balance() -> float: Get current account balancepurchase(product_name: str, quantity: int) -> OrderResponse: Purchase productsget_order(order_id: int) -> OrderResponse: Get details of a specific orderget_orders(limit: Optional[int] = None) -> List[OrderResponse]: Get list of orders
Data Models
LTokenAccount
@dataclass
class LTokenAccount(Account):
created_at: str
mac: str
name: str
platform: str
rid: str
token: str
wk: str = "NONE0"
cbits: int = 1536
player_age: int = 25
vid: str = ""
def to_format(self) -> str:
"""Convert to the new token format"""
return f"mac:{self.mac}|wk:{self.wk}|platform:{self.platform}|rid:{self.rid}|name:{self.name}|cbits:{self.cbits}|playerAge:{self.player_age}|token:{self.token}|vid:{self.vid}"
OrderResponse
@dataclass
class OrderResponse:
accounts: List[Account]
message: str
success: bool
cost: float
order_id: int
order_date: datetime
processing: bool = False
quantity: int = 0
refund_amount: float = 0
status: Status = Status.FAILED
Status Enum
class Status(Enum):
SUCCESS = "success"
FAILED = "failed"
PROCESSING = "processing"
Error Handling
The client includes comprehensive error handling for various scenarios:
from requests.exceptions import RequestException
try:
# Create a new token
order = client.create_token(quantity=1)
status = client.get_task_status(order.order_id, wait=True)
if status.status == Status.SUCCESS:
print("Token created successfully!")
elif status.status == Status.FAILED:
print(f"Creation failed: {status.message}")
except RequestException as e:
print(f"API request failed: {e}")
except ValueError as e:
print(f"Invalid input or response: {e}")
Token Format
The new token format includes additional fields for enhanced functionality:
mac:XX:XX:XX:XX:XX:XX|wk:NONE0|platform:1|rid:XXX|name:XXX|cbits:1536|playerAge:25|token:XXX|vid:XXX
Where:
mac: MAC addresswk: World key (default: NONE0)platform: Platform identifierrid: Resource identifiername: Account namecbits: Client bits (default: 1536)playerAge: Player age (default: 25)token: Authentication tokenvid: Version identifier
Token Refresh Examples
Single Token Refresh
from surfercid import SurferCIDClient
from surfercid.models import LTokenAccount
# Initialize client
client = SurferCIDClient(api_key="your_api_key")
# Create token account from formatted string
token_str = "mac:XX:XX:XX:XX:XX:XX|wk:NONE0|platform:1|rid:XXX|name:XXX|token:XXX"
token = LTokenAccount.from_format(token_str)
# Refresh token
refreshed = client.refresh_token(token)
print(f"New token: {refreshed.to_format()}")
Multiple Tokens Refresh
from surfercid import SurferCIDClient
from surfercid.models import LTokenAccount
def refresh_tokens(api_key: str, tokens_str: str) -> None:
client = SurferCIDClient(api_key=api_key)
# Parse and refresh each token
for line in tokens_str.strip().split('\n'):
if not line.strip():
continue
try:
token = LTokenAccount.from_format(line)
refreshed = client.refresh_token(token)
print(f"✓ Refreshed {token.name}: {refreshed.to_format()}")
except Exception as e:
print(f"✗ Failed to refresh: {e}")
# Example usage
tokens = """
mac:XX:XX:XX:XX:XX:XX|wk:NONE0|platform:1|rid:XXX|name:Token1|token:XXX
mac:YY:YY:YY:YY:YY:YY|wk:NONE0|platform:1|rid:YYY|name:Token2|token:YYY
"""
refresh_tokens("your_api_key", tokens)
The examples above demonstrate:
- Refreshing a single token using a formatted string
- Batch refreshing multiple tokens from a multi-line string
- Error handling for failed refreshes
- Using the key:value format for token strings
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file surfercid_client-0.1.49.tar.gz.
File metadata
- Download URL: surfercid_client-0.1.49.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15ee94ab7aabd98f5388382c4367a9d1ed8df06caa363f63bd0bb69dfa5f3bb7
|
|
| MD5 |
07b7be981c8db0e586d1a133b9846a28
|
|
| BLAKE2b-256 |
4c8478d964191244041bea3b7cf714eaffa1db7474327e65ab402a1050de6433
|
File details
Details for the file surfercid_client-0.1.49-py3-none-any.whl.
File metadata
- Download URL: surfercid_client-0.1.49-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bca2ca58ae3d612651bf39a1b80b4bc42ba98f6b7d3426c0f70a2d64b13b5631
|
|
| MD5 |
71230b7a2b052ab2ebf4b3ede143d72f
|
|
| BLAKE2b-256 |
5b6388b57ba6430586591214e393b0ef76e7f566d892a43161afed71f6beb4a4
|