{"record":{"id":"4c70a9f28d1f441b","repo":"DIYgod/RSSHub","slug":"ghost-cms-theinitiu","errorCode":null,"errorMessage":"此路由已停用。端传媒迁移到 Ghost CMS 后不再支持个人追踪功能。请改用 /theinitium/channel/latest 或 /theinitium/tags/:tag 订阅。","messagePattern":"此路由已停用。端传媒迁移到 Ghost CMS 后不再支持个人追踪功能。请改用 /theinitium/channel/latest 或 /theinitium/tags/:tag 订阅。","errorType":"exception","errorClass":"Error","httpStatus":503,"severity":"warning","filePath":"lib/routes/theinitium/follow.ts","lineNumber":12,"sourceCode":"import type { Route } from '@/types';\n\nexport const route: Route = {\n    path: '/follow/articles/:language?',\n    name: '个人订阅追踪动态（已停用）',\n    maintainers: ['AgFlore', 'pseudoyu'],\n    parameters: {\n        language: '语言',\n    },\n    radar: [],\n    handler: () => {\n        throw new Error('此路由已停用。端传媒迁移到 Ghost CMS 后不再支持个人追踪功能。请改用 /theinitium/channel/latest 或 /theinitium/tags/:tag 订阅。');\n    },\n    example: '/theinitium/follow/articles',\n    categories: ['new-media'],\n    description: `::: warning\n此路由已停用。端传媒已迁移到 Ghost CMS，不再支持通过 API 获取个人追踪内容。请改用标签或栏目订阅。\n:::`,\n};\n","sourceCodeStart":1,"sourceCodeEnd":20,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/theinitium/follow.ts#L1-L20","documentation":"The /theinitium/follow/articles route is permanently disabled: its handler unconditionally throws on every call. Initium migrated to Ghost CMS and the personal-follow feature no longer exists in the new backend, so the route cannot return data and directs users to channel/tags subscriptions instead.","triggerScenarios":"Any HTTP request to /theinitium/follow/articles (with or without a :language segment) hits the handler and throws immediately. There is no input that avoids it.","commonSituations":"A pre-existing RSS subscription to the old follow feed keeps polling after the migration; documentation/feeds were not updated to the new routes.","solutions":["Switch the subscription to /theinitium/channel/latest or /theinitium/tags/:tag as the error message suggests.","Remove the deprecated follow feed from any aggregator so it stops hitting the dead endpoint.","If maintaining the instance, consider deleting the route file once all consumers have migrated, to avoid confusion."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// The route is always-on disabled; the only valid action is not to call it.\n// Prefer the replacement endpoints directly.\nconst REPLACEMENTS = ['/theinitium/channel/latest', '/theinitium/tags/:tag'];\nfunction isFollowRoute(path: string): boolean {\n    return path.startsWith('/theinitium/follow');\n}\n// redirect/rewrite isFollowRoute(url) to REPLACEMENTS","typeGuard":null,"tryCatchPattern":"try {\n    await fetchFeed('/theinitium/follow/articles');\n} catch (e) {\n    if (e instanceof Error && /此路由已停用|deprecated/i.test(e.message)) {\n        // permanently switch the subscription to /theinitium/channel/latest\n        return await fetchFeed('/theinitium/channel/latest');\n    }\n    throw e;\n}","preventionTips":["Migrate subscriptions off the follow route to /theinitium/channel/latest or /theinitium/tags/:tag.","Remove the deprecated feed from aggregators so they stop polling it.","Consider deleting the route file once no consumer references it."],"tags":["deprecated","theinitium","config"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}