From 4e57a30c9092c5bd28c549c0cdd3ffb91d0a1e49 Mon Sep 17 00:00:00 2001 From: cc <98377878+hicccc77@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:18:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/main.ts | 30 ++++ electron/preload.ts | 4 +- electron/services/chatService.ts | 8 +- electron/services/snsService.ts | 205 +++++++++++++++++++++++++- resources/wcdb_api.dll | Bin 689152 -> 698880 bytes src/pages/SnsPage.scss | 246 +++++++++++++++++++++++++++++++ src/pages/SnsPage.tsx | 232 ++++++++++++++++++++++++++--- src/types/electron.d.ts | 2 + 8 files changed, 698 insertions(+), 29 deletions(-) diff --git a/electron/main.ts b/electron/main.ts index 5900356..5b7555a 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -136,6 +136,28 @@ function createWindow(options: { autoShow?: boolean } = {}) { win.loadFile(join(__dirname, '../dist/index.html')) } + // 拦截请求,修改 Referer 和 User-Agent 以通过微信 CDN 鉴权 + session.defaultSession.webRequest.onBeforeSendHeaders( + { + urls: [ + '*://*.qpic.cn/*', + '*://*.qlogo.cn/*', + '*://*.wechat.com/*', + '*://*.weixin.qq.com/*' + ] + }, + (details, callback) => { + details.requestHeaders['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090719) XWEB/8351" + details.requestHeaders['Accept'] = "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" + details.requestHeaders['Accept-Encoding'] = "gzip, deflate, br" + details.requestHeaders['Accept-Language'] = "zh-CN,zh;q=0.9" + details.requestHeaders['Referer'] = "https://servicewechat.com/" + details.requestHeaders['Connection'] = "keep-alive" + details.requestHeaders['Range'] = "bytes=0-" + callback({ cancel: false, requestHeaders: details.requestHeaders }) + } + ) + return win } @@ -682,6 +704,14 @@ function registerIpcHandlers() { return snsService.getTimeline(limit, offset, usernames, keyword, startTime, endTime) }) + ipcMain.handle('sns:debugResource', async (_, url: string) => { + return snsService.debugResource(url) + }) + + ipcMain.handle('sns:proxyImage', async (_, url: string) => { + return snsService.proxyImage(url) + }) + // 私聊克隆 diff --git a/electron/preload.ts b/electron/preload.ts index 6fa3c36..f53364f 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -214,6 +214,8 @@ contextBridge.exposeInMainWorld('electronAPI', { // 朋友圈 sns: { getTimeline: (limit: number, offset: number, usernames?: string[], keyword?: string, startTime?: number, endTime?: number) => - ipcRenderer.invoke('sns:getTimeline', limit, offset, usernames, keyword, startTime, endTime) + ipcRenderer.invoke('sns:getTimeline', limit, offset, usernames, keyword, startTime, endTime), + debugResource: (url: string) => ipcRenderer.invoke('sns:debugResource', url), + proxyImage: (url: string) => ipcRenderer.invoke('sns:proxyImage', url) } }) diff --git a/electron/services/chatService.ts b/electron/services/chatService.ts index 2c3c143..57e4206 100644 --- a/electron/services/chatService.ts +++ b/electron/services/chatService.ts @@ -328,7 +328,7 @@ class ChatService { const cached = this.avatarCache.get(username) // 如果缓存有效且有头像,直接使用;如果没有头像,也需要重新尝试获取 // 额外检查:如果头像是无效的 hex 格式(以 ffd8 开头),也需要重新获取 - const isValidAvatar = cached?.avatarUrl && + const isValidAvatar = cached?.avatarUrl && !cached.avatarUrl.includes('base64,ffd8') // 检测错误的 hex 格式 if (cached && now - cached.updatedAt < this.avatarCacheTtlMs && isValidAvatar) { result[username] = { @@ -3098,7 +3098,7 @@ class ChatService { private resolveAccountDir(dbPath: string, wxid: string): string | null { const normalized = dbPath.replace(/[\\\\/]+$/, '') - + // 如果 dbPath 本身指向 db_storage 目录下的文件(如某个 .db 文件) // 则向上回溯到账号目录 if (basename(normalized).toLowerCase() === 'db_storage') { @@ -3108,14 +3108,14 @@ class ChatService { if (basename(dir).toLowerCase() === 'db_storage') { return dirname(dir) } - + // 否则,dbPath 应该是数据库根目录(如 xwechat_files) // 账号目录应该是 {dbPath}/{wxid} const accountDirWithWxid = join(normalized, wxid) if (existsSync(accountDirWithWxid)) { return accountDirWithWxid } - + // 兜底:返回 dbPath 本身(可能 dbPath 已经是账号目录) return normalized } diff --git a/electron/services/snsService.ts b/electron/services/snsService.ts index bf674f4..4d5c2cf 100644 --- a/electron/services/snsService.ts +++ b/electron/services/snsService.ts @@ -2,6 +2,25 @@ import { wcdbService } from './wcdbService' import { ConfigService } from './config' import { ContactCacheService } from './contactCacheService' +export interface SnsLivePhoto { + url: string + thumb: string + md5?: string + token?: string + key?: string + encIdx?: string +} + +export interface SnsMedia { + url: string + thumb: string + md5?: string + token?: string + key?: string + encIdx?: string + livePhoto?: SnsLivePhoto +} + export interface SnsPost { id: string username: string @@ -10,11 +29,25 @@ export interface SnsPost { createTime: number contentDesc: string type?: number - media: { url: string; thumb: string }[] + media: SnsMedia[] likes: string[] comments: { id: string; nickname: string; content: string; refCommentId: string; refNickname?: string }[] + rawXml?: string // 原始 XML 数据 } +const fixSnsUrl = (url: string, token?: string) => { + if (!url) return url; + + // 1. 统一使用 https + // 2. 将 /150 (缩略图) 强制改为 /0 (原图) + let fixedUrl = url.replace('http://', 'https://').replace(/\/150($|\?)/, '/0$1'); + + if (!token || fixedUrl.includes('token=')) return fixedUrl; + + const connector = fixedUrl.includes('?') ? '&' : '?'; + return `${fixedUrl}${connector}token=${token}&idx=1`; +}; + class SnsService { private contactCache: ContactCacheService @@ -35,14 +68,50 @@ class SnsService { }) if (result.success && result.timeline) { - const enrichedTimeline = result.timeline.map((post: any) => { + const enrichedTimeline = result.timeline.map((post: any, index: number) => { const contact = this.contactCache.get(post.username) - // 修复媒体 URL,如果是 http 则尝试用 https (虽然 qpic 可能不支持强制 https,但通常支持) - const fixedMedia = post.media.map((m: any) => ({ - url: m.url.replace('http://', 'https://'), - thumb: m.thumb.replace('http://', 'https://') - })) + // 修复媒体 URL + const fixedMedia = post.media.map((m: any, mIdx: number) => { + const base = { + url: fixSnsUrl(m.url, m.token), + thumb: fixSnsUrl(m.thumb, m.token), + md5: m.md5, + token: m.token, + key: m.key, + encIdx: m.encIdx || m.enc_idx, // 兼容不同命名 + livePhoto: m.livePhoto ? { + ...m.livePhoto, + url: fixSnsUrl(m.livePhoto.url, m.livePhoto.token), + thumb: fixSnsUrl(m.livePhoto.thumb, m.livePhoto.token), + token: m.livePhoto.token, + key: m.livePhoto.key + } : undefined + } + + // [MOCK] 模拟数据:如果后端没返回 key (说明 DLL 未更新),注入一些 Mock 数据以便前端开发 + if (!base.key) { + base.key = 'mock_key_for_dev' + if (!base.token) { + base.token = 'mock_token_for_dev' + base.url = fixSnsUrl(base.url, base.token) + base.thumb = fixSnsUrl(base.thumb, base.token) + } + base.encIdx = '1' + + // 强制给第一个帖子的第一张图加 LivePhoto 模拟 + if (index === 0 && mIdx === 0 && !base.livePhoto) { + base.livePhoto = { + url: fixSnsUrl('https://tm.sh/d4cb0.mp4', 'mock_live_token'), + thumb: base.thumb, + token: 'mock_live_token', + key: 'mock_live_key' + } + } + } + + return base + }) return { ...post, @@ -59,6 +128,128 @@ class SnsService { console.log('[SnsService] Returning result:', result) return result } + async debugResource(url: string): Promise<{ success: boolean; status?: number; headers?: any; error?: string }> { + return new Promise((resolve) => { + try { + const { app, net } = require('electron') + // Remove mocking 'require' if it causes issues, but here we need 'net' or 'https' + // implementing with 'https' for reliability if 'net' is main-process only special + const https = require('https') + const urlObj = new URL(url) + + const options = { + hostname: urlObj.hostname, + path: urlObj.pathname + urlObj.search, + method: 'GET', + headers: { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090719) XWEB/8351", + "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Referer": "https://servicewechat.com/", + "Connection": "keep-alive", + "Range": "bytes=0-10" // Keep our range check + } + } + + const req = https.request(options, (res: any) => { + resolve({ + success: true, + status: res.statusCode, + headers: { + 'x-enc': res.headers['x-enc'], + 'content-length': res.headers['content-length'], + 'content-type': res.headers['content-type'] + } + }) + req.destroy() // We only need headers + }) + + req.on('error', (e: any) => { + resolve({ success: false, error: e.message }) + }) + + req.end() + } catch (e: any) { + resolve({ success: false, error: e.message }) + } + }) + } + + private imageCache = new Map() + + async proxyImage(url: string): Promise<{ success: boolean; dataUrl?: string; error?: string }> { + // Check cache + if (this.imageCache.has(url)) { + return { success: true, dataUrl: this.imageCache.get(url) } + } + + return new Promise((resolve) => { + try { + const https = require('https') + const zlib = require('zlib') + const urlObj = new URL(url) + + const options = { + hostname: urlObj.hostname, + path: urlObj.pathname + urlObj.search, + method: 'GET', + headers: { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090719) XWEB/8351", + "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Referer": "https://servicewechat.com/", + "Connection": "keep-alive" + } + } + + const req = https.request(options, (res: any) => { + if (res.statusCode !== 200) { + resolve({ success: false, error: `HTTP ${res.statusCode}` }) + return + } + + const chunks: Buffer[] = [] + let stream = res + + // Handle gzip compression + const encoding = res.headers['content-encoding'] + if (encoding === 'gzip') { + stream = res.pipe(zlib.createGunzip()) + } else if (encoding === 'deflate') { + stream = res.pipe(zlib.createInflate()) + } else if (encoding === 'br') { + stream = res.pipe(zlib.createBrotliDecompress()) + } + + stream.on('data', (chunk: Buffer) => chunks.push(chunk)) + stream.on('end', () => { + const buffer = Buffer.concat(chunks) + const contentType = res.headers['content-type'] || 'image/jpeg' + const base64 = buffer.toString('base64') + const dataUrl = `data:${contentType};base64,${base64}` + + // Cache + this.imageCache.set(url, dataUrl) + + resolve({ success: true, dataUrl }) + }) + stream.on('error', (e: any) => { + resolve({ success: false, error: e.message }) + }) + }) + + req.on('error', (e: any) => { + resolve({ success: false, error: e.message }) + }) + + req.end() + } catch (e: any) { + resolve({ success: false, error: e.message }) + } + }) + } } export const snsService = new SnsService() diff --git a/resources/wcdb_api.dll b/resources/wcdb_api.dll index e9e509eeac45c6f3404a9aff138dd9bf37ed3077..cd29973540fcf7be5779ba856aa7a58b749a125c 100644 GIT binary patch delta 229886 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

6)I&wPyG{TnOX*Ok!jKIP7 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