Professional Python client for GMGN.ai WebSocket API - Real-time Solana blockchain data streams
Project description
GmGnAPI
Professional Python client library for GMGN.ai WebSocket API
GmGnAPI provides real-time access to Solana blockchain data through GMGN.ai's WebSocket API with advanced features including intelligent filtering, data export capabilities, monitoring statistics, and automated alerting.
๐ Quick Links
- ๐ Documentation - Complete guides and API reference
- ๐ฌ Discord Community - Get help and discuss strategies
- ๐ Create GMGN Account - Sign up with our referral link to support the project
๐ Features
Core Functionality
- Real-time WebSocket connection to GMGN.ai API
- Multiple data channels: New pools, token launches, pair updates, chain statistics, social info, wallet trades, limit orders
- Automatic reconnection with exponential backoff
- Comprehensive error handling and logging
- Type-safe with full Pydantic model validation
- Async/await support for modern Python applications
Advanced Features
- ๐ Intelligent Filtering: Advanced token filtering by market cap, liquidity, volume, holder count, exchange, and risk scores
- ๐ Data Export: Export to JSON, CSV, or SQLite database with automatic file rotation and compression
- ๐ Monitoring & Statistics: Real-time connection metrics, message counts, unique token/pool tracking
- ๐จ Alert System: Configurable alerts for market conditions with rate limiting and webhook support
- โก Rate Limiting: Configurable message processing limits to prevent overwhelming
- ๐ Queue Management: Buffered message processing with configurable queue sizes
๐ฆ Installation
pip install gmgnapi
Development Installation
git clone https://github.com/yourusername/gmgnapi.git
cd gmgnapi
pip install -e .
๐ Account Setup
1. Create GMGN Account
Create your GMGN account using our referral link to support the project: ๐ Create GMGN Account
2. Get API Token
- Log in to your GMGN account
- Navigate to Account Settings
- Generate an API token
- Copy and securely store your token
3. Join Community
Join our Discord server for support and updates: ๐ Discord Community
๐ฏ Quick Start
Basic Usage
import asyncio
from gmgnapi import GmGnClient
async def on_new_pool(pool_info):
if pool_info.pools:
pool = pool_info.pools[0]
token_info = pool.bti
if token_info:
print(f"New pool: {token_info.s} ({token_info.n})")
async def main():
client = GmGnClient()
client.on_new_pool(on_new_pool)
await client.connect()
await client.subscribe_new_pools()
# Keep running
while True:
await asyncio.sleep(1)
asyncio.run(main())
Advanced Usage with Filtering and Export
import asyncio
from decimal import Decimal
from gmgnapi import (
GmGnEnhancedClient,
TokenFilter,
DataExportConfig,
AlertConfig
)
async def main():
# Configure advanced token filtering
token_filter = TokenFilter(
min_market_cap=Decimal("50000"), # $50k minimum market cap
min_liquidity=Decimal("10000"), # $10k minimum liquidity
min_volume_24h=Decimal("5000"), # $5k minimum daily volume
min_holder_count=10, # 10+ holders
exchanges=["raydium", "orca"], # Specific exchanges only
exclude_symbols=["SCAM", "TEST"], # Exclude potential scams
max_risk_score=0.7, # Maximum risk threshold
)
# Configure data export
export_config = DataExportConfig(
enabled=True,
format="json", # "json", "csv", or "database"
file_path="./gmgn_data", # Export directory
max_file_size_mb=50, # File rotation at 50MB
rotation_interval_hours=6, # Rotate every 6 hours
compress=True, # Enable compression
)
# Configure alerts
alert_config = AlertConfig(
enabled=True,
webhook_url="https://hooks.slack.com/...", # Optional webhook
conditions=[
{
"type": "high_value_pool",
"min_market_cap": 100000,
"description": "Alert for pools > $100k"
}
],
rate_limit_seconds=300, # Max 1 alert per 5 minutes
)
# Initialize enhanced client
client = GmGnEnhancedClient(
token_filter=token_filter,
export_config=export_config,
alert_config=alert_config,
rate_limit=100, # Max 100 messages/second
)
# Event handlers
async def on_new_pool(pool_info):
if pool_info.pools:
pool = pool_info.pools[0]
token_info = pool.bti
if token_info:
print(f"๐ฅ Filtered pool: {token_info.s} - ${token_info.mc:,}")
async def on_volume_spike(pair_data):
if pair_data.volume_24h_usd > Decimal("500000"):
print(f"๐ Volume spike: ${pair_data.volume_24h_usd:,}")
client.on_new_pool(on_new_pool)
client.on_pair_update(on_volume_spike)
# Connect and subscribe
await client.connect()
await client.subscribe_all_channels()
# Monitor and get statistics
while True:
await asyncio.sleep(60)
stats = client.get_monitoring_stats()
print(f"๐ Stats: {stats.total_messages:,} messages, "
f"{stats.unique_tokens_seen} tokens, "
f"{stats.unique_pools_seen} pools")
asyncio.run(main())
๐ Available Channels
Public Channels
new_pools: New liquidity pool creation eventspair_update: Trading pair price and volume updatestoken_launch: New token launch notificationschain_stats: Blockchain statistics and metrics
Authenticated Channels (require access token)
token_social: Token social media and community informationwallet_trades: Wallet trading activity and transactionslimit_orders: Limit order updates and fills
๐ง Configuration Options
TokenFilter
Filter tokens based on various criteria:
TokenFilter(
min_market_cap=Decimal("10000"), # Minimum market cap in USD
max_market_cap=Decimal("1000000"), # Maximum market cap in USD
min_liquidity=Decimal("5000"), # Minimum liquidity in USD
min_volume_24h=Decimal("1000"), # Minimum 24h volume in USD
min_holder_count=10, # Minimum number of holders
exchanges=["raydium", "orca"], # Allowed exchanges
symbols=["SOL", "USDC"], # Specific symbols to include
exclude_symbols=["SCAM", "TEST"], # Symbols to exclude
max_risk_score=0.5, # Maximum risk score (0-1)
)
DataExportConfig
Configure data export and storage:
DataExportConfig(
enabled=True, # Enable/disable export
format="json", # "json", "csv", or "database"
file_path="./exports", # Export directory
max_file_size_mb=100, # File size limit for rotation
rotation_interval_hours=24, # Time-based rotation
compress=True, # Enable compression
include_metadata=True, # Include extra metadata
)
AlertConfig
Set up alerts and notifications:
AlertConfig(
enabled=True, # Enable/disable alerts
webhook_url="https://hooks.slack.com/...", # Webhook URL for notifications
email="alerts@example.com", # Email for alerts
conditions=[ # Custom alert conditions
{
"type": "new_pool",
"min_liquidity": 100000,
"description": "High liquidity pool alert"
}
],
rate_limit_seconds=300, # Minimum time between alerts
)
๐ Monitoring and Statistics
Get real-time monitoring statistics:
stats = client.get_monitoring_stats()
print(f"Total messages: {stats.total_messages:,}")
print(f"Messages per minute: {stats.messages_per_minute:.1f}")
print(f"Unique tokens seen: {stats.unique_tokens_seen}")
print(f"Unique pools seen: {stats.unique_pools_seen}")
print(f"Connection uptime: {stats.connection_uptime:.0f}s")
print(f"Error count: {stats.error_count}")
๐ Data Export Formats
JSON Export
{
"timestamp": "2024-01-15T10:30:00",
"channel": "new_pools",
"data": {
"c": "sol",
"p": [{
"a": "pool_address_here",
"ba": "base_token_address",
"qa": "quote_token_address",
"bti": {
"s": "TOKEN",
"n": "Token Name",
"mc": 150000
}
}]
}
}
CSV Export
timestamp,channel,data
2024-01-15T10:30:00,new_pools,"{""c"":""sol"",""p"":[...]}"
SQLite Database
Tables: messages, new_pools, trades with structured data storage.
๐จ Error Handling
GmGnAPI provides comprehensive error handling:
from gmgnapi import (
GmGnAPIError,
ConnectionError,
AuthenticationError,
SubscriptionError,
MessageParsingError,
)
try:
await client.connect()
await client.subscribe_wallet_trades()
except AuthenticationError:
print("Invalid access token")
except ConnectionError:
print("Failed to connect to WebSocket")
except SubscriptionError as e:
print(f"Subscription failed: {e}")
except GmGnAPIError as e:
print(f"API error: {e}")
๐ Examples
The examples/ directory contains comprehensive examples:
basic_usage.py: Simple connection and data streamingadvanced_monitoring.py: Full-featured monitoring with statisticsdata_export.py: Data export in multiple formatsfiltering_alerts.py: Advanced filtering and alertingmultiple_channels.py: Subscribe to multiple data channels
๐งช Testing
Run the test suite:
# Install test dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=gmgnapi
# Run specific test file
pytest tests/test_client.py
๐ ๏ธ Development
Code Quality
# Format code
black src/ tests/ examples/
# Sort imports
isort src/ tests/ examples/
# Type checking
mypy src/
# Linting
flake8 src/ tests/
Building Documentation
# Install docs dependencies
pip install -e ".[docs]"
# Build docs
cd docs/
make html
๐ค Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Ensure all tests pass (
pytest) - Format your code (
black,isort) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- GMGN.ai for providing the WebSocket API
- Pydantic for data validation
- websockets for WebSocket client implementation
๐ Links
- Documentation: https://gmgnapi.readthedocs.io/
- PyPI Package: https://pypi.org/project/gmgnapi/
- GitHub Issues: https://github.com/yourusername/gmgnapi/issues
- GMGN.ai: https://gmgn.ai/
โก Built for speed, designed for reliability, crafted for the Solana ecosystem.
Project details
Release history Release notifications | RSS feed
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 gmgnapi-0.1.0.tar.gz.
File metadata
- Download URL: gmgnapi-0.1.0.tar.gz
- Upload date:
- Size: 26.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84091c5e0e1efeaf04c58a1c58d5db8ef9c1ee82ee43cba9bcf4f821c3c5ef6d
|
|
| MD5 |
756ec491ffe074a21787bd37344ca3ca
|
|
| BLAKE2b-256 |
dbc30be10c89332e561e15c1ce85acd8cab070977b4fbfc54da1720a3113c9c0
|
File details
Details for the file gmgnapi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gmgnapi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d43bd9a8849cafad4f8cb80d34df3a9169f024f187e65d48338a03611359e17
|
|
| MD5 |
cbb39b1492f18a31e56d0cb1e67236bb
|
|
| BLAKE2b-256 |
aefe4659ff8da490519be50069d43c41323da062fc7cd05deefa6fc233ac0f2f
|