#!/usr/bin/env python3
"""Discover TradeTracker feeds via SOAP with proper affiliate site handling."""
import requests
import re
SOAP_URL = 'https://ws.tradetracker.com/soap/affiliate'
HEADERS = {'Content-Type': 'text/xml; charset=utf-8'}
# Auth
soap_auth = '''
35058
bf0b9eef0da6caf55fe614518375280fe5c4ecca
false
nl_NL
false
'''
r = requests.post(SOAP_URL, data=soap_auth, headers={**HEADERS, 'SOAPAction': 'authenticate'}, timeout=15)
cookies = r.cookies
print(f'Auth: {r.status_code}')
# Get affiliate site IDs - the WSDL shows getAffiliateSitesByFilter might work
# Let's try getAffiliateSites with affiliateSiteFilter
soap_sites = '''
'''
r2 = requests.post(SOAP_URL, data=soap_sites, headers={**HEADERS, 'SOAPAction': 'getAffiliateSites'}, cookies=cookies, timeout=30)
print(f'\ngetAffiliateSites (with filter): {r2.status_code}')
print(f'Response: {r2.text[:2000]}')
# Extract site IDs
sites = re.findall(r'- ]*>(.*?)
', r2.text, re.DOTALL)
print(f'Found {len(sites)} sites')
for s in sites:
sid = re.search(r']*>(.*?)', s)
sname = re.search(r']*>(.*?)', s)
if sid:
print(f' Site: [{sid.group(1)}] {sname.group(1) if sname else "?"}')
# If we found a site, try getCampaigns with it
if sites:
site_id = re.search(r']*>(.*?)', sites[0]).group(1)
print(f'\nUsing site ID: {site_id}')
soap_campaigns = f'''
{site_id}
'''
r3 = requests.post(SOAP_URL, data=soap_campaigns, headers={**HEADERS, 'SOAPAction': 'getCampaigns'}, cookies=cookies, timeout=30)
print(f'getCampaigns: {r3.status_code}')
campaigns = re.findall(r'- ]*>(.*?)
', r3.text, re.DOTALL)
print(f'Found {len(campaigns)} campaigns')
for c in campaigns[:50]:
cid = re.search(r']*>(.*?)', c)
name = re.search(r']*>(.*?)', c)
if cid and name:
cname = name.group(1)
keywords = ['sneaker', 'schoen', 'shoe', 'sport', 'nike', 'adidas', 'puma', 'asics', 'foot', 'keep', 'mooie']
is_relevant = any(kw in cname.lower() for kw in keywords)
marker = ' ***' if is_relevant else ''
print(f' [{cid.group(1)}] {cname}{marker}')
# Try getProductFeeds with site ID
soap_pf = f'''
{site_id}
'''
r4 = requests.post(SOAP_URL, data=soap_pf, headers={**HEADERS, 'SOAPAction': 'getProductFeeds'}, cookies=cookies, timeout=30)
print(f'\ngetProductFeeds: {r4.status_code}')
feeds = re.findall(r'- ]*>(.*?)
', r4.text, re.DOTALL)
print(f'Found {len(feeds)} feeds')
for f in feeds:
fid = re.search(r']*>(.*?)', f)
name = re.search(r']*>(.*?)', f)
pcount = re.search(r']*>(.*?)', f)
camp_name = re.search(r']*>(.*?)', f)
url_match = re.search(r']*>(.*?)', f)
if fid and name:
n = name.group(1)
cn = camp_name.group(1) if camp_name else '?'
pc = pcount.group(1) if pcount else '?'
url_str = url_match.group(1) if url_match else ''
keywords = ['sneaker', 'schoen', 'shoe', 'sport', 'nike', 'adidas', 'puma', 'asics', 'foot', 'keep', 'mooie']
is_relevant = any(kw in n.lower() or kw in cn.lower() for kw in keywords)
marker = ' ***' if is_relevant else ''
print(f' [{fid.group(1)}] {n} ({cn}) [{pc} products]{marker}')
if url_match:
print(f' URL: {url_str[:200]}')