{"adoption": {"forks": 635, "observed_at": "2026-08-28T04:05:59.092216+00:00", "stars": 1956}, "canonical_url": "https://ross.abutalabs.com/products/ssili126-tv", "card": {"archived": false, "artifact_type": "application", "description": "自动收集的IPv4酒店电视直播源，自动测试播放速度，每日自动更新。 有CCTV央视卫视频道，及部分地方频道，播放流畅。也可在openwrt或群辉的docker运行。", "domain": ["media", "self-hosted", "networking"], "enriched": true, "function": ["web-scraping", "streaming", "workflow-automation", "developer-tools"], "health_score": 80, "homepage": null, "language": "Python", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["ssili126/tv"], "name": "ssili126/tv", "platform": ["windows", "python", "self-hosted"], "pushed_at": "2026-08-24T21:31:23+00:00", "repo": "ssili126/tv", "stars": 1956, "tags": ["iptv", "live-tv", "m3u-playlist", "hotel-sources", "multicast", "udpxy", "chinese-tv", "cctv", "speed-testing", "auto-update", "automation", "docker", "linux"], "topics": [], "urls": [], "use_cases": ["get free IPTV live stream sources for Chinese TV channels", "automatically collect and test hotel multicast TV sources", "generate a daily-updated playlist for TV box live streaming", "run IPTV source scraper in Docker on OpenWrt or Synology", "find working CCTV and provincial channel stream URLs", "speed-test IPTV streams before adding to player"], "what_it_is": "A Python tool that automatically collects IPv4 hotel IPTV live stream sources (including CCTV, satellite, and some local Chinese channels), tests playback speed, and generates an itvlist.txt playlist updated daily. It can run as a Windows executable, a Python script, or in Docker on OpenWrt or Synology devices.", "when_to_avoid": ["you need non-Chinese or international channel sources", "you require a maintained, licensed project with support guarantees (no license, sparse docs)", "you need reliable VOD or EPG features rather than raw live stream lists"], "when_to_choose": ["you want automatically refreshed Chinese IPTV playlists without manual collection", "you run a TV box or self-hosted setup and need tested, playable stream sources", "you want a Docker-based collector on OpenWrt or Synology"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ssili126-tv", "repo": "ssili126/tv", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:59.092216+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:06:14.600001+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "71f1c105376b49c344efc3891c5132f60556f0dbbee36d247f8fb19889f2dde8", "fetched_at": "2026-08-28T04:05:59.092216+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ssili126/tv"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 68, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 964, "days_push": 9, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}