mod: format code

This commit is contained in:
guozhigq
2024-01-07 12:58:24 +08:00
parent 7a71798055
commit fa8fd42e9a
104 changed files with 1077 additions and 1032 deletions

View File

@ -2,16 +2,15 @@
// https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/wbi.md
// import md5 from 'md5'
// import axios from 'axios'
import 'package:hive/hive.dart';
import 'package:pilipala/http/index.dart';
import 'package:crypto/crypto.dart';
import 'dart:convert';
import 'package:pilipala/utils/storage.dart';
import 'package:crypto/crypto.dart';
import 'package:hive/hive.dart';
import '../http/index.dart';
import 'storage.dart';
class WbiSign {
static Box localCache = GStrorage.localCache;
List mixinKeyEncTab = [
static Box<dynamic> localCache = GStrorage.localCache;
final List<int> mixinKeyEncTab = <int>[
46,
47,
18,
@ -78,52 +77,54 @@ class WbiSign {
52
];
// 对 imgKey 和 subKey 进行字符顺序打乱编码
String getMixinKey(orig) {
String getMixinKey(String orig) {
String temp = '';
for (int i = 0; i < mixinKeyEncTab.length; i++) {
temp += orig.split('')[mixinKeyEncTab[i]];
temp += orig.split('')[mixinKeyEncTab[i] as int];
}
return temp.substring(0, 32);
}
// 为请求参数进行 wbi 签名
Map<String, dynamic> encWbi(params, imgKey, subKey) {
String mixinKey = getMixinKey(imgKey + subKey);
DateTime now = DateTime.now();
int currTime = (now.millisecondsSinceEpoch / 1000).round();
RegExp chrFilter = RegExp(r"[!\'\(\)*]");
List query = [];
Map newParams = Map.from(params)..addAll({"wts": currTime}); // 添加 wts 字段
Map<String, dynamic> encWbi(
Map<String, dynamic> params, String imgKey, String subKey) {
final String mixinKey = getMixinKey(imgKey + subKey);
final DateTime now = DateTime.now();
final int currTime = (now.millisecondsSinceEpoch / 1000).round();
final RegExp chrFilter = RegExp(r"[!\'\(\)*]");
final List<String> query = <String>[];
final Map<String, dynamic> newParams = Map.from(params)
..addAll({"wts": currTime}); // 添加 wts 字段
// 按照 key 重排参数
List keys = newParams.keys.toList()..sort();
for (var i in keys) {
final List<String> keys = newParams.keys.toList()..sort();
for (String i in keys) {
query.add(
'${Uri.encodeComponent(i)}=${Uri.encodeComponent(newParams[i].toString().replaceAll(chrFilter, ''))}');
}
String queryStr = query.join('&');
String wbiSign =
final String queryStr = query.join('&');
final String wbiSign =
md5.convert(utf8.encode(queryStr + mixinKey)).toString(); // 计算 w_rid
return {'wts': currTime.toString(), 'w_rid': wbiSign};
}
// 获取最新的 img_key 和 sub_key 可以从缓存中获取
static Future<Map<String, dynamic>> getWbiKeys() async {
DateTime nowDate = DateTime.now();
final DateTime nowDate = DateTime.now();
if (localCache.get(LocalCacheKey.wbiKeys) != null &&
DateTime.fromMillisecondsSinceEpoch(
localCache.get(LocalCacheKey.timeStamp))
localCache.get(LocalCacheKey.timeStamp) as int)
.day ==
nowDate.day) {
Map cacheWbiKeys = localCache.get('wbiKeys');
final Map cacheWbiKeys = localCache.get('wbiKeys');
return Map<String, dynamic>.from(cacheWbiKeys);
}
var resp =
await Request().get('https://api.bilibili.com/x/web-interface/nav');
var jsonContent = resp.data['data'];
String imgUrl = jsonContent['wbi_img']['img_url'];
String subUrl = jsonContent['wbi_img']['sub_url'];
Map<String, dynamic> wbiKeys = {
final String imgUrl = jsonContent['wbi_img']['img_url'];
final String subUrl = jsonContent['wbi_img']['sub_url'];
final Map<String, dynamic> wbiKeys = {
'imgKey': imgUrl
.substring(imgUrl.lastIndexOf('/') + 1, imgUrl.length)
.split('.')[0],
@ -136,10 +137,10 @@ class WbiSign {
return wbiKeys;
}
makSign(Map<String, dynamic> params) async {
Future<Map<String, dynamic>> makSign(Map<String, dynamic> params) async {
// params 为需要加密的请求参数
Map<String, dynamic> wbiKeys = await getWbiKeys();
Map<String, dynamic> query = params
final Map<String, dynamic> wbiKeys = await getWbiKeys();
final Map<String, dynamic> query = params
..addAll(encWbi(params, wbiKeys['imgKey'], wbiKeys['subKey']));
return query;
}