Skip to content
On this page

Get Project Info

获取项目的完整信息,包括名称、类型、任务状态和结果

Endpoint

GET https://openapi.kujiale.com/v2/aholo/project/info

Authentication

需要签名认证 + appuid 参数。

Request

Query Parameters

ParameterRequiredTypeDescription
appuidYesString第三方用户ID
projectIdYesString项目ID

Response

json
{
  "c": "0",
  "d": {
    "projectId": "3FO4K4WBOFQ4",
    "name": "乐高-猫头鹰",
    "cover": "https://holo-cos.aholo3d.cn/resource/image/.../cover.jpg",
    "projectType": 0,
    "scene": "model",
    "task": {
      "taskId": "3FO4K4WBNNYV",
      "status": 3,
      "result": {
        "plyPath": "https://holo-cos.aholo3d.cn/.../point_cloud.ply",
        "spzPath": "https://holo-cos.aholo3d.cn/.../point_cloud_compressed.spz",
        "sogPath": "https://holo-cos.aholo3d.cn/.../point_cloud.sog"
      }
    },
    "created": 1772638627000,
    "lastModified": 1772640130000
  },
  "m": null,
  "f": ""
}

Fields

FieldTypeDescription
projectIdString项目ID
nameString项目名称
coverString/null封面图 URL
projectTypeInt项目类型。0=重建, 1=生成
sceneString场景类型。model=物体, space=室内
taskObject/null任务详情
createdLong创建时间(毫秒时间戳)
lastModifiedLong最后修改时间(毫秒时间戳)

Task Object

FieldTypeDescription
taskIdString任务ID
statusInt任务状态(见状态枚举)
resultObject/null任务结果(成功时有)

Result Object

FieldTypeDescription
plyPathStringPLY 点云文件 URL
spzPathStringSPZ 压缩文件 URL
sogPathStringSOG 优化格式 URL

Project Types

projectTypeDescriptionCreated By
03D 重建create-3d-recon
13D 生成create-3d-gen

Task Status Enum

StatusMeaningIs Final
0排队中
1等待执行
2执行中
3成功✓ 是
4失败✓ 是
5取消✓ 是
6超时✓ 是
7被拒绝✓ 是
8预处理中

Code Examples

Python

python
import requests
from datetime import datetime

APPUID = "your_appuid"
BASE_URL = "https://openapi.kujiale.com/v2/aholo"

def get_project_info(project_id):
    """获取项目完整信息"""
    
    response = requests.get(
        f"{BASE_URL}/project/info",
        params={
            "appuid": APPUID,
            "projectId": project_id
        }
        # 注意:实际需添加签名认证
    )
    
    if response.json()["c"] != "0":
        raise Exception("获取项目信息失败")
    
    return response.json()["d"]

def print_project_info(project):
    """打印项目信息摘要"""
    
    print("\n" + "="*50)
    print("📋 项目信息")
    print("="*50)
    
    print(f"ID: {project['projectId']}")
    print(f"名称: {project['name']}")
    
    # 项目类型
    type_text = "重建" if project['projectType'] == 0 else "生成"
    print(f"类型: {type_text} (projectType={project['projectType']})")
    
    # 场景
    scene_text = "物体" if project['scene'] == "model" else "室内"
    print(f"场景: {scene_text}")
    
    # 时间
    created = datetime.fromtimestamp(project['created']/1000)
    modified = datetime.fromtimestamp(project['lastModified']/1000)
    print(f"创建时间: {created}")
    print(f"修改时间: {modified}")
    
    # 封面
    if project['cover']:
        print(f"封面: {project['cover']}")
    
    # 任务状态
    task = project.get('task')
    if task:
        status = task['status']
        status_map = {
            0: "排队中",
            1: "等待执行",
            2: "执行中",
            3: "成功",
            4: "失败",
            5: "取消",
            6: "超时",
            7: "被拒绝",
            8: "预处理中"
        }
        print(f"\n任务状态: {status_map.get(status, f'未知({status})')}")
        
        if status == 3 and task.get('result'):
            print("\n📦 3D 资产:")
            result = task['result']
            print(f"   PLY: {result['plyPath']}")
            print(f"   SPZ: {result['spzPath']}")
            print(f"   SOG: {result['sogPath']}")
    
    print("="*50)

# 使用示例
project = get_project_info("3FO4K4WBOFQ4")
print_project_info(project)

Python - 获取资产 URL

python
def get_project_assets(project_id):
    """获取项目的 3D 资产 URL"""
    
    project = get_project_info(project_id)
    
    task = project.get('task')
    if not task or task['status'] != 3:
        return None
    
    return task.get('result')

# 使用示例
assets = get_project_assets("3FO4K4WBOFQ4")

if assets:
    print(f"PLY: {assets['plyPath']}")
    print(f"SPZ: {assets['spzPath']}")
else:
    print("项目未完成或无结果")

JavaScript

javascript
const APPUID = 'your_appuid';
const BASE_URL = 'https://openapi.kujiale.com/v2/aholo';

async function getProjectInfo(projectId) {
  const response = await fetch(
    `${BASE_URL}/project/info?appuid=${APPUID}&projectId=${projectId}`
  );
  
  const data = await response.json();
  
  if (data.c !== '0') {
    throw new Error('获取项目信息失败');
  }
  
  return data.d;
}

function printProjectInfo(project) {
  console.log('\n' + '='.repeat(50));
  console.log('📋 项目信息');
  console.log('='.repeat(50));
  
  console.log(`ID: ${project.projectId}`);
  console.log(`名称: ${project.name}`);
  
  const typeText = project.projectType === 0 ? '重建' : '生成';
  console.log(`类型: ${typeText}`);
  
  const sceneText = project.scene === 'model' ? '物体' : '室内';
  console.log(`场景: ${sceneText}`);
  
  const created = new Date(project.created);
  console.log(`创建时间: ${created.toLocaleString()}`);
  
  if (project.task) {
    const status = project.task.status;
    const statusMap = {
      0: '排队中', 1: '等待执行', 2: '执行中',
      3: '成功', 4: '失败', 5: '取消', 6: '超时', 7: '被拒绝', 8: '预处理中'
    };
    console.log(`\n任务状态: ${statusMap[status]}`);
    
    if (status === 3 && project.task.result) {
      console.log('\n📦 3D 资产:');
      console.log(`   PLY: ${project.task.result.plyPath}`);
      console.log(`   SPZ: ${project.task.result.spzPath}`);
      console.log(`   SOG: ${project.task.result.sogPath}`);
    }
  }
  
  console.log('='.repeat(50));
}

// 使用示例
const project = await getProjectInfo('3FO4K4WBOFQ4');
printProjectInfo(project);

cURL

bash
curl -X GET "https://openapi.kujiale.com/v2/aholo/project/info?appuid=your_appuid&projectId=3FO4K4WBOFQ4"

Notes

  • 完整信息: 包含项目元数据和任务结果
  • 时间戳: createdlastModified 是毫秒级时间戳
  • 与 Task Status 对比:
    • Task Status 接口用于轮询等待
    • Project Info 用于获取完整项目信息
  • 推荐用法: 任务完成后用此接口获取持久化的项目信息

Use Cases

  1. 检查项目状态: 创建后检查是否完成
  2. 获取资产 URL: 下载 3D 文件
  3. 项目管理: 列出、展示项目信息
  4. 历史查询: 后续访问已创建的项目

Error Codes

CodeDescription
-1调用失败

相关: Query Task Status | Create 3D Reconstruction Project

基于 Marble API 文档结构