Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Copyright (c) 2012-2019 FuryLion Group. All Rights Reserved.
- using System;
- using System.Net;
- using Newtonsoft.Json;
- namespace Task4
- {
- public static class Download
- {
- private const string ApiKey = "6c38fe45acc1e93e30ffcb8236a28ce6";
- public static void ApiRequest(string city, string method)
- {
- try
- {
- var url = $"https://api.openweathermap.org/data/2.5/{method}?q={city}&appid={ApiKey}";
- var request = (HttpWebRequest) WebRequest.Create(url);
- var response = (HttpWebResponse) request.GetResponse();
- if (StatusCode(response))
- DownloadWeather(city, Program.PrintWeatherFiveDay, method);
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- throw;
- }
- }
- public static void CheckHttpOneDay(string city)
- {
- ApiRequest(city, "weather");
- }
- public static void CheckHttpFiveDay(string city)
- {
- ApiRequest(city, "forecast");
- }
- private static async void DownloadWeather(string city, Action<RootObject> received, string change)
- {
- try
- {
- var url = $"https://api.openweathermap.org/data/2.5/{change}?q={city}&appid={ApiKey}";
- var data = await new WebClient().DownloadStringTaskAsync(url);
- var jsonFormatterRootObject = JsonConvert.DeserializeObject<RootObject>(data);
- received?.Invoke(jsonFormatterRootObject);
- if (change == "weather")
- Program.WeatherCache.Add(city,jsonFormatterRootObject);
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- throw;
- }
- }
- private static bool StatusCode(HttpWebResponse response)
- {
- switch (response.StatusCode)
- {
- case HttpStatusCode.Accepted:
- Console.WriteLine("Запрос принят для дальнейшей обработки.");
- break;
- case HttpStatusCode.Ambiguous:
- Console.WriteLine("Запрашиваемые данные имеют несколько представлени");
- break;
- case HttpStatusCode.BadGateway:
- Console.WriteLine("Промежуточный прокси-сервер получил неправильный ответ " +
- "от другого прокси или исходного сервера");
- break;
- case HttpStatusCode.BadRequest:
- Console.WriteLine("Запрос не может быть воспринят сервером");
- break;
- case HttpStatusCode.Conflict:
- Console.WriteLine("Запрос не может быть выполнен из-за конфликта на сервере");
- break;
- case HttpStatusCode.Continue:
- Console.WriteLine("Клиент может продолжать выполнять свой запрос");
- break;
- case HttpStatusCode.Created:
- Console.WriteLine("Запрос привел к созданию нового ресурса до того, как был послан ответ");
- break;
- case HttpStatusCode.ExpectationFailed:
- Console.WriteLine("Ожидание, заданное в заголовке Expect, не может быть выполнено сервером");
- break;
- case HttpStatusCode.Forbidden:
- Console.WriteLine("Сервер отказывается выполнять запрос");
- break;
- case HttpStatusCode.Found:
- Console.WriteLine("Запрашиваемые данные расположены по универсальному коду ресурса");
- break;
- case HttpStatusCode.GatewayTimeout:
- Console.WriteLine("Промежуточный прокси-сервер простаивает, ожидая ответа от другого " +
- "прокси или исходного сервера");
- break;
- case HttpStatusCode.Gone:
- Console.WriteLine("Запрашиваемый ресурс больше недоступен");
- break;
- case HttpStatusCode.HttpVersionNotSupported:
- Console.WriteLine("Запрашиваемая версия HTTP не поддерживается сервером");
- break;
- case HttpStatusCode.InternalServerError:
- Console.WriteLine("На сервере произошла общая ошибка");
- break;
- case HttpStatusCode.LengthRequired:
- Console.WriteLine("Требуемый заголовок Content-Length отсутствует");
- break;
- case HttpStatusCode.MethodNotAllowed:
- Console.WriteLine("Метод запроса (POST или GET) не разрешен для запрашиваемого ресурса");
- break;
- case HttpStatusCode.Moved:
- Console.WriteLine("Запрашиваемые данные перемещены по универсальному коду ресурса");
- break;
- case HttpStatusCode.NoContent:
- Console.WriteLine("Запрос успешно обработан и ответ является преднамеренно пустым");
- break;
- case HttpStatusCode.NonAuthoritativeInformation:
- Console.WriteLine("Возвращенные метаданные взяты из кэшированной копии вместо исходного" +
- " сервера и поэтому могут быть неверными");
- break;
- case HttpStatusCode.NotAcceptable:
- Console.WriteLine("Клиент показывает с помощью заголовков Accept, что он не принимает" +
- " любые из доступных представлений ресурса");
- break;
- case HttpStatusCode.NotFound:
- Console.WriteLine("Запрашиваемый ресурс отсутствует на сервере.");
- break;
- case HttpStatusCode.NotImplemented:
- Console.WriteLine("Сервер не поддерживает запрашиваемую функцию");
- break;
- case HttpStatusCode.NotModified:
- Console.WriteLine("Данные ресурса не пересылаются");
- break;
- case HttpStatusCode.OK:
- Console.WriteLine("Запрос завершился успешно и запрашиваемые данные находятся в ответе");
- return true;
- case HttpStatusCode.PartialContent:
- Console.WriteLine("Ответ является частичным ответом на запрос ");
- break;
- case HttpStatusCode.PaymentRequired:
- Console.WriteLine("Зарезервирован для дальнейшего использования");
- break;
- case HttpStatusCode.PreconditionFailed:
- Console.WriteLine("");
- break;
- case HttpStatusCode.ProxyAuthenticationRequired:
- Console.WriteLine("Условие, установленное для этого запроса, не соблюдено и запрос " +
- "не может быть выполнен");
- break;
- case HttpStatusCode.RedirectKeepVerb:
- Console.WriteLine("Запрашиваемый прокси требует прохождения проверки подлинности");
- break;
- case HttpStatusCode.RedirectMethod:
- Console.WriteLine("Запрашиваемые данные расположены по универсальному коду ресурса");
- break;
- case HttpStatusCode.RequestEntityTooLarge:
- Console.WriteLine("Данные запроса расположены по универсальному коду ресурса");
- break;
- case HttpStatusCode.RequestedRangeNotSatisfiable:
- Console.WriteLine("Приводит к автоматическому перенаправлению клиента на универсальный " +
- "код ресурса ");
- break;
- case HttpStatusCode.RequestTimeout:
- Console.WriteLine("Клиент не послал запрос в пределах времени, когда запрос " +
- "ожидался сервером");
- break;
- case HttpStatusCode.RequestUriTooLong:
- Console.WriteLine("Универсальный код ресурса (URI) слишком длинный.");
- break;
- case HttpStatusCode.ResetContent:
- Console.WriteLine("Клиент должен сбросить (не перезагрузить) текущий ресурс");
- break;
- case HttpStatusCode.ServiceUnavailable:
- Console.WriteLine("Сервер временно недоступен, обычно из-за высокой нагрузки или " +
- "выполняемого обслуживания");
- break;
- case HttpStatusCode.SwitchingProtocols:
- Console.WriteLine("Изменяется протокол или версия протокола");
- break;
- case HttpStatusCode.Unauthorized:
- Console.WriteLine("Для запрашиваемого ресурса требуется аутентификация");
- break;
- case HttpStatusCode.UnsupportedMediaType:
- Console.WriteLine("Запрос этого типа не поддерживается");
- break;
- case HttpStatusCode.Unused:
- Console.WriteLine("Является предлагаемым расширением спецификации HTTP/1.1," +
- " которая полностью не определена");
- break;
- case HttpStatusCode.UpgradeRequired:
- Console.WriteLine("Клиент должен переключиться на другой протокол, например на TLS/1.0");
- break;
- case HttpStatusCode.UseProxy:
- Console.WriteLine("Запрос должен использовать прокси-сервер");
- break;
- }
- return false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement