{"adoption": {"forks": 758, "observed_at": "2026-08-28T04:09:09.753822+00:00", "stars": 5100}, "canonical_url": "https://ross.abutalabs.com/products/safaribooks", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Download and generate EPUB of your favorite books from O'Reilly Learning (aka Safari Books Online) library.", "domain": ["developer-tools", "files", "education"], "enriched": true, "function": ["web-scraping", "cli", "pdf"], "health_score": 45, "homepage": null, "language": "Python", "license": "WTFPL", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["lorenzodifuccia/safaribooks"], "name": "lorenzodifuccia/safaribooks", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2025-09-12T21:39:04+00:00", "repo": "lorenzodifuccia/safaribooks", "stars": 5100, "tags": ["epub", "oreilly", "safari-books-online", "calibre", "book-downloader", "kindle"], "topics": ["python", "epub", "calibre", "safaribooksonline", "safaribooks", "safari", "safari-books-online", "oreilly"], "urls": [], "use_cases": ["download oreilly books as epub", "convert safari books online library to epub", "save oreilly learning book for offline reading", "export safari books to calibre", "download book with kindle option", "backup my oreilly library"], "what_it_is": "A Python CLI tool that downloads books from O'Reilly Learning (Safari Books Online) and generates EPUB files from them. It requires a valid account login (or SSO cookies) and supports optional Kindle-friendly output.", "when_to_avoid": ["you need direct login support - the O'Reilly API changes broke credential login, so you must copy browser cookies manually", "you want an actively maintained tool - the project is no longer actively maintained", "you need a legal or ToS-compliant bulk downloading solution"], "when_to_choose": ["you have an O'Reilly/Safari Books subscription and want offline EPUB copies of books you can access", "you want a lightweight Python script with minimal dependencies", "you want to import O'Reilly books into Calibre or a Kindle"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/safaribooks", "repo": "lorenzodifuccia/safaribooks", "role": "main", "score": 51}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "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:09:09.753822+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.753822+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:02:12.988040+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f62523b066ca0eb6eca1523ead1dd93443ce62fbaa6cf7913fcdd79dffb4af4", "fetched_at": "2026-08-28T04:09:09.753822+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lorenzodifuccia/safaribooks"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 41, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3187, "days_push": 355, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 51, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}