Skip to main content

Python SDK for ApiWorks 星盘 API (www.apiworks.com):星盘、八字、紫微、奇门、大六壬、星宿、运势、报告等

Project description

apiworks-astro-py-sdk

Python SDK for ApiWorks 星盘 API(www.apiworks.com)。支持星盘、八字、紫微、奇门遁甲、大六壬、星宿、运势、AI 报告等能力(SDK v1.1.0)。

功能概览

  • 星盘 (Chart):本命盘、天象盘、行运盘、比较盘、组合盘、三限/次限/法达/日弧等
  • 星座 (Sign):我的星座、星座列表、星座配对
  • 运势 (Scope):日/周/月/年运势
  • 星象事件 (Event):行运星象事件
  • 紫微斗数 (Ziwei):本命盘、排盘、含解读的排盘
  • 星宿 (Naks):27 星宿关系
  • 八字 (Bazi):命盘、流盘、合盘、总结
  • 三式 (Sanshi):奇门遁甲、大六壬 / 金口诀
  • 报告 (Report):桃花、周运、年运、合盘、财运等 AI 报告
  • 多语言:请求体 / 查询参数 lang,支持 zh-Hans(默认)、zh-Hanten(部分接口)

安装

pip install apiworks-astro-py-sdk

或从源码安装(在项目目录下):

pip install -e .

依赖

  • Python >= 3.9
  • httpx >= 0.27
  • pydantic >= 2.0

凭证(App ID / App Key)

每个 AstroCloudClient / AsyncAstroCloudClient 实例绑定一对 app_idapp_key,该实例发出的全部请求都会带上这组凭证。

ApiWorks 网站上,同一开放域下不同能力可能对应不同的 App ID / App Key(具体以网站开通为准,分组可能调整)。请按你实际开通的凭证使用:

  • 同一对凭证能调用哪些接口 → 以网站控制台为准
  • 需要用多组凭证时 → 为每组各建一个 Client,不要混用
from apiworks_astro_sdk import AstroCloudClient, QimenQry, SinglePointQry

# 凭证 A:例如开通了星盘相关接口
chart_client = AstroCloudClient(app_id="chart-app-id", app_key="chart-app-key")
chart_client.chart_natal(SinglePointQry(
    birth_dt="1990-08-14 12:00:00", tz=8, longitude=116.4, latitude=39.9,
))

# 凭证 B:例如开通了奇门 / 六壬相关接口
sanshi_client = AstroCloudClient(app_id="sanshi-app-id", app_key="sanshi-app-key")
sanshi_client.qimen(QimenQry(qry_dt="1999-10-17 21:00:00", tz=8))

若返回鉴权失败,请到网站 Token 管理页核对:该组 App ID / App Key 是否有权调用目标接口,且二者是否为一组配套凭证。

快速开始

同步客户端

from apiworks_astro_sdk import AstroCloudClient, SinglePointQry, TimeAndLocation

# 传入在网站上对该接口有权限的那一对凭证
client = AstroCloudClient(
    app_id="your-app-id",
    app_key="your-app-key",
)
# base_url 默认为 https://cloud.apiworks.com/open/astro,如需可传入 base_url 覆盖

# 本命盘
qry = SinglePointQry(
    birth_dt="1990-08-14 12:00:00",
    tz=8,
    longitude=116.4074,
    latitude=39.9042,
)
resp = client.chart_natal(qry)  # ApiResp[AstroDataVo],强类型
if resp.code == 0 and resp.data:
    print(resp.data.house, resp.data.planet)

异步客户端

import asyncio
from apiworks_astro_sdk import AsyncAstroCloudClient, ScopeQryReq, TimeAndLocation, ScopeRespVo

async def main():
    client = AsyncAstroCloudClient(
        app_id="your-app-id",
        app_key="your-app-key",
    )
    qry = ScopeQryReq(
        birth_point=TimeAndLocation(
            birth_dt="1990-01-01 12:00:00", tz=8, longitude=116.4, latitude=39.9
        ),
        transit_point=TimeAndLocation(
            birth_dt="2025-02-26 12:00:00", tz=8, longitude=116.4, latitude=39.9
        ),
    )
    resp = await client.scope_day("user-123", qry)  # ApiResp[ScopeRespVo]
    if resp.code == 0 and resp.data:
        scope: ScopeRespVo = resp.data
        print(scope.scope_total, scope.scope_info)

asyncio.run(main())

更多示例

八字命盘:

from apiworks_astro_sdk import AstroCloudClient, BaziNatalQry, BaziNatalVO

client = AstroCloudClient(app_id="...", app_key="...")
qry = BaziNatalQry(birth_dt="1990-08-14 12:00:00", tz=8, gender="male")
resp = client.bazi_natal(qry)  # ApiResp[BaziNatalVO]
if resp.code == 0 and resp.data:
    natal: BaziNatalVO = resp.data
    print(natal.pillars, natal.flow_decadal)

紫微本命盘:

from apiworks_astro_sdk import AstroCloudClient, ZiweiNatalQry, ZiweiNatalVo

qry = ZiweiNatalQry(birth_dt="1999-10-17 21:00:00", tz=8, gender="female")
resp = client.ziwei_natal(qry)  # ApiResp[ZiweiNatalVo]
if resp.code == 0 and resp.data:
    ziwei = resp.data
    print(ziwei.natal.palaces, ziwei.patterns)

星宿关系:

from apiworks_astro_sdk import AstroCloudClient, NaksQry, NaksBirthInfo, NaksVo

qry = NaksQry(
    birth_info=NaksBirthInfo(birth_dt="1990-01-15 00:00:00", tz=8),
    others_birth_info=[
        NaksBirthInfo(birth_dt="1992-03-20 00:00:00", tz=8),
    ],
)
resp = client.naks_relations(qry)  # ApiResp[NaksVo]
if resp.code == 0 and resp.data:
    naks: NaksVo = resp.data
    print(naks.natal_naks_info, naks.others_natal_relation)

奇门遁甲 / 大六壬:

from apiworks_astro_sdk import AstroCloudClient, QimenQry, LiurenQry

client = AstroCloudClient(app_id="...", app_key="...")

# 时家拆补转盘
qm = client.qimen(QimenQry(
    qry_dt="1999-10-17 21:00:00",
    tz=8,
    type="shijia",
    pai_method="zhuanpan",
    ju_method="chaibu",
    lang="zh-Hans",
))
if qm.code == 0 and qm.data:
    print(qm.data.ju_display, qm.data.jiu_gong.keys())

# 大六壬
lr = client.liuren(LiurenQry(
    qry_dt="1999-10-17 21:00:00",
    tz=8,
    type="daliuren",
    gui_method="tian",
))
if lr.code == 0 and lr.data:
    print(lr.data.ge_ju, lr.data.si_ke, lr.data.san_chuan)

双点星盘(行运/比较盘):

from apiworks_astro_sdk import AstroCloudClient, DoublePointQry, TimeAndLocation, AstroDataVo

qry = DoublePointQry(
    user_list=[
        TimeAndLocation(birth_dt="1990-08-14 12:00:00", tz=8, longitude=116.4, latitude=39.9),
        TimeAndLocation(birth_dt="2025-02-26 12:00:00", tz=8, longitude=116.4, latitude=39.9),
    ]
)
resp = client.chart_transit(qry)   # ApiResp[AstroDataVo] 行运盘
resp = client.chart_comparison(qry) # ApiResp[AstroDataVo] 比较盘
if resp.code == 0 and resp.data:
    print(resp.data.planet, resp.data.house)

报告(桃花/合盘/周运等):

from apiworks_astro_sdk import AstroCloudClient, RomanticCreateQry, TimeAndLocation, AstroReportVo

qry = RomanticCreateQry(
    user_birth_point=TimeAndLocation(
        birth_dt="1990-01-01 13:14:15", tz=8, longitude=116.4, latitude=39.9
    ),
    user_current_point=TimeAndLocation(
        birth_dt="2025-11-26 13:14:15", tz=8, longitude=116.4, latitude=39.9
    ),
    user_id="user-123",
)
resp = client.report_romantic(qry)  # ApiResp[AstroReportVo]
if resp.code == 0 and resp.data and resp.data.serial_no:
    serial_no = resp.data.serial_no  # 可用 report_get / report_get_html 拉取报告

API 响应格式

所有接口均返回强类型 ApiResp[T],可直接使用 resp.coderesp.msgresp.dataresp.exe_time,其中 data 为与接口对应的 Vo 类型(如 BaziNatalVONaksVoAstroDataVo 等):

resp = client.bazi_natal(qry)  # ApiResp[BaziNatalVO]
assert resp.code == 0
data: BaziNatalVO = resp.data  # 强类型,IDE 可补全

验证 SDK 是否可用

用真实接口调用一次本命盘,确认网络与凭证正常:

# 在项目根目录,先安装本包与依赖(含 pytest 可加 --extras dev)
poetry install

# 设置你的 app_id / app_key 后执行(不要提交到仓库)
export APIWORKS_APP_ID="你的app_id"
export APIWORKS_APP_KEY="你的app_key"
poetry run python scripts/verify_sdk.py

也可不用 Poetry:

pip install -e ".[dev]"
APIWORKS_APP_ID=xxx APIWORKS_APP_KEY=xxx python scripts/verify_sdk.py

成功会打印 验证通过,SDK 可用。;若 code != 0 或报错,请检查凭证与网络。

项目结构

apiworks-astro-py-sdk/
├── pyproject.toml
├── README.md
├── src/
│   └── apiworks_astro_sdk/
│       ├── __init__.py
│       ├── client.py       # AstroCloudClient, AsyncAstroCloudClient
│       └── models/
│           ├── __init__.py
│           ├── common.py            # ApiResp, TimeAndLocation
│           ├── requests.py          # 各类请求 DTO(含 lang / 奇门 / 六壬)
│           ├── responses.py         # 响应 VO
│           └── sanshi_responses.py  # 奇门 / 大六壬响应 VO
└── tests/

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apiworks_astro_py_sdk-1.1.0.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

apiworks_astro_py_sdk-1.1.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file apiworks_astro_py_sdk-1.1.0.tar.gz.

File metadata

  • Download URL: apiworks_astro_py_sdk-1.1.0.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.22

File hashes

Hashes for apiworks_astro_py_sdk-1.1.0.tar.gz
Algorithm Hash digest
SHA256 dd7292c3898f7cd306b8c782ebcdd1634c6e3a6f289b7805a38d7d45416d0464
MD5 bea10fd3ab030737371ab73983781b0a
BLAKE2b-256 02b0c6ae4357d0ad02385e0318c054d71b85a85765deba7faf9f107aaeef792d

See more details on using hashes here.

File details

Details for the file apiworks_astro_py_sdk-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for apiworks_astro_py_sdk-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 92b478fa8ac6ec13200fb903105dbc58ea1c27e96763a6ed6633cd00c0b5d673
MD5 13ed04013f517ed620e67f222815808e
BLAKE2b-256 07b5c429b080ea52dae1cb62e9ea52c77a4c218968c4be6b1c3f656f46d804e1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page