DIYgod/RSSHub · warning · Error

此路由已停用。端传媒迁移到 Ghost CMS 后不再支持个人追踪功能。请改用 /theinitium/channel/

Error message

此路由已停用。端传媒迁移到 Ghost CMS 后不再支持个人追踪功能。请改用 /theinitium/channel/latest 或 /theinitium/tags/:tag 订阅。

What it means

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.

Source

Thrown at lib/routes/theinitium/follow.ts:12

import type { Route } from '@/types';

export const route: Route = {
    path: '/follow/articles/:language?',
    name: '个人订阅追踪动态(已停用)',
    maintainers: ['AgFlore', 'pseudoyu'],
    parameters: {
        language: '语言',
    },
    radar: [],
    handler: () => {
        throw new Error('此路由已停用。端传媒迁移到 Ghost CMS 后不再支持个人追踪功能。请改用 /theinitium/channel/latest 或 /theinitium/tags/:tag 订阅。');
    },
    example: '/theinitium/follow/articles',
    categories: ['new-media'],
    description: `::: warning
此路由已停用。端传媒已迁移到 Ghost CMS,不再支持通过 API 获取个人追踪内容。请改用标签或栏目订阅。
:::`,
};

View on GitHub (pinned to bed535e087)

Solutions

  1. Switch the subscription to /theinitium/channel/latest or /theinitium/tags/:tag as the error message suggests.
  2. Remove the deprecated follow feed from any aggregator so it stops hitting the dead endpoint.
  3. If maintaining the instance, consider deleting the route file once all consumers have migrated, to avoid confusion.
Defensive patterns

Strategy: validation

Validate before calling

// The route is always-on disabled; the only valid action is not to call it.
// Prefer the replacement endpoints directly.
const REPLACEMENTS = ['/theinitium/channel/latest', '/theinitium/tags/:tag'];
function isFollowRoute(path: string): boolean {
    return path.startsWith('/theinitium/follow');
}
// redirect/rewrite isFollowRoute(url) to REPLACEMENTS

Try / catch

try {
    await fetchFeed('/theinitium/follow/articles');
} catch (e) {
    if (e instanceof Error && /此路由已停用|deprecated/i.test(e.message)) {
        // permanently switch the subscription to /theinitium/channel/latest
        return await fetchFeed('/theinitium/channel/latest');
    }
    throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: A pre-existing RSS subscription to the old follow feed keeps polling after the migration; documentation/feeds were not updated to the new routes.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/4c70a9f28d1f441b. Report an issue: GitHub.