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