/** * Weibo me — current logged-in user profile. */ import { cli, Strategy } from '@jackwener/opencli/registry'; import { CommandExecutionError } from '@jackwener/opencli/errors'; import { getSelfUid, requireObjectEvaluateResult, unwrapEvaluateResult } from './utils.js'; cli({ site: 'weibo', name: 'me', access: 'read', description: 'My Weibo profile info', domain: 'weibo.com', strategy: Strategy.COOKIE, args: [], columns: ['screen_name', 'uid', 'followers', 'following', 'statuses', 'verified', 'location'], func: async (page) => { await page.goto('https://weibo.com'); await page.wait(2); const uid = await getSelfUid(page); const data = requireObjectEvaluateResult(unwrapEvaluateResult(await page.evaluate(` (async () => { const uid = ${JSON.stringify(uid)}; // Try Vue store first const app = document.querySelector('#app')?.__vue_app__; const store = app?.config?.globalProperties?.$store; const cfg = store?.state?.config?.config; const u = cfg?.user; // Fetch detail info const detailResp = await fetch('/ajax/profile/detail?uid=' + uid, {credentials: 'include'}); const detail = detailResp.ok ? await detailResp.json() : null; const d = detail?.data || {}; if (u && u.id) { return { screen_name: u.screen_name, uid: u.id, followers: u.followers_count, following: u.friends_count, statuses: u.statuses_count, verified: u.verified || false, location: u.location || '', description: u.description || d.description || '', avatar: u.avatar_hd || u.avatar_large || '', profile_url: 'https://weibo.com' + (u.profile_url || '/u/' + u.id), }; } // Fallback: fetch profile API const resp = await fetch('/ajax/profile/info?uid=' + uid, {credentials: 'include'}); if (!resp.ok) return {error: 'HTTP ' + resp.status}; const info = await resp.json(); if (!info.ok) return {error: 'API error'}; const p = info.data?.user; if (!p) return {error: 'User data not found'}; return { screen_name: p.screen_name, uid: p.id, followers: p.followers_count, following: p.friends_count, statuses: p.statuses_count, verified: p.verified || false, location: p.location || '', description: p.description || d.description || '', avatar: p.avatar_hd || p.avatar_large || '', profile_url: 'https://weibo.com' + (p.profile_url || '/u/' + p.id), }; })() `)), 'weibo me'); if (data.error) throw new CommandExecutionError(String(data.error)); return data; }, });