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