下载地址:www.pan38.com/dow/share.p… 提取密码:2912
这个抢单系统包含多个模块:主抢单逻辑、配置管理、工具函数和性能监控。主模块使用多线程并发处理订单,包含订单获取和处理两个主要流程。请注意这只是一个技术演示,实际使用时需要根据具体API进行调整。
import time import random import threading from queue import Queue import requests from fake_useragent import UserAgent
class OrderGrabber: def init(self, api_url, max_workers=5): self.api_url = api_url self.max_workers = max_workers self.order_queue = Queue() self.ua = UserAgent() self.session = requests.Session() self.running = False
def fetch_orders(self):
while self.running:
try:
headers = {'User-Agent': self.ua.random}
response = self.session.get(
f"{self.api_url}/orders",
headers=headers,
timeout=5
)
if response.status_code == 200:
orders = response.json().get('data', [])
for order in orders:
self.order_queue.put(order)
time.sleep(0.5)
except Exception as e:
print(f"获取订单失败: {e}")
time.sleep(1)
def process_order(self):
while self.running:
if not self.order_queue.empty():
order = self.order_queue.get()
try:
headers = {
'User-Agent': self.ua.random,
'Content-Type': 'application/json'
}
data = {'order_id': order['id']}
response = self.session.post(
f"{self.api_url}/grab",
json=data,
headers=headers,
timeout=3
)
if response.status_code == 200:
print(f"成功抢到订单: {order['id']}")
else:
print(f"抢单失败: {response.text}")
except Exception as e:
print(f"处理订单出错: {e}")
self.order_queue.put(order)
else:
time.sleep(0.1)
def start(self):
self.running = True
fetch_thread = threading.Thread(target=self.fetch_orders)
fetch_thread.daemon = True
fetch_thread.start()
worker_threads = []
for _ in range(self.max_workers):
t = threading.Thread(target=self.process_order)
t.daemon = True
t.start()
worker_threads.append(t)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
self.running = False
print("正在停止抢单系统...")
API配置
API_CONFIG = { 'base_url': 'api.example.com/v1', 'auth_token': 'your_auth_token_here', 'timeout': 10, 'retry_times': 3 }
抢单策略配置
STRATEGY_CONFIG = { 'min_price': 50.0, 'max_distance': 10.0, 'preferred_categories': ['food', 'express'], 'blacklist_users': ['user123', 'user456'] }
性能配置
PERFORMANCE_CONFIG = { 'max_threads': 8, 'request_interval': 0.3, 'heartbeat_interval': 60 }
import hashlib import json from datetime import datetime
def generate_signature(params, secret_key): """生成API签名""" sorted_params = sorted(params.items()) param_str = '&'.join([f"{k}={v}" for k, v in sorted_params]) sign_str = param_str + secret_key return hashlib.md5(sign_str.encode()).hexdigest()
def filter_order(order, strategy): """根据策略过滤订单""" if order['price'] < strategy['min_price']: return False if order['distance'] > strategy['max_distance']: return False if order['category'] not in strategy['preferred_categories']: return False if order['user_id'] in strategy['blacklist_users']: return False return True
def log_order(order, status): """记录订单日志""" log_entry = { 'timestamp': datetime.now().isoformat(), 'order_id': order['id'], 'price': order['price'], 'distance': order['distance'], 'status': status } with open('order_logs.json', 'a') as f: f.write(json.dumps(log_entry) + '\n')