rsshub
Version:
Make RSS Great Again!
64 lines (56 loc) • 1.86 kB
text/typescript
import { Route } from '@/types';
import ofetch from '@/utils/ofetch';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
export const route: Route = {
path: '/app/:appId/:appSlug?',
categories: ['program-update'],
example: '/macupdate/app/11942',
parameters: { appId: 'Application unique ID, can be found in URL', appSlug: 'Application slug, can be found in URL' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['macupdate.com/app/mac/:appId/:appSlug'],
},
],
name: 'Update',
maintainers: ['TonyRL'],
handler,
};
async function handler(ctx) {
const { appId, appSlug } = ctx.req.param();
const baseUrl = 'https://www.macupdate.com';
const link = `${baseUrl}/app/mac/${appId}${appSlug ? `/${appSlug}` : ''}`;
const response = await ofetch(link);
const $ = load(response);
const nextData = JSON.parse($('#__NEXT_DATA__').text());
const {
asPath,
appData: { data: appData },
} = nextData.props.pageProps;
const item = {
title: `${appData.title} ${appData.version}`,
description: appData.release_notes,
pubDate: parseDate(appData.date.timestamp, 'X'),
link: `${baseUrl}${asPath}`,
guid: `macupdate/app/${appId}/${appData.version}`,
category: [appData.category.name, appData.subcategory?.name],
author: appData.developer.name,
};
return {
title: appData.title,
description: appData.description,
link: `${baseUrl}${asPath}`,
logo: appData.logo.source,
icon: appData.logo.source,
item: [item],
language: 'en',
};
}