dreamina-query-result

SKILL.md

结果查询工具

API 端点

POST https://jimeng.jianying.com/mweb/v1/get_history_by_ids

Python 示例

import requests
import hashlib
import time

def generate_sign(uri_path):
    device_time = int(time.time())
    sign_str = f"9e2c|{uri_path[-7:]}|7|5.8.0|{device_time}||11ac"
    sign = hashlib.md5(sign_str.encode()).hexdigest()
    return sign, device_time

def query_result(sessionid, history_ids):
    uri = "/mweb/v1/get_history_by_ids"
    sign, device_time = generate_sign(uri)
    
    headers = {
        "Content-Type": "application/json",
        "Appid": "513695",
        "Appvr": "5.8.0",
        "Pf": "7",
        "Origin": "https://jimeng.jianying.com",
        "Referer": "https://jimeng.jianying.com",
        "Cookie": f"sessionid={sessionid}",
        "Device-Time": str(device_time),
        "Sign": sign,
        "Sign-Ver": "1"
    }
    
    resp = requests.post(
        f"https://jimeng.jianying.com{uri}",
        params={"aid": 513695, "device_platform": "web", "region": "CN"},
        headers=headers,
        json={"history_ids": history_ids, "http_common_info": {"aid": 513695}}
    )
    return resp.json()

响应结构 - 图片

{
  "ret": "0",
  "data": {
    "<history_id>": {
      "status": 50,
      "item_list": [{
        "image": {
          "large_images": [{
            "image_uri": "tos-cn-i-tb4s082cfz/<hash>",
            "image_url": "https://p26-dreamina-sign.byteimg.com/...",
            "width": 2048,
            "height": 2048,
            "format": "png"
          }]
        }
      }]
    }
  }
}

响应结构 - 视频

{
  "ret": "0",
  "data": {
    "<history_id>": {
      "status": 50,
      "item_list": [{
        "video": {
          "video_resource": {
            "video_url": "https://...",
            "video_uri": "tos-cn-v-xxx/...",
            "duration": 5000,
            "width": 1280,
            "height": 720
          }
        }
      }]
    }
  }
}

任务状态

status 说明
20 队列中
42 处理中
45 处理中(中间状态)
50 已完成
30 失败

轮询示例

import time

def wait_for_result(sessionid, history_id, max_attempts=30, interval=3):
    for i in range(max_attempts):
        result = query_result(sessionid, [history_id])
        data = result.get('data', {}).get(history_id, {})
        status = data.get('status')
        
        if status == 50:
            item = data['item_list'][0]
            if 'image' in item:
                return item['image']['large_images'][0]['image_url']
            elif 'video' in item:
                return item['video']['video_resource']['video_url']
        elif status == 30:
            raise Exception(f"Generation failed: {data.get('fail_msg')}")
        
        time.sleep(interval)
    
    raise Exception("Timeout waiting for result")

下载资源

def download_file(url, output_path):
    resp = requests.get(url, timeout=60)
    with open(output_path, 'wb') as f:
        f.write(resp.content)
    return len(resp.content)

注意事项

  • 图片/视频 URL 带签名,约 1-2 小时过期
  • 建议生成后立即下载
  • 支持批量查询多个 history_id
  • 图片轮询间隔 3 秒,视频 5-10 秒
Weekly Installs
3
First Seen
Feb 5, 2026
Installed on
opencode2
claude-code2
replit1
amp1
trae1
kimi-cli1