fix: weibo

This commit is contained in:
ourongxing
2025-11-20 09:59:51 +00:00
parent b60bb219ec
commit 7e88e142b2
+44 -142
View File
@@ -1,150 +1,52 @@
export interface Root {
ok: number
data: Data
}
export interface Data {
mapi: any[]
cards: Card[]
cardlistInfo: CardlistInfo
scheme: string
showAppTips: number
}
export interface Card {
card_group: CardGroup[]
card_type: number
show_type: number
itemid?: string
title?: string
}
export interface CardGroup {
actionlog?: Actionlog
card_type: number
pic?: string
itemid?: string
icon?: string
icon_width?: number
icon_height?: number
desc?: string
scheme: string
desc_extr: any
promotion?: Promotion
display_arrow?: number
show_type?: number
title?: string
is_show_arrow?: number
left_tag_img?: string
sub_title?: string
}
export interface Actionlog {
luicode: string
lfid: string
uicode: string
act_code: number
act_type: number
fid: string
ext: string
}
export interface Promotion {
monitor_url: MonitorUrl[]
}
export interface MonitorUrl {
third_party_click: string
third_party_show: string
type: string
monitor_name?: string
}
export interface CardlistInfo {
select_id: string
title_top: string
show_style: number
starttime: number
can_shared: number
v_p: string
containerid: string
page_type: string
nick: string
cardlist_head_cards: CardlistHeadCard[]
enable_load_imge_scrolling: number
page_title: string
search_request_id: string
load_more_threshold: number
pagesize: number
page_common_ext: string
cardlist_menus: any[]
total: number
headbg_animation: string
page_size: number
page: any
}
export interface CardlistHeadCard {
title_top?: string
show_menu: boolean
head_type_name: string
head_type: number
head_data?: HeadData
channel_list?: ChannelList[]
}
export interface HeadData {
cover_url: string
show_navi_mask: boolean
show_title: boolean
data_type: number
scheme: string
}
export interface ChannelList {
actionlog: Actionlog2
scheme: string
containerid: string
name: string
default_add: number
id: number
must_show: number
replaced_name?: string
}
export interface Actionlog2 {
luicode: string
lfid: string
uicode: string
act_code: number
act_type: number
fid: string
ext: string
}
import * as cheerio from "cheerio"
export default defineSource(async () => {
const url = "https://m.weibo.cn/api/container/getIndex?containerid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot&title=%E5%BE%AE%E5%8D%9A%E7%83%AD%E6%90%9C&extparam=filter_type%3Drealtimehot%26mi_cid%3D100103%26pos%3D0_0%26c_type%3D30%26display_time%3D1540538388&luicode=10000011&lfid=231583"
const res: Root = await myFetch(url, {
const baseurl = "https://s.weibo.com"
const url = `${baseurl}/top/summary?cate=realtimehot`
const html = await myFetch(url, {
headers: {
"referer": "https://s.weibo.com/top/summary?cate=realtimehot",
"mweibo-pwa": "1",
"x-requested-with": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
// https://github.com/v5tech/weibo-trending-hot-search
"Cookie": "SUB=_2AkMWIuNSf8NxqwJRmP8dy2rhaoV2ygrEieKgfhKJJRMxHRl-yT9jqk86tRB6PaLNvQZR6zYUcYVT1zSjoSreQHidcUq7",
"referer": url,
},
})
return res.data.cards[0].card_group
.filter((k, i) => i !== 0 && k.desc && !k.actionlog?.ext.includes("ads_word"))
.map((k) => {
return {
id: k.desc!,
title: k.desc!,
extra: {
icon: k.icon && {
url: proxyPicture(k.icon),
scale: 1.5,
const $ = cheerio.load(html)
const rows = $("#pl_top_realtimehot table tbody tr").slice(1)
const hotNews: NewsItem[] = []
rows.each((_, row) => {
const $row = $(row)
const $link = $row.find("td.td-02 a").filter((_, el) => {
const href = $(el).attr("href")
return !!(href && !href.includes("javascript:void(0);"))
}).first()
if ($link.length) {
const title = $link.text().trim()
const href = $link.attr("href")
if (title && href) {
const $flag = $row.find("td.td-03").text().trim()
const flagUrl = {
: "https://simg.s.weibo.com/moter/flags/1_0.png",
: "https://simg.s.weibo.com/moter/flags/2_0.png",
}[$flag]
hotNews.push({
id: title,
title,
url: `${baseurl}${href}`,
mobileUrl: `${baseurl}${href}`,
extra: {
icon: flagUrl ? { url: proxyPicture(flagUrl), scale: 1.5 } : undefined,
},
},
url: `https://s.weibo.com/weibo?q=${encodeURIComponent(`#${k.desc}#`)}`,
mobileUrl: k.scheme,
})
}
})
}
})
return hotNews
})