#!/usr/bin/env python3
import subprocess, json, os, re
from datetime import datetime, timezone, timedelta

BASE = os.path.expanduser("~/Claude/Projects/에이전트구축")
X_FEED = os.path.join(BASE, "x_feed.jsonl")
AS_FILE = os.path.join(BASE, "x_scrape_accounts.applescript")

ACCOUNTS = ["blazingbees","pequityresearch","AIexander204","MelvinInvests",
"MMatters22596","ThematicTrader","HiCagr","TomSzczypka","michaelsikand",
"Aktiehedonist","StormDirac","saso_capital","RosannaInvests","gulVasikova",
"UncleAlpha007","KeYanghzod","JonkooTrades","ren_stocks","NURadu_",
"babybluecream","GAZUA_KOR","mtaaafm","firesidealpha"]

cutoff = datetime.now(timezone.utc) - timedelta(days=7)

# 기존 URL 로드
existing = set()
if os.path.exists(X_FEED):
    with open(X_FEED) as f:
        for line in f:
            try: existing.add(json.loads(line).get("url"))
            except: pass

total_added = 0
for idx, acct in enumerate(ACCOUNTS):
    try:
        r = subprocess.run(['osascript', AS_FILE, acct],
                          capture_output=True, text=True, timeout=60)
        raw = r.stdout.strip()
        if not raw or raw == "missing value":
            print(f"[{idx+1}/{len(ACCOUNTS)}] @{acct}: 없음")
            continue
        added = 0
        with open(X_FEED, 'a') as f:
            for item in raw.split('###'):
                parts = item.split('@@@')
                if len(parts) != 3: continue
                pub, text, url = parts[0].strip(), parts[1].strip(), parts[2].strip()
                if not url or url in existing: continue
                # 날짜 필터: 지난 7일
                try:
                    pubdt = datetime.fromisoformat(pub.replace('Z','+00:00'))
                    if pubdt < cutoff: continue
                except: pass
                m = re.search(r'x\.com/([^/]+)/', url)
                author = '@'+m.group(1) if m else '@'+acct
                f.write(json.dumps({"url":url,"pub":pub,"text":text,
                    "author":author,"ts":datetime.now(timezone.utc).isoformat()},
                    ensure_ascii=False)+"\n")
                existing.add(url); added += 1
        total_added += added
        print(f"[{idx+1}/{len(ACCOUNTS)}] @{acct}: {added}개")
    except Exception as e:
        print(f"[{idx+1}/{len(ACCOUNTS)}] @{acct}: 에러 {e}")

print(f"\n총 {total_added}개 신규 수집")
