rsshub
Version:
Make RSS Great Again!
76 lines (72 loc) • 2.69 kB
text/typescript
import { Route } from '@/types';
import ofetch from '@/utils/ofetch';
import { parseDate } from '@/utils/parse-date';
import { URLSearchParams } from 'node:url';
export const route: Route = {
path: '/nioradio/:albumid',
categories: ['multimedia'],
description: `
::: tip
**如何获取电台 ID?**
打开蔚来 APP 后,点击“此地”→“NIO Radio”,找到自己想要转换为播客的专辑,分享后在生成的链接中找到\`container_id=\`后方的数字即可。
常见电台 ID:
| 电台名称 | 电台 ID |
| :------------ | :---- |
| 资讯充电站(早间版) | 5 |
| 资讯充电站(晚间版) | 23 |
| E 次元财经报 | 148 |
| 塞萌不塞车 | 661 |
| 乐行记 | 11 |
| Weekend Dance | 547 |
:::`,
example: '/nio/nioradio/5',
parameters: { albumid: '电台专辑 ID' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: true,
supportScihub: false,
},
name: 'NIO Radio',
maintainers: ['marcosteam'],
handler: async (ctx) => {
const { albumid } = ctx.req.param();
const req = new URLSearchParams({
albumId: albumid,
sorttype: '2',
pagenum: '1',
pagesize: '10',
}).toString();
const data = await ofetch('https://gateway-front-external.nio.com/moat/100914/v2/audio/list', {
method: 'POST',
body: req,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
const podcasts = data.result.dataList;
const podcastName = podcasts[0].albumName;
const podcastImage = podcasts[0].albumPic;
const items = podcasts.map((podcast) => ({
title: podcast.audioName,
link: `https://app.nio.com/app/radio/share/?item_type=1&item_id=${String(podcast.audioId).slice(1)}&container_id=${albumid}`,
pubDate: parseDate(podcast.onlineTime),
description: podcast.albumDesc,
author: podcast.host.join(', '),
itunes_item_image: podcast.albumPic,
itunes_duration: podcast.duration / 1000,
enclosure_url: podcast.aacPlayUrl192,
enclosure_length: podcast.aacFileSize192,
enclosure_type: 'audio/x-m4a',
}));
return {
title: `NIO Radio - ${podcastName}`,
link: 'https://www.nio.com',
itunes_author: podcasts[0].host.join(', '),
image: podcastImage,
item: items,
};
},
};