1,下载源码:Astrolog Website
https://www.astrolog.org/astrolog.htm ---->Download files --->Astrolog 7.60 source code
2,上传服务器,解压,然后到源文件目录执行make(输入make命令)
遇见问题:
1)ImportError: libX11.so.6: cannot open shared object file: No such file or directory
执行yum命令:
sudo yum install libX11
sudo yum install libXext
2)Centos编译软件提示:X11/Xlib.h:没有那个文件或目录
执行yum命令:
sudo yum install libX*
编译成功后,你会得到一个astrolog执行文件
先试试水,执行命令,OK说明编译成功了:
./astrolog -qa 3 11 1993 10:10 -8 -116.40 39.90 -R0[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 22 25 28 31 34] -v -A3 -c 2
参数含义:
-qa 月 日 年 时间
-8 东八区
-116.40 东经116.40度 也可以116:24E
39.9 南纬39.9
-RO 需要显示的行星,这里是ID,可以用命令 ./astrolog -R1 -HO 查询所有支持的行星
-v 显示对象位置列表 (默认情况下选择)
-A3 回归黄道(好像是这么个意思)
-c 2 盘面宫位使用等宫制
具体使用参数可以看 astrolog.htm 文件,下载一个Windows版本,安装完在安装文件下
3,API接口制作
这里使用java ProcessBuilder进行调用,主要难度在于读懂astrolog的入参,建议打开Windows版本,结合astrolog.htm文件一起。
主要解析代码:
import java.io.*; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import org.jetbrains.annotations.NotNull; import com.cdslinks.astro.div.astrlog.domain.*; import com.cdslinks.astro.div.astrlog.rsp.AstroDrawV2Rsp; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import vip.xiaonuo.common.exception.CommonException; /** * * @author xpw * @version JDK 8 * @className CommandUtils * @date 2024/3/5 16:01 * @description 执行结果处理工具 */ @Slf4j public class CommandUtils { // 字符分割常量 private static final String SPLITE_STR = "$#$"; // 宫位提取正则 private static final Pattern HOUSE_PATTERN = Pattern.compile("House cusp.*");; // 宫位落星座提取正则 private static final Pattern HOUSE_SIGN_PATTERN = Pattern.compile("[a-zA-Z]+|\\d+");; // 宫位数据 private static final Map<String, String> HOUSE_MAP = new ImmutableMap.Builder<String, String>().put("1", "命宫").put("2", "财帛宫").put("3", "兄弟宫") .put("4", "田宅宫").put("5", "子女宫").put("6", "奴仆宫").put("7", "夫妻宫").put("8", "疾厄宫").put("9", "迁移宫") .put("10", "官禄宫").put("11", "福德宫").put("12", "玄秘宫").build(); // 星座数据 private static final Map<String, String> SIGN_MAP = new ImmutableMap.Builder<String, String>().put("1", "Aries").put("2", "Taurus").put("3", "Gemini") .put("4", "Cancer").put("5", "Leo").put("6", "Virgo").put("7", "Libra").put("8", "Scorpio") .put("9", "Sagittarius").put("10", "Capricorn").put("11", "Aquarius").put("12", "Pisces").build(); private static final Map<String, String> SIGN_SIMP_MAP = new ImmutableMap.Builder<String, String>().put("Ari", "1").put("Tau", "2") .put("Gem", "3").put("Can", "4").put("Leo", "5").put("Vir", "6").put("Lib", "7").put("Sco", "8") .put("Sag", "9").put("Cap", "10").put("Aqu", "11").put("Pis", "