{"adoption": {"forks": 285, "observed_at": "2026-08-28T04:03:58.802758+00:00", "stars": 1206}, "canonical_url": "https://ross.abutalabs.com/products/xianyuapis", "card": {"archived": false, "artifact_type": "library", "description": "闲鱼算法逆向，闲鱼api，websockets自动运营，咸鱼AI Agent基座", "domain": ["e-commerce", "chatbots", "reverse-engineering", "apis"], "enriched": true, "function": ["websocket", "http-client", "reverse-engineering", "chatbot", "agent-framework", "sdk", "serialization"], "health_score": 97, "homepage": null, "language": "JavaScript", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["cv-cat/XianYuApis"], "name": "cv-cat/XianYuApis", "platform": ["python", "self-hosted"], "pushed_at": "2026-08-18T15:05:23+00:00", "repo": "cv-cat/XianYuApis", "stars": 1206, "tags": ["xianyu", "goofish", "second-hand-marketplace", "im-protocol", "sign-algorithm", "auto-reply", "ai-customer-service", "unofficial-api", "ai-agents", "automation", "nodejs", "docker"], "topics": [], "urls": [], "use_cases": ["build an AI customer service agent for Xianyu sellers", "automatically reply to Xianyu private messages with an LLM", "send and receive Xianyu chat messages programmatically", "fetch chat history and product details from Xianyu", "upload images and send them as Xianyu messages", "keep a persistent Xianyu login session alive for a bot", "reverse engineer the Xianyu WebSocket messaging protocol"], "what_it_is": "A reverse-engineered unofficial API library for Xianyu (Goofish, Alibaba's second-hand marketplace) that wraps its HTTP endpoints and WebSocket private-message protocol, including decrypted sign signatures, base64/Protobuf message handling, cookie login, and token refresh. It serves as the foundation for building AI customer-service agents that automatically receive and reply to buyer messages.", "when_to_avoid": ["you need an officially supported and ToS-compliant marketplace API", "you target platforms other than Xianyu/Goofish", "you require a maintained release with a license or long-term stability guarantees", "you cannot supply a logged-in browser cookie or run Node.js for the signing scripts"], "when_to_choose": ["you need to connect an LLM or rule engine to Xianyu's private messaging", "you want a ready-made, working implementation of the Xianyu sign algorithm and WebSocket protocol", "you are building an auto-reply or AI agent bot on top of Xianyu", "you need programmatic access to Xianyu chat history, product info, and media upload"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/xianyuapis", "repo": "cv-cat/XianYuApis", "role": "main", "score": 79}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "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:03:58.802758+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:58.802758+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:19:17.327189+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9a60d7895ad08f3dc72924abec97ca9d1cec43dcb0b60f0b79d4948b15d0b8d", "fetched_at": "2026-08-28T04:03:58.802758+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cv-cat/XianYuApis"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 38, "rhythm": 78}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 539, "days_push": 15, "days_rel": 148, "gap_med": 0, "n_releases_24m": 2}, "score": 79, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}