{"adoption": {"forks": 760, "observed_at": "2026-08-28T04:07:27.143997+00:00", "stars": 2871}, "canonical_url": "https://ross.abutalabs.com/products/owllook", "card": {"archived": false, "artifact_type": "application", "description": "owllook-小说搜索引擎", "domain": ["web-development", "crawlers", "entertainment"], "enriched": true, "function": ["search-engine", "web-scraping", "web-framework", "caching", "parser"], "health_score": 20, "homepage": "https://www.owllook.net", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["howie6879/owllook"], "name": "howie6879/owllook", "platform": ["python", "self-hosted"], "pushed_at": "2024-07-26T10:37:53+00:00", "repo": "howie6879/owllook", "stars": 2871, "tags": ["novel-search", "chinese-novels", "sanic", "asyncio", "vertical-search-engine", "book-reading", "search", "docker", "web-server"], "topics": ["spider", "python", "crawler", "python3", "ruia", "novel", "book", "asyncio", "asyncio-spider", "sanic", "qidian", "biquge", "owllook", "novels"], "urls": [], "use_cases": ["search for web novels across multiple sources", "self-host a novel reading site with unified parsing", "track updates for novels I'm following", "read Chinese web novels with a clean reader interface", "crawl and parse novel sites with a lightweight async spider", "save bookmarks and reading history for novels"], "what_it_is": "owllook is a self-hosted vertical search engine for Chinese web novels, built on Python with Sanic, MongoDB, and Redis. It aggregates results from other search engines, parses 200+ novel sites into a unified reading interface, and adds features like bookmarks, bookshelf, and update tracking.", "when_to_avoid": ["you need a general-purpose web search engine", "you want an actively maintained project with guaranteed site compatibility", "you need English-language novel sources", "you plan commercial use - the project is explicitly for learning and sharing only"], "when_to_choose": ["you want a self-hosted Chinese novel search and reading experience", "you need an example of an async Python search aggregator using Sanic and ruia", "you want unified parsing of many novel websites instead of jumping between them"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/owllook", "repo": "howie6879/owllook", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "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:07:27.143997+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:27.143997+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:35:52.048803+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2cc5092c3c1f781113a93f35c7da0e942d28078d7dc039fa957828e920b7f6e7", "fetched_at": "2026-08-28T04:07:27.143997+00:00", "kind": "readme", "missing": false, "url": "https://github.com/howie6879/owllook"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3483, "days_push": 768, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}