|
|
|
|
@ -25,15 +25,18 @@ class _ReportsScreenState extends State<ReportsScreen> {
|
|
|
|
|
classifyTimers().then((value) => persentMap = value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 计时器分类统计
|
|
|
|
|
* @return 计时器分类统计结果
|
|
|
|
|
*/
|
|
|
|
|
Future<Map<String, num>> classifyTimers() async {
|
|
|
|
|
var timers = await TimerEntryDatabase.instance.readAll();
|
|
|
|
|
Map<String, num> persentMap = {};
|
|
|
|
|
var timers = await TimerEntryDatabase.instance.readAll(); // 读取数据库中的所有计时器
|
|
|
|
|
Map<String, num> presentMap = {}; // 记录各种类别所占的百分比
|
|
|
|
|
for (var timer in timers) {
|
|
|
|
|
var response = await postData(timer.name);
|
|
|
|
|
// 睡眠0.5秒,防止百度API调用频率过高
|
|
|
|
|
await Future.delayed(Duration(milliseconds: 500));
|
|
|
|
|
var response = await postData(timer.name); // 调用百度API,对计时器名称进行分类
|
|
|
|
|
await Future.delayed(Duration(milliseconds: 500)); // 睡眠0.5秒,防止百度API调用频率过高导致调用失败
|
|
|
|
|
var classification =
|
|
|
|
|
jsonDecode(response.body)['item']['lv1_tag_list'][0]['tag'];
|
|
|
|
|
jsonDecode(response.body)['item']['lv1_tag_list'][0]['tag']; // 处理API返回的分类信息
|
|
|
|
|
// 解决百度API返回的分类中文乱码问题,转换为ISO-8859-1编码
|
|
|
|
|
classification = utf8.decode(classification.runes.toList());
|
|
|
|
|
persentMap[classification] = timer.stopwatch!.elapsed.inSeconds;
|
|
|
|
|
@ -42,14 +45,17 @@ class _ReportsScreenState extends State<ReportsScreen> {
|
|
|
|
|
return persentMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 调用百度API进行分类
|
|
|
|
|
/**
|
|
|
|
|
* 调用百度API,对计时器名称进行分类
|
|
|
|
|
* @param name 计时器名称
|
|
|
|
|
* @return 百度API返回的分类信息
|
|
|
|
|
*/
|
|
|
|
|
Future<http.Response> postData(String name) async {
|
|
|
|
|
// ignore: non_constant_identifier_names
|
|
|
|
|
var API_KEY = "YGxSMNdWKO5Gpt12dNVY2nGq";
|
|
|
|
|
// ignore: non_constant_identifier_names
|
|
|
|
|
var SECRET_KEY = "G5NBDTiRPhsBqMi1Od0XZw4RSMlFgeek";
|
|
|
|
|
var accessToken = await getAccessToken(API_KEY, SECRET_KEY);
|
|
|
|
|
var response = await http.post(
|
|
|
|
|
String API_KEY = "YGxSMNdWKO5Gpt12dNVY2nGq"; // 百度API的API Key
|
|
|
|
|
String SECRET_KEY = "G5NBDTiRPhsBqMi1Od0XZw4RSMlFgeek"; // 百度API的Secret Key
|
|
|
|
|
String accessToken =
|
|
|
|
|
await getAccessToken(API_KEY, SECRET_KEY); // 获取百度API的access token
|
|
|
|
|
http.Response response = await http.post(
|
|
|
|
|
Uri.parse(
|
|
|
|
|
'https://aip.baidubce.com/rpc/2.0/nlp/v1/topic?charset=UTF-8&access_token=$accessToken'),
|
|
|
|
|
headers: {
|
|
|
|
|
@ -60,11 +66,10 @@ class _ReportsScreenState extends State<ReportsScreen> {
|
|
|
|
|
"title": name,
|
|
|
|
|
"content": name,
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
return response;
|
|
|
|
|
); // 调用百度API
|
|
|
|
|
return response; // 返回百度API的响应
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ignore: non_constant_identifier_names
|
|
|
|
|
Future<String> getAccessToken(String API_KEY, String SECRET_KEY) async {
|
|
|
|
|
var response = await http.post(
|
|
|
|
|
Uri.parse('https://aip.baidubce.com/oauth/2.0/token'),
|
|
|
|
|
|