# apiworks-astro-java-sdk
**Repository Path**: wingerd/apiworks-astro-java-sdk
## Basic Information
- **Project Name**: apiworks-astro-java-sdk
- **Description**: Java SDK for ApiWorks 星盘 API(默认网关 `https://cloud.apiworks.com/open/astro`)。用于简化在 Java 项目中调用星盘、八字、紫微、星宿、运势、AI 报告等接口的集成工作。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-27
- **Last Updated**: 2026-07-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## apiworks-astro-java-sdk
Java SDK for ApiWorks 星盘 API([www.apiworks.com](https://www.apiworks.com),默认网关 `https://cloud.apiworks.com/open/astro`)。支持星盘、八字、紫微、奇门遁甲、大六壬、星宿、运势、AI 报告等能力(SDK **v1.1.0**)。
### 功能概览
- **客户端**: 同步 `AstroCloudClient`、异步 `AsyncAstroCloudClient`
- **星盘 (Chart)**:本命盘、天象盘、行运盘、比较盘、组合盘、三限/次限/法达/日弧等
- **星座 (Sign)**:我的星座、星座列表、星座配对
- **运势 (Scope)**:日/周/月/年运势
- **星象事件 (Event)**:行运星象事件
- **紫微斗数 (Ziwei)**:本命盘、排盘、含解读的排盘
- **星宿 (Naks)**:27 星宿关系
- **八字 (Bazi)**:命盘、流盘、合盘、总结
- **三式 (Sanshi)**:奇门遁甲、大六壬 / 金口诀
- **报告 (Report)**:桃花、周运、年运、合盘、财运等 AI 报告
- **多语言**:请求体 / 查询参数 `lang`,支持 `zh-Hans`(默认)、`zh-Hant`、`en`(部分接口)
请求模型位于 `com.apiworks.astro.model.requests.*`,响应模型位于 `com.apiworks.astro.model.responses.*`。
### 安装(Maven)
在你的 `pom.xml` 中添加:
```xml
com.apiworks.astro
apiworks-astro-java-sdk
1.1.0
```
### 快速开始(同步客户端)
```java
import com.apiworks.astro.AstroCloudClient;
import com.apiworks.astro.model.common.ApiResp;
import com.apiworks.astro.model.common.TimeAndLocation;
import com.apiworks.astro.model.requests.chart.SinglePointQry;
import com.apiworks.astro.model.responses.astro.AstroDataVo;
public class Demo {
public static void main(String[] args) {
AstroCloudClient client = new AstroCloudClient(
"your-app-id",
"your-app-key"
);
SinglePointQry qry = new SinglePointQry(
new TimeAndLocation("1990-08-14 12:00:00", 8, 116.4074, 39.9042)
);
qry.setLang("zh-Hans"); // 可选:zh-Hans | zh-Hant | en
ApiResp resp = client.chartNatal(qry);
if (resp.getCode() == 0 && resp.getData() != null) {
AstroDataVo data = resp.getData();
// 访问 data.getPlanet() / data.getHouse() 等字段
System.out.println(data);
}
}
}
```
### 奇门遁甲 / 大六壬
```java
import com.apiworks.astro.AstroCloudClient;
import com.apiworks.astro.model.requests.sanshi.LiurenQry;
import com.apiworks.astro.model.requests.sanshi.QimenQry;
import com.apiworks.astro.model.responses.sanshi.LiurenResultVo;
import com.apiworks.astro.model.responses.sanshi.QimenResultVo;
AstroCloudClient client = new AstroCloudClient("your-app-id", "your-app-key");
QimenQry qm = new QimenQry();
qm.setQryDt("1999-10-17 21:00:00");
qm.setTz(8);
qm.setType("shijia");
qm.setPaiMethod("zhuanpan");
qm.setJuMethod("chaibu");
qm.setLang("zh-Hans");
var qmResp = client.qimen(qm);
if (qmResp.getCode() == 0 && qmResp.getData() != null) {
QimenResultVo data = qmResp.getData();
System.out.println(data.getJuDisplay());
}
LiurenQry lr = new LiurenQry();
lr.setQryDt("1999-10-17 21:00:00");
lr.setTz(8);
lr.setType("daliuren");
lr.setGuiMethod("tian");
var lrResp = client.liuren(lr);
if (lrResp.getCode() == 0 && lrResp.getData() != null) {
LiurenResultVo data = lrResp.getData();
System.out.println(data.getYueJiangName());
}
```
> 不同产品线接口可能对应不同 App ID / App Key。需要多组凭证时,为每组各建一个 Client。
### 快速开始(异步客户端)
```java
import com.apiworks.astro.AsyncAstroCloudClient;
import com.apiworks.astro.model.common.ApiResp;
import com.apiworks.astro.model.common.TimeAndLocation;
import com.apiworks.astro.model.requests.chart.SinglePointQry;
import com.apiworks.astro.model.responses.astro.AstroDataVo;
import java.util.concurrent.CompletableFuture;
public class AsyncDemo {
public static void main(String[] args) throws Exception {
AsyncAstroCloudClient client = new AsyncAstroCloudClient(
"your-app-id",
"your-app-key"
);
SinglePointQry qry = new SinglePointQry(
new TimeAndLocation("1990-08-14 12:00:00", 8, 116.4074, 39.9042)
);
CompletableFuture> future = client.chartNatal(qry);
future.thenAccept(resp -> {
if (resp.getCode() == 0 && resp.getData() != null) {
System.out.println("planet size = " + resp.getData().getPlanet().size());
} else {
System.out.println("code=" + resp.getCode() + ", msg=" + resp.getMsg());
}
}).exceptionally(ex -> {
ex.printStackTrace();
return null;
});
// 简单等待异步完成
Thread.sleep(5000);
}
}
```
### 配置
```java
AstroCloudClient client = new AstroCloudClient(
"your-app-id",
"your-app-key",
"https://cloud.apiworks.com/open/astro", // 可选 baseUrl
30_000 // 可选超时时间(毫秒)
);
```
### API 响应格式
所有接口均返回 `ApiResp`:
- `code`:0 表示成功
- `msg`:错误信息/提示
- `data`:具体业务数据 VO
- `exeTime`:接口执行耗时(秒)
可以直接通过 IDE 补全访问数据字段。
### 验证 SDK 是否可用
- 在当前项目下执行:
```bash
mvn clean install
```
- 在你的业务项目中引入本 SDK,并用真实的 `appId/appKey` 调用一次 `chartNatal` 或 `baziNatal`,确认网络与凭证正常。
### 基于真实后端运行示例(examples)
本仓库 `examples` 下提供同步示例 `SyncExample` 与异步示例 `AsyncExample`,可按以下方式**基于真实后端**验证。
**1. 用 Maven 直接跑 main**
先设置环境变量,再执行对应 main 类:
```bash
export APIWORKS_APP_ID=你的AppId
export APIWORKS_APP_KEY=你的AppKey
# 同步示例(本命盘、行运、八字、日运势、紫微、星宿、奇门/六壬、桃花报告)
mvn exec:java@run-sync-example
# 异步示例(本命盘、八字→运势链式、紫微+桃花报告并行)
mvn exec:java@run-async-example
```
也可在 IDE 中直接运行 `SyncExample` 或 `AsyncExample` 的 `main` 方法,运行前在运行配置里设置上述两个环境变量。
**2. 用集成测试验证(真实后端)**
当且仅当环境变量 `APIWORKS_APP_ID`、`APIWORKS_APP_KEY` 均已设置时,会执行针对真实后端的集成测试:
- `SyncExampleRealBackendIT`:覆盖 SyncExample 中的本命盘、行运盘、八字、日运势、紫微、星宿、桃花报告等调用。
- `AsyncExampleRealBackendIT`:覆盖 AsyncExample 中的异步本命盘、八字→运势链式、紫微与桃花报告并行等调用。
```bash
export APIWORKS_APP_ID=你的AppId
export APIWORKS_APP_KEY=你的AppKey
mvn test
```
未设置上述环境变量时,这些集成测试会被跳过,不影响仅用 Mock 的单元测试。
### License
MIT