获取的数据包括
- 当日农历日期
- 当年属相
- 当日宜、忌
- 当日节日,二十四节气、法定节假日等
- 调休和补班情况
-
数据渲染示例
来源:
https://www.baidu.com/s?ie=UTF-8&wd=%E5%85%AC%E7%AB%8B%E5%86%9C%E5%8E%86%E8%BD%AC%E6%8D%A2
-
API地址
- 可根据阳历年和月查询到当月所有日期的农历数据
- 2023年7.28日测试有效,数据可获取到2050年
- API地址:从百度搜索首页获取。
- year和month需要替换成需要查询的年月
https://opendata.baidu.com/data/inner?tn=reserved_all_res_tn&type=json&resource_id=52109&query=2023%E5%B9%B45%E6%9C%88&apiType=yearMonthData
-
json数据示例
{
"animal": "兔",
"avoid": "结婚.搬新房.祭祀.开光",
"cnDay": "二",
"day": "21",
"festivalInfoList": [
{
"baikeId": "16864",
"baikeName": "春分",
"baikeUrl": "https://baike.baidu.com/item/春分/16864",
"name": "春分"
},
{
"baikeId": "411884",
"baikeName": "世界睡眠日",
"baikeUrl": "https://baike.baidu.com/item/世界睡眠日/411884",
"name": "世界睡眠日"
}
],
"festivalList": "春分,世界睡眠日,世界儿歌日,世界森林日",
"gzDate": "戊寅",
"gzMonth": "乙卯",
"gzYear": "癸卯",
"isBigMonth": "1",
"lDate": "三十",
"lMonth": "二",
"lunarDate": "30",
"lunarMonth": "2",
"lunarYear": "2023",
"month": "3",
"oDate": "2023-03-20T16:00:00Z",
"suit": "合婚订婚.签订合同.交易.纳财.买衣服.订盟.买车.安床.安机械.纳畜.架马.安葬.造仓.拆卸.入殓.修坟.移柩.成人礼.补垣.成服.除服.伐木.立碑.破土.迁坟.塞穴.筑堤.合帐",
"term": "春分",
"timestamp": "1679328000",
"value": "世界睡眠日 世界儿歌日 世界森林日",
"status": "",// 1表示调休 2表示补班
"year": "2023",
"yjJumpUrl": "https://mobile.51wnl-cq.com/huangli_tab_h5/?posId=BDSS&STIME=2023-03-21",
"yj_from": "51wnl"
}
-
Dart 下载数据代码
import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:path_provider/path_provider.dart';
// 从百度API下载
void downFromBaidu() async {
print("downFromBaidu");
Map<String,Map> data = {};
Dio dio = Dio();
// int year = 1949;
// int yearEnd = 2123;
int year = 2051;
int yearEnd = 2051;
int month = 1;
Timer.periodic(const Duration(seconds: 3), (timer) async {
//
print("load:$year ---- $month");
Response r = await dio.get(
"https://opendata.baidu.com/data/inner?tn=reserved_all_res_tn&type=json&resource_id=52109&query=$year%E5%B9%B4$month%E6%9C%88&apiType=yearMonthData");
print("ResultCode:${r.data["ResultCode"]}");
// print("Result :${r.data}");
print("load:$month complete");
//
if(data["$year"] == null ){
data["$year"] = {};
}
dynamic monthData = r.data["Result"][0]["DisplayData"]["resultData"]["tplData"]["data"];
if(monthData != null){
List almanac = monthData["almanac"];
Map myAlmanac = {};
for (var element in almanac) {
if(int.parse(element["year"]) == year && int.parse(element["month"]) == month){
myAlmanac[element["day"]] = element;
}
}
monthData = myAlmanac;
}
//
data["$year"]!["$month"] = monthData;
if (month == 12) {
// 保存
String text = jsonEncode(data["$year"]);
final directory = await getApplicationDocumentsDirectory();
String path = '${directory.path}/calendar/$year.json';
print("path:$path");
final file = File(path);
await file.writeAsString(text);
//
month = 1;
data["$year"] = {};
year = year + 1;
//
} else {
month = month + 1;
}
if (year > yearEnd) {
timer.cancel();
}
});
}
-
抓取的数据ZIP
从API抓取了1949.1月-2050.12月的农历数据,如下:
暂时无法在飞书文档外展示此内容