#!/usr/bin/env python3
"""aria-ig-saves-import.py — Instagram Saved-Posts Importer (KAR-275, ToS-safe).

KEIN Scraper. Liest Instagrams offiziellen GDPR-Datenexport (saved_posts.json)
und gibt die gespeicherten Post-URLs aus → zum Einspeisen in die Reels/AKP-Pipeline.

So bekommt Kais die Datei (ToS-sicher, kein Account-Risiko):
  Instagram → Settings → Accounts Center → Your information and permissions
  → Download your information → Saved posts → JSON

Usage:
  aria-ig-saves-import.py saved_posts.json            # URLs ausgeben
  aria-ig-saves-import.py saved_posts.json --jsonl    # als JSONL (url + saved_ts)
"""
import sys, json, argparse, datetime

def extract(path):
    data = json.load(open(path, encoding="utf-8"))
    # IG-Export-Schema: {"saved_saved_media":[{"title":..,"string_map_data":{"Saved on":{"href":URL,"timestamp":TS}}}]}
    items = data.get("saved_saved_media") or data.get("saved_media") or []
    out = []
    for it in items:
        smap = it.get("string_map_data", {})
        saved = smap.get("Saved on") or next(iter(smap.values()), {})
        url = saved.get("href", "")
        ts = saved.get("timestamp")
        if url:
            out.append({"url": url, "saved_ts": ts, "title": it.get("title", "")})
    return out

def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("json", help="saved_posts.json aus IG-GDPR-Export")
    ap.add_argument("--jsonl", action="store_true")
    a = ap.parse_args()
    items = extract(a.json)
    if a.jsonl:
        for it in items:
            print(json.dumps(it, ensure_ascii=False))
    else:
        for it in items:
            print(it["url"])
    print(f"# {len(items)} saved posts", file=sys.stderr)

if __name__ == "__main__":
    main()
