import requests import json import time import pandas as pd from datetime import datetime import schedule import logging class SorareTradeBot: def __init__(self): self.api_url = "https://api.sorare.com/graphql" self.headers = { 'Content-Type': 'application/json', 'User-Agent': 'SorareBot/1.0' } self.config = self.load_config() self.setup_logging() def load_config(self): """Konfigürasyon dosyasını yükle""" try: with open('config.json', 'r') as f: return json.load(f) except: return { "max_price": 0.1, "min_price": 0.01, "target_profit": 0.2, "scan_interval": 300, "auto_trade": False, "wallet_address": "" } def setup_logging(self): """Log sistemini ayarla""" logging.basicConfig( filename='sorare_bot.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) def get_market_data(self): """Piyasa verilerini al""" query = """ query { cards(first: 50, after: "", rarities: [rare, super_rare, unique]) { nodes { id name rarity player { name position team { name } } openAuctions { nodes { id currentPrice endDate } } } } } """ try: response = requests.post( self.api_url, json={'query': query}, headers=self.headers ) return response.json() except Exception as e: logging.error(f"Market data hatası: {e}") return None def analyze_opportunities(self, market_data): """Arbitraj fırsatlarını analiz et""" opportunities = [] if not market_data or 'data' not in market_data: return opportunities cards = market_data['data']['cards']['nodes'] for card in cards: if card['openAuctions']['nodes']: auction = card['openAuctions']['nodes'][0] current_price = float(auction['currentPrice']) # Fiyat analizi if (current_price >= self.config['min_price'] and current_price <= self.config['max_price']): estimated_value = self.calculate_card_value(card) profit_potential = (estimated_value - current_price) / current_price if profit_potential >= self.config['target_profit']: opportunities.append({ 'card_id': card['id'], 'player': card['player']['name'], 'current_price': current_price, 'estimated_value': estimated_value, 'profit_potential': profit_potential, 'auction_id': auction['id'], 'end_date': auction['endDate'] }) return sorted(opportunities, key=lambda x: x['profit_potential'], reverse