Refactor member page (#3)

* refactor: member page

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip
This commit is contained in:
bggRGjQaUbCoE
2024-10-17 11:18:59 +08:00
committed by GitHub
parent 270bf0a4b6
commit f77088b870
205 changed files with 70072 additions and 119 deletions

View File

@@ -283,6 +283,25 @@ class Api {
// https://api.bilibili.com/x/space/wbi/acc/info?mid=503427686&token=&platform=web&web_location=1550101&w_rid=d709892496ce93e3d94d6d37c95bde91&wts=1689301482
static const String memberInfo = '/x/space/wbi/acc/info';
static const String space = '${HttpString.appBaseUrl}/x/v2/space';
static const String spaceArchive =
'${HttpString.appBaseUrl}/x/v2/space/archive/cursor';
static const String spaceChargingArchive =
'${HttpString.appBaseUrl}/x/v2/space/archive/charging';
static const String spaceSeason =
'${HttpString.appBaseUrl}/x/v2/space/season/videos';
static const String spaceSeries =
'${HttpString.appBaseUrl}/x/v2/space/series';
static const String spaceBangumi =
'${HttpString.appBaseUrl}/x/v2/space/bangumi';
static const String spaceFav = '/x/v3/fav/folder/space';
// 用户名片信息
static const String memberCardInfo = '/x/web-interface/card';

View File

@@ -211,7 +211,7 @@ class LoginHttp {
String passwordEncrypted =
Encrypter(RSA(publicKey: publicKey)).encrypt(salt + password).base64;
Map<String, dynamic> data = {
Map<String, String> data = {
'appkey': Constants.appKey,
'bili_local_id': deviceId,
'build': '1462100',
@@ -288,7 +288,7 @@ class LoginHttp {
required String key,
}) async {
dynamic publicKey = RSAKeyParser().parse(key);
Map<String, dynamic> data = {
Map<String, String> data = {
'appkey': Constants.appKey,
'bili_local_id': deviceId,
'build': '1462100',

View File

@@ -1,8 +1,14 @@
import 'package:PiliPalaX/common/constants.dart';
import 'package:PiliPalaX/grpc/grpc_repo.dart';
import 'package:PiliPalaX/http/constants.dart';
import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/models/space/data.dart';
import 'package:PiliPalaX/models/space_fav/space_fav.dart';
import 'package:PiliPalaX/pages/member/new/content/member_contribute/member_contribute.dart'
show ContributeType;
import 'package:PiliPalaX/utils/storage.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart' hide FormData;
import '../models/dynamics/result.dart';
import '../models/follow/result.dart';
@@ -11,6 +17,7 @@ import '../models/member/coin.dart';
import '../models/member/info.dart';
import '../models/member/seasons.dart';
import '../models/member/tags.dart';
import '../models/space_archive/data.dart' as archive;
import '../utils/utils.dart';
import '../utils/wbi_sign.dart';
import 'index.dart';
@@ -39,11 +46,184 @@ class MemberHttp {
};
}
static Future<LoadingState> spaceDynamic({
required int mid,
required int page,
}) async {
dynamic result = await GrpcRepo.dynSpace(uid: mid, page: page);
if (result['status']) {
return LoadingState.success(result['data']);
} else {
return LoadingState.error(result['msg']);
}
}
static Future<LoadingState> spaceFav({
required int mid,
}) async {
String? accessKey = GStorage.localCache
.get(LocalCacheKey.accessKey, defaultValue: {})['value'];
Map<String, String> data = {
if (accessKey != null) 'access_key': accessKey,
'appkey': Constants.appKey,
'build': '1462100',
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'ts': (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(),
'up_mid': mid.toString(),
};
String sign = Utils.appSign(
data,
Constants.appKey,
Constants.appSec,
);
data['sign'] = sign;
int? _mid = GStorage.userInfo.get('userInfoCache')?.mid;
dynamic res = await Request().get(
Api.spaceFav,
data: data,
options: Options(
headers: {
'env': 'prod',
'app-key': 'android_hd',
'x-bili-mid': _mid,
'bili-http-engine': 'cronet',
'user-agent': Constants.userAgent,
},
),
);
if (res.data['code'] == 0) {
return LoadingState.success(SpaceFav.fromJson(res.data).data);
} else {
return LoadingState.error(res.data['message']);
}
}
static Future<LoadingState> spaceArchive({
required ContributeType type,
required int? mid,
String? aid,
String? order,
String? sort,
int? pn,
int? next,
int? seasonId,
int? seriesId,
}) async {
String? accessKey = GStorage.localCache
.get(LocalCacheKey.accessKey, defaultValue: {})['value'];
Map<String, String> data = {
if (accessKey != null) 'access_key': accessKey,
if (aid != null) 'aid': aid.toString(),
'appkey': Constants.appKey,
'build': '1462100',
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'ps': '20',
if (pn != null) 'pn': pn.toString(),
if (next != null) 'next': next.toString(),
if (seasonId != null) 'season_id': seasonId.toString(),
if (seriesId != null) 'series_id': seriesId.toString(),
'qn': type == ContributeType.video ? '80' : '32',
if (order != null) 'order': order,
if (sort != null) 'sort': sort,
'statistics': Constants.statistics,
'ts': (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(),
'vmid': mid.toString(),
};
String sign = Utils.appSign(
data,
Constants.appKey,
Constants.appSec,
);
data['sign'] = sign;
int? _mid = GStorage.userInfo.get('userInfoCache')?.mid;
dynamic res = await Request().get(
type == ContributeType.video
? Api.spaceArchive
: type == ContributeType.charging
? Api.spaceChargingArchive
: type == ContributeType.season
? Api.spaceSeason
: type == ContributeType.series
? Api.spaceSeries
: Api.spaceBangumi,
data: data,
options: Options(
headers: {
'env': 'prod',
'app-key': 'android_hd',
'x-bili-mid': _mid,
'bili-http-engine': 'cronet',
'user-agent': Constants.userAgent,
},
),
);
if (res.data['code'] == 0) {
return LoadingState.success(archive.Data.fromJson(res.data['data']));
} else {
return LoadingState.error(res.data['message']);
}
}
static Future<LoadingState> space({
int? mid,
}) async {
String? accessKey = GStorage.localCache
.get(LocalCacheKey.accessKey, defaultValue: {})['value'];
Map<String, String> data = {
if (accessKey != null) 'access_key': accessKey,
'appkey': Constants.appKey,
'build': '1462100',
'c_locale': 'zh_CN',
'channel': 'yingyongbao',
'mobi_app': 'android_hd',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statistics,
'ts': (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(),
'vmid': mid.toString(),
};
String sign = Utils.appSign(
data,
Constants.appKey,
Constants.appSec,
);
data['sign'] = sign;
int? _mid = GStorage.userInfo.get('userInfoCache')?.mid;
dynamic res = await Request().get(
Api.space,
data: data,
options: Options(
headers: {
'env': 'prod',
'app-key': 'android_hd',
'x-bili-mid': _mid,
'bili-http-engine': 'cronet',
'user-agent': Constants.userAgent,
},
),
);
if (res.data['code'] == 0) {
return LoadingState.success(Data.fromJson(res.data['data']));
} else {
return LoadingState.error(res.data['message']);
}
}
static Future memberInfo({
int? mid,
String token = '',
dynamic wwebid,
}) async {
space(mid: mid);
Map params = await WbiSign().makSign({
'mid': mid,
'token': token,

View File

@@ -79,7 +79,7 @@ class VideoHttp {
// 添加额外的loginState变量模拟未登录状态
static Future<LoadingState> rcmdVideoListApp(
{bool loginStatus = true, required int freshIdx}) async {
var data = {
Map<String, String> data = {
'access_key': loginStatus
? (localCache
.get(LocalCacheKey.accessKey, defaultValue: {})['value'] ??