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);
}
}