{"adoption": {"forks": 244, "observed_at": "2026-08-28T04:04:01.703059+00:00", "stars": 1219}, "canonical_url": "https://ross.abutalabs.com/products/cnbattle-douyin", "card": {"archived": false, "artifact_type": "cli-tool", "description": "抖音推荐/搜索页视频列表视频爬虫方案,基于app(虚拟机或真机) 相关技术 golang adb", "domain": ["crawlers", "social-media"], "enriched": true, "function": ["web-scraping", "http-client", "database"], "health_score": 71, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["cnbattle/douyin"], "name": "cnbattle/douyin", "platform": ["go", "cli"], "pushed_at": "2026-05-27T09:58:16+00:00", "repo": "cnbattle/douyin", "stars": 1219, "tags": ["douyin", "tiktok", "adb", "mitm-proxy", "video-scraping", "android-emulator", "sqlite", "automation", "android"], "topics": ["golang", "go", "douyin"], "urls": [], "use_cases": ["scrape douyin recommended video feeds", "collect douyin search results video metadata", "download douyin videos covers and avatars locally", "crawl short video app data via adb and mitm proxy", "filter scraped videos by minimum like count", "store scraped video data in sqlite"], "what_it_is": "A Go-based crawler that scrapes Douyin (TikTok China) recommendation and search page video lists by controlling the mobile app on a real device or emulator via ADB, combined with a MITM proxy to capture traffic. It can filter videos by like count and optionally download avatars, covers, and video files into a local SQLite-backed store.", "when_to_avoid": ["you need a fully supported production scraper with no manual app restarts", "you cannot run an android emulator or real device", "you need commercial use, which the license and disclaimer prohibit"], "when_to_choose": ["you need app-level douyin data that web scraping cannot provide", "you have an android device or emulator and can install a mitm certificate", "you want a Go tool with configurable like-count filters and local file downloads"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cnbattle-douyin", "repo": "cnbattle/douyin", "role": "main", "score": 61}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "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:04:01.703059+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:01.703059+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:16:12.906387+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4a849b0657317506f22533e4065eee8afcfe03ca109cf4aafc1d5e83a7da5fd6", "fetched_at": "2026-08-28T04:04:01.703059+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cnbattle/douyin"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 84, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2562, "days_push": 98, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 61, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}