parse_dom function

dynamic parse_dom({
  1. required String dom,
  2. required String app_id,
  3. required String url,
})

Implementation

parse_dom({required String dom, required String app_id, required String url}) {
  var matches = Regex.SCRIPT.allMatches(dom);
  var dataset = {};

  for (var match in matches) {
    var matchText = match.group(0);
    var key_match;
    var value_match;
    if (matchText != null) {
      key_match = Regex.KEY.allMatches(matchText);
      value_match = Regex.VALUE.allMatches(matchText);
    }
    if (key_match != null && value_match != null) {
      try {
        var key = key_match.first.group(1);

        var value = json.decode(value_match.first.group(1));
        dataset[key] = value;
        // ignore: empty_catches
      } catch (e) {}
    }
  }

  var result = {};
  for (var k in ElementSpecs.Detail.keys) {
    var spec = ElementSpecs.Detail[k];

    var content;
    if (spec is List) {
      for (ElementSpec sub_spec in spec) {
        content = sub_spec.extract_content(dataset);

        if (content != null) {
          result[k] = content;
          break;
        }
      }
    } else {
      content = spec.extract_content(dataset);
      result[k] = content;
    }
  }

  result["appId"] = app_id;
  result["url"] = url;

  return result;
}