fix: article requset

This commit is contained in:
bggRGjQaUbCoE
2024-10-08 21:20:43 +08:00
parent 03cc5cb4dd
commit da39483eed

View File

@@ -16,16 +16,16 @@ class HtmlHttp {
if (response.data is! String && response.data is! List<int>) { if (response.data is! String && response.data is! List<int>) {
return; return;
} }
if (response.data.contains('Redirecting to')) {
RegExp regex = RegExp(r'//([\w\.]+)/(\w+)/(\w+)');
Match match = regex.firstMatch(response.data)!;
String matchedString = match.group(0)!;
response = await Request().get(
'https:$matchedString/',
extra: {'ua': 'pc'},
);
}
try { try {
if (response.data.contains('Redirecting to')) {
RegExp regex = RegExp(r'//([\w\.]+)/(\w+)/(\w+)');
Match match = regex.firstMatch(response.data)!;
String matchedString = match.group(0)!;
response = await Request().get(
'https:$matchedString/',
extra: {'ua': 'pc'},
);
}
Document rootTree = parse(response.data); Document rootTree = parse(response.data);
// log(response.data.body.toString()); // log(response.data.body.toString());
Element body = rootTree.body!; Element body = rootTree.body!;
@@ -80,67 +80,72 @@ class HtmlHttp {
if (response.data is! String && response.data is! List<int>) { if (response.data is! String && response.data is! List<int>) {
return; return;
} }
Document rootTree = parse(response.data); try {
Element body = rootTree.body!; Document rootTree = parse(response.data);
Element appDom = body.querySelector('#app')!; Element body = rootTree.body!;
Element authorHeader = appDom.querySelector('.up-left')!; Element appDom = body.querySelector('#app')!;
// 头像 Element authorHeader = appDom.querySelector('.up-left')!;
// String avatar = // 头像
// authorHeader.querySelector('.bili-avatar-img')!.attributes['data-src']!; // String avatar =
// 正则寻找形如"author":{"mid":\d+,"name":".*","face":"xxxx"的匹配项 // authorHeader.querySelector('.bili-avatar-img')!.attributes['data-src']!;
String avatar = RegExp(r'"author":\{"mid":\d+?,"name":".+?","face":"(.+?)"') // 正则寻找形如"author":{"mid":\d+,"name":".*","face":"xxxx"的匹配项
.firstMatch(response.data)! String avatar =
.group(1)! RegExp(r'"author":\{"mid":\d+?,"name":".+?","face":"(.+?)"')
.replaceAll(r'\u002F', '/') .firstMatch(response.data)!
.split('@')[0]; .group(1)!
// print(avatar); .replaceAll(r'\u002F', '/')
String uname = authorHeader.querySelector('.up-name')!.text.trim(); .split('@')[0];
// 动态详情 // print(avatar);
Element opusDetail = appDom.querySelector('.article-content')!; String uname = authorHeader.querySelector('.up-name')!.text.trim();
// 发布时间 // 动态详情
// String updateTime = Element opusDetail = appDom.querySelector('.article-content')!;
// opusDetail.querySelector('.opus-module-author__pub__text')!.text; // 发布时间
// print(updateTime); // String updateTime =
// opusDetail.querySelector('.opus-module-author__pub__text')!.text;
// print(updateTime);
// //
dynamic opusContent = dynamic opusContent =
opusDetail.querySelector('#read-article-holder')?.innerHtml ?? ''; opusDetail.querySelector('#read-article-holder')?.innerHtml ?? '';
bool isJsonContent = false; bool isJsonContent = false;
if (opusContent.isEmpty) { if (opusContent.isEmpty) {
final regex = RegExp(r'window\.__INITIAL_STATE__\s*=\s*(\{.*?\});'); final regex = RegExp(r'window\.__INITIAL_STATE__\s*=\s*(\{.*?\});');
final match = regex.firstMatch(response.data); final match = regex.firstMatch(response.data);
if (match != null) { if (match != null) {
final jsonString = match.group(1); final jsonString = match.group(1);
if (jsonString != null) { if (jsonString != null) {
try {
opusContent = jsonDecode(jsonString)['readInfo']['content'];
try { try {
opusContent = (jsonDecode(opusContent)['ops'] as List) opusContent = jsonDecode(jsonString)['readInfo']['content'];
.map((item) => ArticleContentModel.fromJson(item)) try {
.toList(); opusContent = (jsonDecode(opusContent)['ops'] as List)
isJsonContent = true; .map((item) => ArticleContentModel.fromJson(item))
.toList();
isJsonContent = true;
} catch (e) {
print('second: $e');
}
} catch (e) { } catch (e) {
print('second: $e'); print('first: $e');
} }
} catch (e) {
print('first: $e');
} }
} }
} }
}
RegExp digitRegExp = RegExp(r'\d+'); RegExp digitRegExp = RegExp(r'\d+');
Iterable<Match> matches = digitRegExp.allMatches(id); Iterable<Match> matches = digitRegExp.allMatches(id);
String number = matches.first.group(0)!; String number = matches.first.group(0)!;
return { return {
'status': true, 'status': true,
'avatar': avatar, 'avatar': avatar,
'uname': uname, 'uname': uname,
'updateTime': '', 'updateTime': '',
'content': opusContent, 'content': opusContent,
'isJsonContent': isJsonContent, 'isJsonContent': isJsonContent,
'commentId': int.parse(number), 'commentId': int.parse(number),
}; };
} catch (e) {
print(e.toString());
}
} }
} }