Skip to content

完整调用示例

Node.js(axios)单账号查询

javascript
const axios = require('axios');

async function queryAccount() {
  const resp = await axios.post('https://monsteronly.me/api/account', {
    refreshToken: 'eyJhb...',
    fields: '个人信息,封禁,等级'
  }, {
    headers: {
      'Authorization': 'Bearer sk_xxxxxxxx',
      'Content-Type': 'application/json'
    }
  });
  console.log(resp.data);
}

queryAccount().catch(console.error);

Node.js 批量查询(SSE 流式)

javascript
const axios = require('axios');

async function batchQuery() {
  const resp = await axios.post('https://monsteronly.me/api/accounts', {
    refreshTokens: ['token1', 'token2', 'token3'],
    fields: '个人信息,封禁,红信'
  }, {
    headers: {
      'Authorization': 'Bearer sk_xxxxxxxx',
      'Content-Type': 'application/json'
    },
    responseType: 'stream'
  });

  let buffer = '';
  resp.data.on('data', (chunk) => {
    buffer += chunk.toString();
    const lines = buffer.split('\n\n');
    buffer = lines.pop(); // 保留不完整的最后一段
    for (const line of lines) {
      if (!line.startsWith('data: ')) continue;
      const event = JSON.parse(line.slice(6));
      if (event.type === 'progress') {
        console.log(`[${event.processed}/${event.total}]`, event.result);
      } else if (event.type === 'success') {
        console.log('全部完成,剩余配额:', event.quota.remaining);
      } else if (event.type === 'error') {
        console.error('错误:', event.message);
      }
    }
  });
}

batchQuery().catch(console.error);

Python(requests + 流式)

python
import requests
import json

API = 'https://monsteronly.me'
KEY = 'sk_xxxxxxxx'

def single_query(refresh_token):
    r = requests.post(
        f'{API}/api/account',
        headers={'Authorization': f'Bearer {KEY}'},
        json={
            'refreshToken': refresh_token,
            'fields': '个人信息,封禁'
        },
        timeout=30
    )
    r.raise_for_status()
    return r.json()

def batch_query(tokens, fields='个人信息,封禁'):
    with requests.post(
        f'{API}/api/accounts',
        headers={'Authorization': f'Bearer {KEY}'},
        json={
            'refreshTokens': tokens,
            'fields': fields
        },
        stream=True,
        timeout=600
    ) as r:
        r.raise_for_status()
        for line in r.iter_lines(decode_unicode=True):
            if not line or not line.startswith('data: '):
                continue
            event = json.loads(line[6:])
            if event['type'] == 'progress':
                print(f"[{event['processed']}/{event['total']}]", event['result'])
            elif event['type'] == 'success':
                print('完成,剩余配额:', event['quota']['remaining'])
            elif event['type'] == 'error':
                print('错误:', event.get('message'))

# 用法
print(single_query('eyJhb...'))
batch_query(['token1', 'token2', 'token3'])

浏览器 fetch(SSE)

javascript
async function batchQuery() {
  const resp = await fetch('https://monsteronly.me/api/accounts', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer sk_xxxxxxxx',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      refreshTokens: 'token1,token2',
      fields: '个人信息'
    })
  });

  const reader = resp.body.getReader();
  const decoder = new TextDecoder();
  let buffer = '';

  while (true) {
    const { value, done } = await reader.read();
    if (done) break;
    buffer += decoder.decode(value, { stream: true });
    const lines = buffer.split('\n\n');
    buffer = lines.pop();
    for (const line of lines) {
      if (!line.startsWith('data: ')) continue;
      const event = JSON.parse(line.slice(6));
      console.log(event);
    }
  }
}