mirror of
https://github.com/ourongxing/newsnow.git
synced 2025-01-18 18:59:15 +08:00
feat(source): add linux.do
This commit is contained in:
parent
94068b899a
commit
3b843c39d3
BIN
public/icons/linuxdo.png
Normal file
BIN
public/icons/linuxdo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 890 B |
@ -3,7 +3,6 @@ import fs from "node:fs"
|
|||||||
import { fileURLToPath } from "node:url"
|
import { fileURLToPath } from "node:url"
|
||||||
import { join } from "node:path"
|
import { join } from "node:path"
|
||||||
import { Buffer } from "node:buffer"
|
import { Buffer } from "node:buffer"
|
||||||
import { getLogos } from "favicons-scraper"
|
|
||||||
import { consola } from "consola"
|
import { consola } from "consola"
|
||||||
import { originSources } from "../shared/sources"
|
import { originSources } from "../shared/sources"
|
||||||
|
|
||||||
@ -34,10 +33,7 @@ async function main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!source.home) return
|
if (!source.home) return
|
||||||
const res = await getLogos(source.home)
|
await downloadImage(`https://icons.duckduckgo.com/ip3/${source.home.replace(/^https?:\/\//, "").replace(/\/$/, "")}.ico`, icon, id)
|
||||||
if (res.length) {
|
|
||||||
await downloadImage(res[0].src, icon, id)
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
consola.error(id, "\n", e)
|
consola.error(id, "\n", e)
|
||||||
}
|
}
|
||||||
|
1
server/glob.d.ts
vendored
1
server/glob.d.ts
vendored
@ -16,6 +16,7 @@ declare module 'glob:./sources/{*.ts,**/index.ts}' {
|
|||||||
export const jin10: typeof import('./sources/jin10')
|
export const jin10: typeof import('./sources/jin10')
|
||||||
export const kaopu: typeof import('./sources/kaopu')
|
export const kaopu: typeof import('./sources/kaopu')
|
||||||
export const kuaishou: typeof import('./sources/kuaishou')
|
export const kuaishou: typeof import('./sources/kuaishou')
|
||||||
|
export const linuxdo: typeof import('./sources/linuxdo')
|
||||||
export const producthunt: typeof import('./sources/producthunt')
|
export const producthunt: typeof import('./sources/producthunt')
|
||||||
export const solidot: typeof import('./sources/solidot')
|
export const solidot: typeof import('./sources/solidot')
|
||||||
export const sputniknewscn: typeof import('./sources/sputniknewscn')
|
export const sputniknewscn: typeof import('./sources/sputniknewscn')
|
||||||
|
61
server/sources/linuxdo.ts
Normal file
61
server/sources/linuxdo.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
interface Res {
|
||||||
|
topic_list: {
|
||||||
|
can_create_topic: boolean
|
||||||
|
more_topics_url: string
|
||||||
|
per_page: number
|
||||||
|
top_tags: string[]
|
||||||
|
topics: {
|
||||||
|
id: number
|
||||||
|
title: string
|
||||||
|
fancy_title: string
|
||||||
|
posts_count: number
|
||||||
|
reply_count: number
|
||||||
|
highest_post_number: number
|
||||||
|
image_url: null | string
|
||||||
|
created_at: Date
|
||||||
|
last_posted_at: Date
|
||||||
|
bumped: boolean
|
||||||
|
bumped_at: Date
|
||||||
|
unseen: boolean
|
||||||
|
pinned: boolean
|
||||||
|
excerpt?: string
|
||||||
|
visible: boolean
|
||||||
|
closed: boolean
|
||||||
|
archived: boolean
|
||||||
|
like_count: number
|
||||||
|
has_summary: boolean
|
||||||
|
last_poster_username: string
|
||||||
|
category_id: number
|
||||||
|
pinned_globally: boolean
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const hot = defineSource(async () => {
|
||||||
|
const res = await myFetch<Res>("https://linux.do/top/daily.json")
|
||||||
|
return res.topic_list.topics
|
||||||
|
.filter(k => k.visible && !k.archived && !k.pinned)
|
||||||
|
.map(k => ({
|
||||||
|
id: k.id,
|
||||||
|
title: k.title,
|
||||||
|
url: `https://linux.do/t/topic/${k.id}`,
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
const latest = defineSource(async () => {
|
||||||
|
const res = await myFetch<Res>("https://linux.do/latest.json?order=created")
|
||||||
|
return res.topic_list.topics
|
||||||
|
.filter(k => k.visible && !k.archived && !k.pinned)
|
||||||
|
.map(k => ({
|
||||||
|
id: k.id,
|
||||||
|
title: k.title,
|
||||||
|
pubDate: new Date(k.created_at).valueOf(),
|
||||||
|
url: `https://linux.do/t/topic/${k.id}`,
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
export default defineSource({
|
||||||
|
"linuxdo": latest,
|
||||||
|
"linuxdo-latest": latest,
|
||||||
|
"linuxdo-hot": hot,
|
||||||
|
})
|
@ -27,5 +27,7 @@
|
|||||||
"bilibili-hot-search": "bilibili-resou",
|
"bilibili-hot-search": "bilibili-resou",
|
||||||
"kaopu": "kaopuxinwen",
|
"kaopu": "kaopuxinwen",
|
||||||
"jin10": "jinshishuju",
|
"jin10": "jinshishuju",
|
||||||
"baidu": "baiduresou"
|
"baidu": "baiduresou",
|
||||||
|
"linuxdo-latest": "Linux DO-zuixin",
|
||||||
|
"linuxdo-hot": "Linux DO-remen"
|
||||||
}
|
}
|
||||||
|
@ -282,6 +282,24 @@ export const originSources = {
|
|||||||
type: "hottest",
|
type: "hottest",
|
||||||
home: "https://www.baidu.com",
|
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>
|
} as const satisfies Record<string, OriginSource>
|
||||||
|
|
||||||
export const sources = genSources()
|
export const sources = genSources()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user