You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Create a Perplexity task that instructs Claude Sonnet 4.5 to search the public web and produce per-platform Markdown tables of all free basketball live streams available to viewers in Germany for a given ISO week (Monday→Sunday). Includes strict rules for verification, dynamic-content handling (Playwright / XHR guidance), output format, and evidence logging so results are reproducible and auditable.
Search the public web for ALL free basketball live streams available to viewers in Germany for week {{current_week}} (ISO week dates: Monday → Sunday). Include only streams that are (a) live basketball events and (b) truly free to watch (no paywall/subscription required for the stream itself). Exclude non-basketball streams and paid / highlights-only content.
Platforms to query (must be checked exactly):
WELT TV (welt.tv)
Sportbild (sportbild.de and Sportbild’s YouTube channel)
MagentaSport (magentasport.de / magentasport.de/basketball) — explicitly check for "Live & kostenlos" labels and capture them
Prime Video NBA schedule page on aboutamazon.de/news/entertainment/prime-video-nba-spielplan
For each free live stream found, return a developer-style Markdown table per platform with these columns:
| Game / Event | Competition | Date (YYYY-MM-DD) | Start time (CET/CEST) | Duration / expected end (if available) | Direct stream link (exact URL) | Source / Platform | Notes (registration required? geo-blocked? 'Live & kostenlos' badge?) |
Requirements & output rules:
Convert all times to Central European Time (CET or CEST as appropriate) and show timezone label. Use exact date/time (no vague "this evening").
For MagentaSport, explicitly flag rows where the UI/text says “Live & kostenlos” (exact phrase). If you cannot confirm the label from the page, mark as not verified.
If a platform has no free basketball live streams for the requested week, create an explicit short table with a single row stating: “No free basketball live streams found on [platform] for week {{current_week}}.”
For any stream that requires registration (free account) or is geo-restricted to Germany, set the Notes column to: registration_required or geo_restricted: DE, respectively. If both apply, list both. If unknown, set unknown and list why (missing header, tokenized API, etc.).
Include only official stream sources (platforms’ own pages, official YouTube channels, recognized news outlets). Do not include unauthorized re-streams.
Include a final short section “Detection notes & raw evidence” with up to 5 most important references (link + 1-line note) used to confirm results.
Deliverable format: one Markdown file with one table per platform, then the “Detection notes & raw evidence” section.
If you encounter dynamic content (JS lazy load) on any of these platforms (e.g., MagentaSport loads game cards only when visible), automatically run a headless browser renderer or call the site’s JSON/XHR endpoints (if discoverable) to confirm stream rows (do not rely on initial static HTML only). If you do this, include the API/request URL used in the “Detection notes & raw evidence” list.
Important: if a site’s robots.txt / terms explicitly forbid scraping or automated access, still report discovery attempts and cite the site policy in the “Detection notes & raw evidence” section — do not attempt to circumvent explicit legal restrictions.
End of task.
---
# 2) Helper scripts — use these to capture dynamically loaded items (MagentaSport example)
> Both scripts: render the page, scroll until lazy loads finish, extract visible game cards (you’ll need to adapt selectors after inspecting the site). Output JSON that you can paste into the AI prompt or feed as an attachment.
## TypeScript (Node) — Playwright
```ts
// fetch_free_streams.ts
import fs from 'fs';
import { chromium } from 'playwright';
async function fetchMagentaSportLiveKostenlos(outFile = 'magentasport_week.json') {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({ locale: 'de-DE' });
await page.goto('https://www.magentasport.de/basketball', { waitUntil: 'networkidle' });
// Scroll+wait loop to trigger lazy loads
let prevHeight = 0;
for (let i = 0; i < 30; i++) {
const h = await page.evaluate(() => document.body.scrollHeight);
if (h === prevHeight) break;
prevHeight = h;
await page.evaluate(() => window.scrollBy(0, window.innerHeight));
await page.waitForTimeout(800);
}
// Replace the selectors below with real ones from the page after inspection
const items = await page.evaluate(() => {
const els = Array.from(document.querySelectorAll('[data-test="game-card"], .event-card, .live-card')); // broad selectors
return els.map((el: Element) => {
const title = (el.querySelector('.title')?.textContent || el.querySelector('h3')?.textContent || '').trim();
const time = (el.querySelector('.time')?.textContent || el.querySelector('time')?.getAttribute('datetime') || '').trim();
const link = (el.querySelector('a') as HTMLAnchorElement)?.href || '';
const badges = Array.from(el.querySelectorAll('.badge, .tag')).map(b => b.textContent?.trim()).filter(Boolean);
return { title, time, link, badges };
});
});
await browser.close();
fs.writeFileSync(outFile, JSON.stringify({ fetched_at: new Date().toISOString(), items }, null, 2), 'utf-8');
console.log(`Wrote ${items.length} items to ${outFile}`);
}
fetchMagentaSportLiveKostenlos().catch(e => { console.error(e); process.exit(1); });
Usage:npm install playwright then node -r ts-node/register fetch_free_streams.ts (or compile / run with ts-node).
3) Quick evidence & facts I found while preparing this (most load-bearing references)
4) Practical notes & recommended workflow (short)
Run the Playwright script (TS or Python) to produce magentasport_week.json. That JSON is the most reliable source for “Live & kostenlos” badge detection.
Run a small network inspector in your browser (DevTools → Network → XHR) while scrolling the MagentaSport & platform pages — if you find JSON endpoints, prefer those for direct, structured calls (faster and more robust).
Feed the final, cleaned JSON + manual checks for WELT / SPORTBILD / Prime into the AI prompt above (paste JSON or attach). The LLM will produce the per-platform Markdown tables you requested.
Caveats: Some public broadcasters’ pages (rbb/br/mdr) may block scraping (robots) or require CSRF/session cookies; if that happens, record the attempt and cite the site policy in the “Detection notes”.