(* Data from inaturalist.org *) maintainInaturalist := ( dirinaturalist = FileNameJoin[{dirdata, "inaturalist"}]; checkdir1[dirinaturalist]; names = {namesListSort, usedSynonyms /@ namesListSort} // Flatten // Union; cdata = {}; Do[ nameUL = ToLowerCase[StringReplace[name, " " -> "_"]]; nameP = StringReplace[name, " " -> "+"]; file = FileNameJoin[{dirinaturalist, nameUL <> ".m"}]; (* Saving data *) If[! FileExistsQ[file], url = "https://api.inaturalist.org/v1/taxa/autocomplete?q=" <> nameP <> "&per_page=10&locale=en-US&preferred_place_id="; data = Import[url, "JSON"]; totalResults = "total_results" /. data; results = "results" /. data; If[IntegerQ[totalResults] && Head[results] === List, Print["Saving data from inaturalist.org: ", name, " (", totalResults, ")"]; Save[file, data], Print["Error: Data from inaturalist.org: data are unreadable: ", name, " - data: ", data]; ], Clear[data]; Get[file]; totalResults = "total_results" /. data; results = "results" /. data; ]; inaturalist[name, "total_results"] = totalResults; inaturalist[name, "results"] = results, {name, names}]; (* Extracting data *) Do[ names = Prepend[usedSynonyms[name0], name0]; totalResults0 = inaturalist[name0, "total_results"]; results = Join @@ (inaturalist[#, "results"] & /@ names); mResults = Length[results]; If[mResults > 0, If[totalResults0 == 0, Print["inaturalist.org: adding data from used synonyms: ", name0, " - ", mResults]]; result0 = results[[1]]; matchlist = {"observations_count", "matched_term", "name", "iconic_taxon_name", "wikipedia_url", "rank", "english_common_name"}; varlist = StringReplace[#, "_" ~~ x_ :> ToUpperCase[x]] & /@ matchlist; Clear /@ varlist; varlist = ToExpression /@ varlist; Do[ varn = varlist[[n]]; matchn = matchlist[[n]]; value = matchn /. result0; Evaluate[varn] = If[value =!= matchn, value, "Undefined"]; noPrint[matchn, " -> ", varn]; inaturalist[name0, matchn] = varn, {n, Length[matchlist]}]; (* Creating a list of common names *) cname = inaturalist[name0, "english_common_name"]; If[Head[cname] === String && cname =!= "Undefined", cdata = Append[cdata, {name0, cname}]; ];, noPrint["Warning: No data from inaturalist.org: ", name0]; ], {name0, namesListSort}]; (* Writing list of common names to a file *) source = "inaturalist"; cdataSave[cdata, source]; (* see functions.m *) );