Compare commits

..

No commits in common. "f12ab4e3a022efdac1a4950c75a285c90625d8dd" and "aa33c361c25db1b37c70a13c94a2f5c58f42a708" have entirely different histories.

2 changed files with 16 additions and 11 deletions

3
.gitignore vendored
View file

@ -1,3 +0,0 @@
venv/
__pycache__/
*.pyc

View file

@ -36,7 +36,8 @@ CONTENT_SELECTORS = [
def sanitize(name: str) -> str:
name = re.sub(r'[<>:"/\\|?*\r\n\t]', '', str(name)).strip().strip(".")
name = re.sub(r'[<>:"/\|?*
]', '', str(name)).strip().strip(".")
return name[:120]
@ -61,7 +62,9 @@ def html_to_md(raw: str) -> str:
def write_lesson(output_dir: Path, course_title: str, lesson_title: str, body: str) -> str:
stem = f"{sanitize(course_title)} -- {sanitize(lesson_title)}"
out = output_dir / f"{stem}.md"
out.write_text(f"# {lesson_title}\n\n{body}", encoding="utf-8")
out.write_text(f"# {lesson_title}
{body}", encoding="utf-8")
return stem
@ -81,7 +84,8 @@ async def run(community: str, output_dir: Path, discover: bool = False):
existing = existing_stems(output_dir)
print(f"Community: {community}")
print(f"Output: {output_dir}")
print(f"Lessons already saved: {len(existing)}\n")
print(f"Lessons already saved: {len(existing)}
")
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False, slow_mo=25)
@ -89,10 +93,12 @@ async def run(community: str, output_dir: Path, discover: bool = False):
page = await ctx.new_page()
print("Opening Skool — please log in when the browser window appears.")
print("The script will continue automatically once you land on the community.\n")
print("The script will continue automatically once you land on the community.
")
await page.goto("https://www.skool.com/login")
await page.wait_for_url(lambda url: f"/{community}" in url, timeout=300_000)
print("Logged in.\n")
await page.wait_for_url(f"**/{community}/**", timeout=300_000)
print("Logged in.
")
await page.goto(classroom)
await page.wait_for_load_state("load")
@ -101,7 +107,8 @@ async def run(community: str, output_dir: Path, discover: bool = False):
nd = next_data(await page.content())
all_crses = nd.get("props", {}).get("pageProps", {}).get("allCourses", [])
courses = [c for c in all_crses if c.get("metadata", {}).get("hasAccess", 0)]
print(f"Accessible courses: {len(courses)} of {len(all_crses)} total\n")
print(f"Accessible courses: {len(courses)} of {len(all_crses)} total
")
if not courses:
DIAG_DIR.mkdir(parents=True, exist_ok=True)
@ -151,7 +158,8 @@ async def run(community: str, output_dir: Path, discover: bool = False):
)
if not children:
print(" No lessons found — skipping\n")
print(" No lessons found — skipping
")
continue
print(f" {len(children)} lessons")