紫微斗数API文档

接口说明

本接口用于生成紫微斗数星盘,需要提供出生日期、时间、性别等信息,计算并生成完整的紫微斗数星盘数据。紫微斗数是中国传统占星术,通过出生信息分析12宫位的星曜分布、四化、大限、流年等信息。

基本信息

请求参数

参数名 类型 必选 说明
date string 是 出生日期,格式:YYYY-MM-DD
time number 否 出生时辰(0-11),0=子时、1=丑时、2=寅时、3=卯时、4=辰时、5=巳时、6=午时、7=未时、8=申时、9=酉时、10=戌时、11=亥时
gender string 否 性别,默认"女",可选值:"男"、"女"
fixLeap boolean 否 是否调整闰月,默认false
lang string 否 语言,默认"zh-CN",支持多语言输入输出

请求示例

{
    "date": "2000-08-16",
    "time": 2,
    "gender": "男",
    "fixLeap": true,
    "lang": "zh-CN"
}

返回参数

参数名 类型 说明
meta object 元数据,包含阳历日期、农历日期、中文日期、时辰、星座、生肖、五行局、命宫地支、身宫地支、命宫索引
palaces array 12宫位数据数组,每个宫位包含索引、名称、天干、地支、主星、辅星、杂耀、四化、大限信息等
surrounded object 三方四正信息,包含命宫、财帛宫、官禄宫、迁移宫的索引
horoscope object 运限信息,包含大限、流年、流月、流日、流时的星曜信息

返回示例

{
  "meta": {
    "solarDate": "2000-08-16",
    "lunarDate": "2000-7-17",
    "chineseDate": "庚辰年甲申月丁丑日",
    "time": "寅时",
    "sign": "狮子座",
    "zodiac": "龙",
    "fiveElementsClass": "丁火",
    "earthlyBranchOfSoulPalace": "戌",
    "earthlyBranchOfBodyPalace": "辰",
    "soulIndex": 10
  },
  "palaces": [
    {
      "index": 0,
      "name": "命宫",
      "heavenlyStem": "辛",
      "earthlyBranch": "巳",
      "majorStars": ["紫微", "天机"],
      "minorStars": ["文昌", "文曲"],
      "adjectiveStars": ["左辅", "右弼"],
      "mutaged": "禄:天机",
      "decadal": {
        "range": [26, 35],
        "heavenlyStem": "丙"
      },
      "ages": [26, 35],
      "suiqian12": "破军",
      "jiangqian12": "太阳"
    }
  ],
  "surrounded": {
    "target": 10,
    "opposite": 4,
    "wealth": 2,
    "career": 8
  },
  "horoscope": {
    "decadal": {
      "starsNames": [["贪狼", "巨门"], ["天相", "天梁"]]
    },
    "yearly": {
      "starsNames": [["廉贞", "破军"], ["七杀", "天同"]],
      "yearlyDecStar": {
        "suiqian12": ["破军", "七杀", "天同", "廉贞"],
        "jiangqian12": ["太阳", "武曲", "太阴", "贪狼"]
      }
    },
    "monthly": {
      "starsNames": [["天府", "太阴"], ["太阳", "天机"]]
    },
    "daily": {
      "starsNames": [["紫微", "天机"], ["天相", "天梁"]]
    },
    "hourly": {
      "starsNames": [["天府", "太阴"], ["太阳", "天机"]]
    }
  }
}

Python测试代码示例

import requests
import json

# 测试紫微斗数API
def test_ziwei_astrolabe(base_url="https://chart.12sign.top"):
    url = f"{base_url}/api/astrolabe"
    
    params = {
        "date": "2000-08-16",
        "time": 2,
        "gender": "男",
        "fixLeap": True,
        "lang": "zh-CN"
    }
    
    try:
        print("正在测试紫微斗数API...")
        response = requests.get(url, params=params)
        print(f"响应状态码: {response.status_code}")
        
        if response.status_code == 200:
            data = response.json()
            print("紫微斗数API测试成功!")
            print(f"返回数据包含: {list(data.keys())}")
            
            # 打印基本信息
            if 'meta' in data:
                meta = data['meta']
                print("\n基本信息:")
                print(f"  阳历日期: {meta.get('solarDate')}")
                print(f"  农历日期: {meta.get('lunarDate')}")
                print(f"  星座: {meta.get('sign')}")
                print(f"  生肖: {meta.get('zodiac')}")
                print(f"  命宫索引: {meta.get('soulIndex')}")
            
            # 保存JSON文件
            with open('test_outputs/ziwei_result.json', 'w', encoding='utf-8') as f:
                json.dump(data, f, ensure_ascii=False, indent=2)
            print("JSON文件已保存: test_outputs/ziwei_result.json")
            
            return data
        else:
            print(f"API请求失败: {response.status_code}")
            print(f"错误信息: {response.text}")
            return None
            
    except Exception as e:
        print(f"请求出错: {e}")
        return None

# 测试不同出生信息的星盘
def test_multiple_charts():
    test_cases = [
        {
            "name": "女命子时",
            "params": {"date": "2000-01-01", "time": 0, "gender": "女"}
        },
        {
            "name": "男命寅时",
            "params": {"date": "1990-08-16", "time": 2, "gender": "男"}
        },
        {
            "name": "繁体中文",
            "params": {"date": "1985-06-15", "time": 4, "gender": "女", "lang": "zh-TW"}
        },
        {
            "name": "英文输出",
            "params": {"date": "1995-12-25", "time": 6, "gender": "男", "lang": "en-US"}
        }
    ]
    
    for case in test_cases:
        print(f"\n=== 测试{case['name']}星盘 ===")
        try:
            response = requests.get("https://chart.12sign.top/api/astrolabe", params=case["params"])
            if response.status_code == 200:
                print(f"{case['name']}星盘生成成功")
            else:
                print(f"{case['name']}星盘生成失败: {response.status_code}")
        except Exception as e:
            print(f"{case['name']}星盘测试出错: {e}")

if __name__ == "__main__":
    # 基本测试
    test_ziwei_astrolabe()
    
    # 多案例测试
    test_multiple_charts()

注意事项

  • 本接口支持跨域(CORS),可以直接从浏览器调用
  • 日期格式必须严格遵循YYYY-MM-DD的格式
  • 时辰参数为0-11的数字,代表十二时辰
  • 时辰0代表子时(23:00-01:00),11代表亥时(21:00-23:00)
  • 性别参数必须为"男"或"女",不能使用英文
  • 支持多种语言输入输出
  • fixLeap参数用于闰月调整,一般情况设为false
  • 返回数据包含完整的12宫位信息、三方四正和运限信息
  • palaces数组包含12个宫位,索引0-11对应12个宫位
  • horoscope包含大限、流年、流月、流日、流时的星曜信息
  • API支持GET请求,不支持POST请求
  • 建议添加User-Agent等HTTP头以避免某些限制