首页 八字排盘 八字排盘示例代码 八字排盘[C#]

八字排盘示例代码C#

作者: 阅读数:1144 上传时间:2025-05-26

八字排盘

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using System.Web;

class Bazi
{
    private const string AppKey = "YOUR_APPKEY_HERE";

    public static async Task QueryAsync(string city, int year, int month, int day, int hour, int minute, int sex, int istaiyang, int islunar)
    {
        try
        {
            // 构建请求 URL
            string url = $"https://api.jisuapi.com/bazi/paipan?appkey={AppKey}&city={HttpUtility.UrlEncode(city)}&year={year}&month={month}&day={day}&hour={hour}&minute={minute}&sex={sex}&istaiyang={istaiyang}&islunar={islunar}";

            using var client = new HttpClient();
            // 发送 GET 请求
            var response = await client.GetAsync(url);
            // 确保请求成功
            response.EnsureSuccessStatusCode();

            // 读取响应内容
            var responseBody = await response.Content.ReadAsStringAsync();
            // 解析 JSON 数据
            var jsonarr = JObject.Parse(responseBody);

            // 检查状态码
            if (jsonarr["status"]?.Value() != 0)
            {
                Console.WriteLine(jsonarr["msg"]?.Value() ?? "未知错误");
                return;
            }

            var result = jsonarr["result"] as JObject;
            if (result == null)
            {
                Console.WriteLine("未获取到有效结果");
                return;
            }

            // 输出基本信息
            PrintValue(result, new[] { "year", "month", "day", "hour", "minute", "name", "city", "istaiyang", "lunaryear", "lunarmonth", "lunarday", "lunarhour", "animal", "yearganzhi" });

            // 输出节气信息
            PrintSection(result, "jieqiprev", "上一个节气:");
            PrintSection(result, "jieqinext", "下一个节气:");

            // 输出八字相关信息
            PrintArray(result, "bazi", $"{result["taiyuan"]} {result["minggong"]} {JoinArray(result["xunkong"])}");
            PrintArray(result, "qiyun", JoinArray(result["jiaoyun"]));
            PrintQianKunZao(result);
            PrintArray(result, "nayin");

            // 输出神煞信息
            PrintNestedArray(result, "shensha", "神煞信息");

            // 输出大运信息
            PrintDayun(result);

            // 输出流年信息
            PrintNestedArray(result, "liunian", "流年信息", "流年:");
        }
        catch (HttpRequestException ex)
        {
            Console.WriteLine($"请求出错: {ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生错误: {ex.Message}");
        }
    }

    private static void PrintValue(JObject obj, string[] keys)
    {
        foreach (var key in keys)
        {
            Console.Write(obj[key]?.Value() ?? "null ");
        }
        Console.WriteLine();
    }

    private static void PrintSection(JObject result, string key, string title)
    {
        Console.WriteLine(title);
        var section = result[key] as JObject;
        Console.WriteLine($"{section?["jieqiname"]?.Value() ?? "null"} {section?["date"]?.Value() ?? "null"}");
    }

    private static string JoinArray(JToken token)
    {
        if (token?.Type == JTokenType.Array)
        {
            var arr = (JArray)token;
            return string.Join(" ", arr);
        }
        return "null";
    }

    private static void PrintArray(JObject result, string key, string extra = "")
    {
        Console.WriteLine($"{JoinArray(result[key])} {extra}");
    }

    private static void PrintQianKunZao(JObject result)
    {
        var qiankunzao = result["qiankunzao"];
        if (qiankunzao?.Type == JTokenType.Array)
        {
            var arr = (JArray)qiankunzao;
            if (arr.Count >= 3 && arr[0]?.Type == JTokenType.Array && arr[1]?.Type == JTokenType.Array && arr[2]?.Type == JTokenType.Array)
            {
                Console.WriteLine($"{JoinArray(arr[0])} {JoinArray(arr[1])} {JoinArray(arr[2])}");
                return;
            }
        }
        Console.WriteLine("乾坤造信息不完整");
    }

    private static void PrintDayun(JObject result)
    {
        var dayun = result["dayun"] as JObject;
        if (dayun == null)
        {
            Console.WriteLine("大运信息缺失");
            return;
        }

        foreach (var key in new[] { "nayin", "shishen", "ganzhi", "sui" })
        {
            PrintArray(dayun, key);
        }
    }

    private static void PrintNestedArray(JObject result, string key, string errorMsg, string title = "")
    {
        if (!string.IsNullOrEmpty(title))
        {
            Console.WriteLine(title);
        }

        var arr = result[key];
        if (arr?.Type == JTokenType.Array)
        {
            foreach (var item in (JArray)arr)
            {
                if (item.Type == JTokenType.Array)
                {
                    Console.WriteLine(string.Join(" ", (JArray)item));
                }
                else
                {
                    Console.WriteLine("null");
                }
            }
        }
        else
        {
            Console.WriteLine($"{errorMsg} 缺失");
        }
    }
	
	public static async Task Main()
    {
        string city = "";
        int year = 2009;
        int month = 10;
        int day = 18;
        int hour = 2;
        int minute = 5;
        int sex = 1;
        int istaiyang = 0;
        int islunar = 0;

        await Bazi.QueryAsync(city, year, month, day, hour, minute, sex, istaiyang, islunar);
    }
}