detectLanguage method

  1. @override
Future<DetectLanguageResponse> detectLanguage(
  1. DetectLanguageRequest request
)

Implementation

@override
Future<DetectLanguageResponse> detectLanguage(
  DetectLanguageRequest request,
) async {
  List<TextDetection> detections = [];

  Map<String, String> body = {
    'Action': 'LanguageDetect',
    'Language': 'zh-CN',
    'Nonce': '${Random().nextInt(9999)}',
    'ProjectId': '0',
    'Region': 'ap-guangzhou',
    'SecretId': _optionSecretId,
    'Text': request.texts.first,
    'Timestamp': '${DateTime.now().millisecondsSinceEpoch ~/ 1000}',
    'Version': '2018-03-21',
  };

  List<String> keys = body.keys.toList();
  keys.sort((a, b) => a.compareTo(b));
  String query = keys.map((key) => '$key=${body[key]}').join('&');

  String endpoint = 'tmt.tencentcloudapi.com';
  String srcStr = 'POST$endpoint/?$query';
  String signature = _signature(_optionSecretKey, srcStr);

  body.putIfAbsent('Signature', () => signature);

  keys = body.keys.toList();
  keys.sort((a, b) => a.compareTo(b));
  query = keys.map((key) => '$key=${body[key]}').join('&');

  var response = await http.post(
    Uri.parse('https://$endpoint'),
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Accept': 'application/json',
    },
    body: body,
  );

  Map<String, dynamic> data = json.decode(utf8.decode(response.bodyBytes));

  detections = [
    TextDetection(
      detectedLanguage: data['Response']['Lang'],
      text: request.texts.first,
    ),
  ];

  return DetectLanguageResponse(
    detections: detections,
  );
}