mirror of
https://github.com/ourongxing/newsnow.git
synced 2025-01-19 03:09:14 +08:00
341 lines
7.0 KiB
TypeScript
341 lines
7.0 KiB
TypeScript
import { Interval } from "./consts"
|
|
import { typeSafeObjectFromEntries } from "./type.util"
|
|
import type { OriginSource, Source, SourceID } from "./types"
|
|
|
|
const Time = {
|
|
Test: 1,
|
|
Realtime: 2 * 60 * 1000,
|
|
Fast: 5 * 60 * 1000,
|
|
Default: Interval, // 10min
|
|
Common: 30 * 60 * 1000,
|
|
Slow: 60 * 60 * 1000,
|
|
}
|
|
|
|
export const originSources = {
|
|
"v2ex": {
|
|
name: "V2EX",
|
|
color: "slate",
|
|
home: "https://v2ex.com/",
|
|
sub: {
|
|
share: {
|
|
title: "最新分享",
|
|
column: "tech",
|
|
},
|
|
},
|
|
},
|
|
"zhihu": {
|
|
name: "知乎",
|
|
type: "hottest",
|
|
column: "china",
|
|
color: "blue",
|
|
home: "https://www.zhihu.com",
|
|
},
|
|
"weibo": {
|
|
name: "微博",
|
|
title: "实时热搜",
|
|
type: "hottest",
|
|
column: "china",
|
|
color: "red",
|
|
interval: Time.Realtime,
|
|
home: "https://weibo.com",
|
|
},
|
|
"zaobao": {
|
|
name: "联合早报",
|
|
interval: Time.Common,
|
|
type: "realtime",
|
|
column: "world",
|
|
color: "red",
|
|
home: "https://www.zaobao.com",
|
|
},
|
|
"coolapk": {
|
|
name: "酷安",
|
|
type: "hottest",
|
|
column: "tech",
|
|
color: "green",
|
|
title: "今日最热",
|
|
home: "https://coolapk.com",
|
|
},
|
|
"wallstreetcn": {
|
|
name: "华尔街见闻",
|
|
color: "blue",
|
|
column: "finance",
|
|
home: "https://wallstreetcn.com/",
|
|
sub: {
|
|
quick: {
|
|
type: "realtime",
|
|
interval: Time.Fast,
|
|
title: "实时快讯",
|
|
},
|
|
news: {
|
|
title: "最新资讯",
|
|
interval: Time.Common,
|
|
},
|
|
hot: {
|
|
title: "最热文章",
|
|
type: "hottest",
|
|
interval: Time.Common,
|
|
},
|
|
},
|
|
},
|
|
"36kr": {
|
|
name: "36氪",
|
|
type: "realtime",
|
|
color: "blue",
|
|
// cloudflare pages cannot access
|
|
disable: true,
|
|
home: "https://36kr.com",
|
|
sub: {
|
|
quick: {
|
|
title: "快讯",
|
|
},
|
|
},
|
|
},
|
|
"douyin": {
|
|
name: "抖音",
|
|
type: "hottest",
|
|
column: "china",
|
|
color: "gray",
|
|
home: "https://www.douyin.com",
|
|
},
|
|
"hupu": {
|
|
name: "虎扑",
|
|
disable: true,
|
|
home: "https://hupu.com",
|
|
},
|
|
"tieba": {
|
|
name: "百度贴吧",
|
|
title: "热议",
|
|
column: "china",
|
|
type: "hottest",
|
|
color: "blue",
|
|
home: "https://tieba.baidu.com",
|
|
},
|
|
"toutiao": {
|
|
name: "今日头条",
|
|
type: "hottest",
|
|
column: "china",
|
|
color: "red",
|
|
home: "https://www.toutiao.com",
|
|
},
|
|
"ithome": {
|
|
name: "IT之家",
|
|
color: "red",
|
|
column: "tech",
|
|
type: "realtime",
|
|
home: "https://www.ithome.com",
|
|
},
|
|
"thepaper": {
|
|
name: "澎湃新闻",
|
|
interval: Time.Common,
|
|
type: "hottest",
|
|
column: "china",
|
|
title: "热榜",
|
|
color: "gray",
|
|
home: "https://www.thepaper.cn",
|
|
},
|
|
"sputniknewscn": {
|
|
name: "卫星通讯社",
|
|
color: "orange",
|
|
// cloudflare pages cannot access
|
|
disable: true,
|
|
home: "https://sputniknews.cn",
|
|
},
|
|
"cankaoxiaoxi": {
|
|
name: "参考消息",
|
|
color: "red",
|
|
column: "world",
|
|
interval: Time.Common,
|
|
home: "https://china.cankaoxiaoxi.com",
|
|
},
|
|
"cls": {
|
|
name: "财联社",
|
|
color: "red",
|
|
column: "finance",
|
|
home: "https://www.cls.cn",
|
|
sub: {
|
|
telegraph: {
|
|
title: "电报",
|
|
interval: Time.Fast,
|
|
type: "realtime",
|
|
},
|
|
depth: {
|
|
title: "深度",
|
|
},
|
|
hot: {
|
|
title: "热门",
|
|
type: "hottest",
|
|
},
|
|
},
|
|
},
|
|
"xueqiu": {
|
|
name: "雪球",
|
|
color: "blue",
|
|
home: "https://xueqiu.com",
|
|
column: "finance",
|
|
sub: {
|
|
hotstock: {
|
|
title: "热门股票",
|
|
interval: Time.Realtime,
|
|
type: "hottest",
|
|
},
|
|
},
|
|
},
|
|
"gelonghui": {
|
|
name: "格隆汇",
|
|
color: "blue",
|
|
title: "事件",
|
|
column: "finance",
|
|
type: "realtime",
|
|
interval: Time.Realtime,
|
|
home: "https://www.gelonghui.com",
|
|
},
|
|
"fastbull": {
|
|
name: "法布财经",
|
|
color: "emerald",
|
|
home: "https://www.fastbull.cn",
|
|
column: "finance",
|
|
sub: {
|
|
express: {
|
|
title: "快讯",
|
|
type: "realtime",
|
|
interval: Time.Realtime,
|
|
},
|
|
news: {
|
|
title: "头条",
|
|
interval: Time.Common,
|
|
},
|
|
},
|
|
},
|
|
"solidot": {
|
|
name: "Solidot",
|
|
color: "teal",
|
|
column: "tech",
|
|
home: "https://solidot.org",
|
|
interval: Time.Slow,
|
|
},
|
|
"hackernews": {
|
|
name: "Hacker News",
|
|
color: "orange",
|
|
column: "tech",
|
|
type: "hottest",
|
|
home: "https://news.ycombinator.com/",
|
|
},
|
|
"producthunt": {
|
|
name: "Product Hunt",
|
|
color: "red",
|
|
column: "tech",
|
|
type: "hottest",
|
|
home: "https://www.producthunt.com/",
|
|
},
|
|
"github": {
|
|
name: "Github",
|
|
color: "gray",
|
|
home: "https://github.com/",
|
|
column: "tech",
|
|
sub: {
|
|
"trending-today": {
|
|
title: "Today",
|
|
type: "hottest",
|
|
},
|
|
},
|
|
},
|
|
"bilibili": {
|
|
name: "哔哩哔哩",
|
|
color: "blue",
|
|
home: "https://www.bilibili.com",
|
|
sub: {
|
|
"hot-search": {
|
|
title: "热搜",
|
|
column: "china",
|
|
type: "hottest",
|
|
},
|
|
},
|
|
},
|
|
"kuaishou": {
|
|
name: "快手",
|
|
type: "hottest",
|
|
column: "china",
|
|
color: "orange",
|
|
// cloudflare pages cannot access
|
|
disable: true,
|
|
home: "https://www.kuaishou.com",
|
|
},
|
|
"kaopu": {
|
|
name: "靠谱新闻",
|
|
column: "world",
|
|
color: "gray",
|
|
interval: Time.Common,
|
|
desc: "不一定靠谱,多看多思考",
|
|
home: "https://kaopu.news/",
|
|
},
|
|
"jin10": {
|
|
name: "金十数据",
|
|
column: "finance",
|
|
color: "blue",
|
|
type: "realtime",
|
|
home: "https://www.jin10.com",
|
|
},
|
|
"baidu": {
|
|
name: "百度热搜",
|
|
column: "china",
|
|
color: "blue",
|
|
type: "hottest",
|
|
home: "https://www.baidu.com",
|
|
},
|
|
"linuxdo": {
|
|
name: "LINUX DO",
|
|
column: "tech",
|
|
color: "slate",
|
|
home: "https://linux.do/",
|
|
sub: {
|
|
latest: {
|
|
title: "最新",
|
|
home: "https://linux.do/latest",
|
|
},
|
|
hot: {
|
|
title: "今日最热",
|
|
type: "hottest",
|
|
interval: Time.Common,
|
|
home: "https://linux.do/hot",
|
|
},
|
|
},
|
|
},
|
|
} as const satisfies Record<string, OriginSource>
|
|
|
|
export const sources = genSources()
|
|
function genSources() {
|
|
const _: [SourceID, Source][] = []
|
|
|
|
Object.entries(originSources).forEach(([id, source]: [any, OriginSource]) => {
|
|
const parent = {
|
|
name: source.name,
|
|
type: source.type,
|
|
disable: source.disable,
|
|
desc: source.desc,
|
|
column: source.column,
|
|
home: source.home,
|
|
color: source.color ?? "primary",
|
|
interval: source.interval ?? Time.Default,
|
|
}
|
|
if (source.sub && Object.keys(source.sub).length) {
|
|
Object.entries(source.sub).forEach(([subId, subSource], i) => {
|
|
if (i === 0) {
|
|
_.push([id, {
|
|
redirect: `${id}-${subId}`,
|
|
...parent,
|
|
...subSource,
|
|
}] as [any, Source])
|
|
}
|
|
_.push([`${id}-${subId}`, { ...parent, ...subSource }] as [any, Source])
|
|
})
|
|
} else {
|
|
_.push([id, {
|
|
title: source.title,
|
|
...parent,
|
|
}])
|
|
}
|
|
})
|
|
|
|
return typeSafeObjectFromEntries(_.filter(([_, v]) => !v.disable))
|
|
}
|