import 'dart:convert'; import 'package:hive/hive.dart'; import 'package:pilipala/models/search/all.dart'; import 'package:pilipala/utils/wbi_sign.dart'; import '../models/bangumi/info.dart'; import '../models/common/search_type.dart'; import '../models/search/hot.dart'; import '../models/search/result.dart'; import '../models/search/suggest.dart'; import '../utils/storage.dart'; import 'index.dart'; class SearchHttp { static Box setting = GStrorage.setting; static Future hotSearchList() async { var res = await Request().get(Api.hotSearchList); if (res.data is String) { Map resultMap = json.decode(res.data); if (resultMap['code'] == 0) { return { 'status': true, 'data': HotSearchModel.fromJson(resultMap), }; } } else if (res.data is Map && res.data['code'] == 0) { return { 'status': true, 'data': HotSearchModel.fromJson(res.data), }; } return { 'status': false, 'data': [], 'msg': '请求错误 🙅', }; } // 获取搜索建议 static Future searchSuggest({required term}) async { var res = await Request().get(Api.searchSuggest, data: {'term': term, 'main_ver': 'v1', 'highlight': term}); if (res.data is String) { Map resultMap = json.decode(res.data); if (resultMap['code'] == 0) { if (resultMap['result'] is Map) { resultMap['result']['term'] = term; } return { 'status': true, 'data': resultMap['result'] is Map ? SearchSuggestModel.fromJson(resultMap['result']) : [], }; } else { return { 'status': false, 'data': [], 'msg': '请求错误 🙅', }; } } else { return { 'status': false, 'data': [], 'msg': '请求错误 🙅', }; } } // 分类搜索 static Future searchByType({ required SearchType searchType, required String keyword, required page, String? order, int? duration, int? tids, }) async { var reqData = { 'search_type': searchType.type, 'keyword': keyword, // 'order_sort': 0, // 'user_type': 0, 'page': page, if (order != null) 'order': order, if (duration != null) 'duration': duration, if (tids != null && tids != -1) 'tids': tids, }; var res = await Request().get(Api.searchByType, data: reqData); if (res.data['code'] == 0) { if (res.data['data']['numPages'] == 0) { // 我想返回数据,使得可以通过data.list 取值,结果为[] return {'status': true, 'data': Data()}; } Object data; try { switch (searchType) { case SearchType.video: List blackMidsList = setting.get(SettingBoxKey.blackMidsList, defaultValue: [-1]); for (var i in res.data['data']['result']) { // 屏蔽推广和拉黑用户 i['available'] = !blackMidsList.contains(i['mid']); } data = SearchVideoModel.fromJson(res.data['data']); break; case SearchType.live_room: data = SearchLiveModel.fromJson(res.data['data']); break; case SearchType.bili_user: data = SearchUserModel.fromJson(res.data['data']); break; case SearchType.media_bangumi: data = SearchMBangumiModel.fromJson(res.data['data']); break; case SearchType.article: data = SearchArticleModel.fromJson(res.data['data']); break; } return { 'status': true, 'data': data, }; } catch (err) { print(err); } } else { return { 'status': false, 'data': [], 'msg': res.data['message'], }; } } static Future ab2c({int? aid, String? bvid}) async { Map data = {}; if (aid != null) { data['aid'] = aid; } else if (bvid != null) { data['bvid'] = bvid; } final dynamic res = await Request().get(Api.ab2c, data: {...data}); if (res.data['code'] == 0) { return res.data['data'].first['cid']; } else { return -1; } } static Future> bangumiInfo( {int? seasonId, int? epId}) async { final Map data = {}; if (seasonId != null) { data['season_id'] = seasonId; } else if (epId != null) { data['ep_id'] = epId; } final dynamic res = await Request().get(Api.bangumiInfo, data: {...data}); if (res.data['code'] == 0) { return { 'status': true, 'data': BangumiInfoModel.fromJson(res.data['result']), }; } else { return { 'status': false, 'data': [], 'msg': '请求错误 🙅', }; } } static Future> ab2cWithPic( {int? aid, String? bvid}) async { Map data = {}; if (aid != null) { data['aid'] = aid; } else if (bvid != null) { data['bvid'] = bvid; } final dynamic res = await Request().get(Api.ab2c, data: {...data}); return { 'cid': res.data['data'].first['cid'], 'pic': res.data['data'].first['first_frame'], }; } static Future> searchCount( {required String keyword}) async { Map data = { 'keyword': keyword, 'web_location': 333.999, }; Map params = await WbiSign().makSign(data); final dynamic res = await Request().get(Api.searchCount, data: params); if (res.data['code'] == 0) { return { 'status': true, 'data': SearchAllModel.fromJson(res.data['data']), }; } else { return { 'status': false, 'data': [], 'msg': '请求错误 🙅', }; } } } class Data { List list; Data({this.list = const []}); }