newsnow/server/sources/producthunt.ts

29 lines
845 B
TypeScript

import * as cheerio from "cheerio"
import type { NewsItem } from "@shared/types"
export default defineSource(async () => {
const baseURL = "https://www.producthunt.com/"
const html: any = await myFetch(baseURL)
const $ = cheerio.load(html)
const $main = $("[data-test=homepage-section-0] [data-test^=post-item]")
const news: NewsItem[] = []
$main.each((_, el) => {
const a = $(el).find("a").first()
const url = a.attr("href")
const title = $(el).find("a[data-test^=post-name]").text()
const id = $(el).attr("data-test")?.replace("post-item-", "")
const vote = $(el).find("[data-test=vote-button]").text()
if (url && id && title) {
news.push({
url: `${baseURL}${url}`,
title,
id,
extra: {
info: `△︎ ${vote}`,
},
})
}
})
return news
})