public string getDataFromApis(string zipcode)
        {
            UrlCreator urlCreator = new UrlCreator();
            JsonParser parser     = new JsonParser();

            JObject jsonWeather;

            try
            {
                jsonWeather = getJsonWeather(urlCreator, zipcode);
            }
            catch (WebException)
            {
                return("null");
            }

            JToken temp     = parser.getTemperature(jsonWeather);
            JToken cityName = parser.getCityName(jsonWeather);

            JObject jsonTimezone = getJsonTimezone(urlCreator, parser, jsonWeather);
            JToken  timezoneName = parser.getTimezoneName(jsonTimezone);

            DateTime dateTime = DateTime.Now;

            return(parser.createJSON(temp, cityName, timezoneName, dateTime));
        }
        private JObject getJsonWeather(UrlCreator urlCreator, string zipcode)
        {
            string     weatherUrlTemplate = urlCreator.getWeatherUrlTemplate(zipcode);
            WebRequest req = WebRequest.Create(weatherUrlTemplate);

            using Stream response     = req.GetResponse().GetResponseStream();
            using StreamReader reader = new StreamReader(response);
            var json = reader.ReadToEnd();

            return(JObject.Parse(json));
        }
        private JObject getJsonTimezone(UrlCreator urlCreator, JsonParser parser, JObject jsonWeather)
        {
            string     location            = $"{parser.getLat(jsonWeather)},{parser.getLon(jsonWeather)}";
            string     timestamp           = parser.getTimestamp(jsonWeather);
            string     timezoneUrlTemplate = urlCreator.getTimezoneUrlTemplate(location, timestamp);
            WebRequest req = WebRequest.Create(timezoneUrlTemplate);

            using Stream response     = req.GetResponse().GetResponseStream();
            using StreamReader reader = new StreamReader(response);
            var json = reader.ReadToEnd();

            return(JObject.Parse(json));
        }