public static WolframTaxonomyData GetInstance(WolframResponseDto dto)
        {
            if (dto == null || dto.Success == null || dto.Success.ToLower() != "true")
            {
                return(NULL);
            }

            const string pattern = "(Entity)(\\[.*?\\])";
            var          matches = Regex.Matches(dto.Result, pattern);

            var results = (from Match match in matches
                           select match.Groups[2].ToString()
                           into arrayString
                           select JsonConvert.DeserializeObject <String[]>(arrayString)
                           into entityResult
                           select entityResult.Length > 1 ? entityResult[1] : ""
                           into rawValue
                           where rawValue.Contains(":")
                           select rawValue.Split(':')).
                          ToDictionary(splitResult => splitResult[0].ToLower().Trim(), splitResult => splitResult[1].Trim());

            var kingdom = results.ContainsKey("kingdom") ? results["kingdom"] : "";
            var phylum  = results.ContainsKey("phylum") ? results["phylum"] : "";
            var tclass  = results.ContainsKey("class") ? results["class"] : "";
            var order   = results.ContainsKey("order") ? results["order"] : "";
            var family  = results.ContainsKey("family") ? results["family"] : "";
            var genus   = results.ContainsKey("genus") ? results["genus"] : "";
            //For some reason, Wolfram encodes species names as Genus + Species combined. Derp!
            var species = results.ContainsKey("species") ? results["species"].Replace(genus, "") : "";

            return(GetInstance(kingdom, phylum, tclass, order, family, genus, species));
        }
Ejemplo n.º 2
0
        public static WolframCommonNameData GetInstance(WolframResponseDto dto)
        {
            if (dto == null || dto.Success == null || dto.Success.ToLower() != "true")
            {
                return(NULL);
            }

            var rawName = dto.Result.Replace("\"", "");
            var name    = String.Equals("Missing[NotAvailable]", rawName, StringComparison.InvariantCultureIgnoreCase) ? "" : rawName;

            return(GetInstance(name));
        }