WORLDBOOK

Worldbooks | WebMCP | Search | Submit WebMCP

xueqiu WebMCP

Browser tool configuration for xueqiu

URL Pattern: ^https?://xueqiu\.com(/.*)?$
Allowed Extra Domains: example.com, stock.xueqiu.com, xueqiu.com

Tools (7)

xueqiu_earnings_date()

获取股票预计财报发布日期(公司大事)

Parameters

symbol string required - 股票代码,如 SH600519、SZ000858、00700
next boolean - 仅返回最近一次未发布的财报日期
limit number - 返回数量,默认 10

JavaScript Handler

(params) => {
  const args = Object.assign({"next": false, "limit": 10}, params || {});
  let data = null;
  let __wbContextUrl = globalThis.location?.href || '';
  let __wbContextDocument = globalThis.document || null;
    const __wbDefault = (value, fallback) => (value === undefined || value === null || value === '' ? fallback : value);
    const __wbJoin = (value, separator) => Array.isArray(value) ? value.join(separator) : (value ?? '');
    const __wbGet = (value, path) => {
      if (!path) return value;
      return String(path).split('.').reduce((acc, part) => (acc == null ? undefined : acc[part]), value);
    };
    const __wbBaseUrl = () => (__wbContextUrl || globalThis.location?.href || 'https://example.com/');
    const __wbResolve = (target, base) => {
      if (target == null) return '';
      const text = String(target);
      try {
        return /^https?:/i.test(text) ? text : new URL(text, base || __wbBaseUrl()).toString();
      } catch (_error) {
        return text;
      }
    };
    const __wbFetch = async (target, options) => {
      const url = __wbResolve(target, __wbBaseUrl());
      const resp = await globalThis.fetch(url, Object.assign({ credentials: 'include' }, options || {}));
      if (!resp.ok) {
        throw new Error(`HTTP ${resp.status} for ${url}`);
      }
      const text = await resp.text();
      try {
        return { url, text, data: JSON.parse(text) };
      } catch (_error) {
        return { url, text, data: text };
      }
    };
  return (async () => {
    {
      const __wbResp = await __wbFetch("https://xueqiu.com");
      __wbContextUrl = __wbResp.url;
      __wbContextDocument = new DOMParser().parseFromString(__wbResp.text, 'text/html');
      data = __wbContextDocument;
    }
    {
      const document = __wbContextDocument || globalThis.document;
      const location = new URL(__wbBaseUrl());
      const window = { document, location };
      const fetch = (target, options) => globalThis.fetch(__wbResolve(target, __wbBaseUrl()), Object.assign({ credentials: 'include' }, options || {}));
      data = await (((async () => {
  const symbol = (((args.symbol)) || '').toUpperCase();
  const onlyNext = (args.next);
  if (!symbol) throw new Error('Missing argument: symbol');
  const resp = await fetch(
    `https://stock.xueqiu.com/v5/stock/screener/event/list.json?symbol=${encodeURIComponent(symbol)}&page=1&size=100`,
    { credentials: 'include' }
  );
  if (!resp.ok) throw new Error('HTTP ' + resp.status + ' Hint: Not logged in?');
  const d = await resp.json();
  if (!d.data || !d.data.items) throw new Error('获取失败: ' + JSON.stringify(d));

  // subtype 2 = 预计财报发布
  let items = d.data.items.filter(item => item.subtype === 2);

  const now = Date.now();
  let results = items.map(item => {
    const ts = item.timestamp;
    const dateStr = ts ? new Date(ts).toISOString().split('T')[0] : null;
    const isFuture = ts && ts > now;
    return {
      date: dateStr,
      report: item.message,
      status: isFuture ? '⏳ 未发布' : '✅ 已发布',
      _ts: ts,
      _future: isFuture
    };
  });

  if (onlyNext) {
    const future = results.filter(r => r._future).sort((a, b) => a._ts - b._ts);
    results = future.length ? [future[0]] : [];
  }

  return results;
})())());
    }
    {
      const source = Array.isArray(data) ? data : (data == null ? [] : [data]);
      data = source.map((item, index) => ({
        "date": item.date,
        "report": item.report,
        "status": item.status,
      }));
    }
    if (Array.isArray(data)) data = data.slice(0, Number(args.limit) || 0);
    return data;
  })();
}

xueqiu_feed()

获取雪球首页时间线(关注用户的动态)

Parameters

page string - 页码,默认 1
count string - 每页数量,默认 20

JavaScript Handler

(params) => {
  const run = async function(args) {

      var page = parseInt(args.page) || 1;
      var count = Math.min(parseInt(args.count) || 20, 50);
      var resp = await fetch('https://xueqiu.com/v4/statuses/home_timeline.json?page=' + page + '&count=' + count, {credentials: 'include'});
      if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: 'Not logged in?'};
      var d = await resp.json();

      var strip = function(html) {
        return (html || '').replace(/<[^>]+>/g, '').replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').trim();
      };

      var list = d.home_timeline || d.list || [];
      var items = list.slice(0, count).map(function(item) {
        var user = item.user || {};
        return {
          id: item.id,
          text: strip(item.description).substring(0, 200),
          url: 'https://xueqiu.com/' + user.id + '/' + item.id,
          author: user.screen_name,
          author_id: user.id,
          verified: user.verified_description || null,
          likes: item.fav_count,
          retweets: item.retweet_count,
          replies: item.reply_count,
          created_at: item.created_at ? new Date(item.created_at).toISOString() : null
        };
      });

      return {page: page, count: items.length, items: items};
  };
  return run(params || {});
}

xueqiu_hot()

获取雪球热门动态

Parameters

count string - 返回数量,默认 20,最大 50

JavaScript Handler

(params) => {
  const run = async function(args) {

      var count = Math.min(parseInt(args.count) || 20, 50);
      var resp = await fetch('https://xueqiu.com/statuses/hot/listV3.json?source=hot&page=1', {credentials: 'include'});
      if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: 'Not logged in?'};
      var d = await resp.json();
      var list = (d.list || []).slice(0, count);

      var strip = function(html) {
        return (html || '').replace(/<[^>]+>/g, '').replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').trim();
      };

      var items = list.map(function(item, i) {
        var user = item.user || {};
        return {
          rank: i + 1,
          id: item.id,
          text: strip(item.description).substring(0, 200),
          url: 'https://xueqiu.com/' + user.id + '/' + item.id,
          author: user.screen_name,
          author_id: user.id,
          likes: item.fav_count,
          retweets: item.retweet_count,
          replies: item.reply_count,
          created_at: item.created_at ? new Date(item.created_at).toISOString() : null
        };
      });

      return {count: items.length, items: items};
  };
  return run(params || {});
}

xueqiu_hot_stock()

获取雪球热门股票榜

Parameters

count string - 返回数量,默认 20,最大 50
type string - 榜单类型:10=人气榜(默认) 12=关注榜

JavaScript Handler

(params) => {
  const run = async function(args) {

      var count = Math.min(parseInt(args.count) || 20, 50);
      var type = args.type || '10';
      var resp = await fetch('https://stock.xueqiu.com/v5/stock/hot_stock/list.json?size=' + count + '&type=' + type, {credentials: 'include'});
      if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: 'Not logged in?'};
      var d = await resp.json();
      if (!d.data || !d.data.items) return {error: '获取失败', raw: d};

      var items = d.data.items.map(function(s, i) {
        return {
          rank: i + 1,
          symbol: s.symbol,
          name: s.name,
          price: s.current,
          changePercent: s.percent != null ? s.percent.toFixed(2) + '%' : null,
          heat: s.value,
          rank_change: s.rank_change,
          url: 'https://xueqiu.com/S/' + s.symbol
        };
      });

      return {type: type === '12' ? '关注榜' : '人气榜', count: items.length, items: items};
  };
  return run(params || {});
}

xueqiu_search()

搜索雪球股票(代码或名称)

Parameters

query string required - 搜索关键词,如 茅台、AAPL、腾讯
count string - 返回数量,默认 10

JavaScript Handler

xueqiu_stock()

获取雪球股票实时行情

Parameters

symbol string required - 股票代码,如 SH600519、SZ000858、AAPL、00700

JavaScript Handler

(params) => {
  const run = async function(args) {

      if (!args.symbol) return {error: 'Missing argument: symbol', hint: '请输入股票代码,如 SH600519'};

      var symbol = args.symbol.toUpperCase();
      var resp = await fetch('https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=' + encodeURIComponent(symbol), {credentials: 'include'});
      if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: 'Not logged in?'};
      var d = await resp.json();

      if (!d.data || !d.data.items || d.data.items.length === 0) return {error: '未找到股票: ' + symbol};

      function fmtAmount(v) {
        if (v == null) return null;
        if (Math.abs(v) >= 1e12) return (v / 1e12).toFixed(2) + '万亿';
        if (Math.abs(v) >= 1e8) return (v / 1e8).toFixed(2) + '亿';
        if (Math.abs(v) >= 1e4) return (v / 1e4).toFixed(2) + '万';
        return v.toString();
      }

      var item = d.data.items[0];
      var q = item.quote || {};
      var m = item.market || {};

      return {
        name: q.name,
        symbol: q.symbol,
        exchange: q.exchange,
        currency: q.currency,
        price: q.current,
        change: q.chg,
        changePercent: q.percent != null ? q.percent.toFixed(2) + '%' : null,
        open: q.open,
        high: q.high,
        low: q.low,
        prevClose: q.last_close,
        amplitude: q.amplitude != null ? q.amplitude.toFixed(2) + '%' : null,
        volume: q.volume,
        amount: fmtAmount(q.amount),
        turnover_rate: q.turnover_rate != null ? q.turnover_rate.toFixed(2) + '%' : null,
        marketCap: fmtAmount(q.market_capital),
        floatMarketCap: fmtAmount(q.float_market_capital),
        ytdPercent: q.current_year_percent != null ? q.current_year_percent.toFixed(2) + '%' : null,
        market_status: m.status || null,
        time: q.timestamp ? new Date(q.timestamp).toISOString() : null,
        url: 'https://xueqiu.com/S/' + q.symbol
      };
  };
  return run(params || {});
}

xueqiu_watchlist()

获取雪球自选股列表

Parameters

category string - 分类:1=自选(默认) 2=持仓 3=关注

JavaScript Handler

(params) => {
  const run = async function(args) {

      var category = parseInt(args.category) || 1;
      var resp = await fetch('https://stock.xueqiu.com/v5/stock/portfolio/stock/list.json?size=100&category=' + category + '&pid=-1', {credentials: 'include'});
      if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: 'Not logged in?'};
      var d = await resp.json();
      if (!d.data || !d.data.stocks) return {error: '获取失败,可能未登录', raw: d};

      var items = d.data.stocks.map(function(s) {
        return {
          symbol: s.symbol,
          name: s.name,
          price: s.current,
          change: s.chg,
          changePercent: s.percent != null ? s.percent.toFixed(2) + '%' : null,
          volume: s.volume,
          url: 'https://xueqiu.com/S/' + s.symbol
        };
      });

      var labels = {1: '自选股', 2: '持仓', 3: '关注'};
      return {category: labels[category] || category, count: items.length, items: items};
  };
  return run(params || {});
}

🔌 Chrome MCP Server Extension

Use these tools with Claude, ChatGPT, and other AI assistants.

Get Extension →

How to Use WebMCP

WebMCP tools are designed for browser extensions or automation frameworks. The browser extension matches the current URL against the pattern and executes the JavaScript handler when the tool is invoked.

API Endpoint:

GET /api/webmcp/match?url=https://www.xueqiu.com/...