Advertisement
alexx876

Untitled

Apr 17th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.00 KB | None | 0 0
  1. // Copyright (c) 2012-2019 FuryLion Group. All Rights Reserved.
  2.  
  3. using System;
  4. using System.Net;
  5. using Newtonsoft.Json;
  6.  
  7. namespace Task4
  8. {
  9. public static class Download
  10. {
  11. private const string ApiKey = "6c38fe45acc1e93e30ffcb8236a28ce6";
  12.  
  13. public static void ApiRequest(string city, string method)
  14. {
  15. try
  16. {
  17. var url = $"https://api.openweathermap.org/data/2.5/{method}?q={city}&appid={ApiKey}";
  18. var request = (HttpWebRequest) WebRequest.Create(url);
  19. var response = (HttpWebResponse) request.GetResponse();
  20.  
  21. if (StatusCode(response))
  22. DownloadWeather(city, Program.PrintWeatherFiveDay, method);
  23. }
  24. catch (Exception e)
  25. {
  26. Console.WriteLine(e.Message);
  27. throw;
  28. }
  29. }
  30.  
  31. public static void CheckHttpOneDay(string city)
  32. {
  33. ApiRequest(city, "weather");
  34. }
  35.  
  36. public static void CheckHttpFiveDay(string city)
  37. {
  38. ApiRequest(city, "forecast");
  39. }
  40.  
  41. private static async void DownloadWeather(string city, Action<RootObject> received, string change)
  42. {
  43. try
  44. {
  45. var url = $"https://api.openweathermap.org/data/2.5/{change}?q={city}&appid={ApiKey}";
  46. var data = await new WebClient().DownloadStringTaskAsync(url);
  47. var jsonFormatterRootObject = JsonConvert.DeserializeObject<RootObject>(data);
  48.  
  49. received?.Invoke(jsonFormatterRootObject);
  50. if (change == "weather")
  51. Program.WeatherCache.Add(city,jsonFormatterRootObject);
  52. }
  53. catch (Exception e)
  54. {
  55. Console.WriteLine(e.Message);
  56. throw;
  57. }
  58. }
  59.  
  60. private static bool StatusCode(HttpWebResponse response)
  61. {
  62. switch (response.StatusCode)
  63. {
  64. case HttpStatusCode.Accepted:
  65. Console.WriteLine("Запрос принят для дальнейшей обработки.");
  66. break;
  67. case HttpStatusCode.Ambiguous:
  68. Console.WriteLine("Запрашиваемые данные имеют несколько представлени");
  69. break;
  70. case HttpStatusCode.BadGateway:
  71. Console.WriteLine("Промежуточный прокси-сервер получил неправильный ответ " +
  72. "от другого прокси или исходного сервера");
  73. break;
  74. case HttpStatusCode.BadRequest:
  75. Console.WriteLine("Запрос не может быть воспринят сервером");
  76. break;
  77. case HttpStatusCode.Conflict:
  78. Console.WriteLine("Запрос не может быть выполнен из-за конфликта на сервере");
  79. break;
  80. case HttpStatusCode.Continue:
  81. Console.WriteLine("Клиент может продолжать выполнять свой запрос");
  82. break;
  83. case HttpStatusCode.Created:
  84. Console.WriteLine("Запрос привел к созданию нового ресурса до того, как был послан ответ");
  85. break;
  86. case HttpStatusCode.ExpectationFailed:
  87. Console.WriteLine("Ожидание, заданное в заголовке Expect, не может быть выполнено сервером");
  88. break;
  89. case HttpStatusCode.Forbidden:
  90. Console.WriteLine("Сервер отказывается выполнять запрос");
  91. break;
  92. case HttpStatusCode.Found:
  93. Console.WriteLine("Запрашиваемые данные расположены по универсальному коду ресурса");
  94. break;
  95. case HttpStatusCode.GatewayTimeout:
  96. Console.WriteLine("Промежуточный прокси-сервер простаивает, ожидая ответа от другого " +
  97. "прокси или исходного сервера");
  98. break;
  99. case HttpStatusCode.Gone:
  100. Console.WriteLine("Запрашиваемый ресурс больше недоступен");
  101. break;
  102. case HttpStatusCode.HttpVersionNotSupported:
  103. Console.WriteLine("Запрашиваемая версия HTTP не поддерживается сервером");
  104. break;
  105. case HttpStatusCode.InternalServerError:
  106. Console.WriteLine("На сервере произошла общая ошибка");
  107. break;
  108. case HttpStatusCode.LengthRequired:
  109. Console.WriteLine("Требуемый заголовок Content-Length отсутствует");
  110. break;
  111. case HttpStatusCode.MethodNotAllowed:
  112. Console.WriteLine("Метод запроса (POST или GET) не разрешен для запрашиваемого ресурса");
  113. break;
  114. case HttpStatusCode.Moved:
  115. Console.WriteLine("Запрашиваемые данные перемещены по универсальному коду ресурса");
  116. break;
  117. case HttpStatusCode.NoContent:
  118. Console.WriteLine("Запрос успешно обработан и ответ является преднамеренно пустым");
  119. break;
  120. case HttpStatusCode.NonAuthoritativeInformation:
  121. Console.WriteLine("Возвращенные метаданные взяты из кэшированной копии вместо исходного" +
  122. " сервера и поэтому могут быть неверными");
  123. break;
  124. case HttpStatusCode.NotAcceptable:
  125. Console.WriteLine("Клиент показывает с помощью заголовков Accept, что он не принимает" +
  126. " любые из доступных представлений ресурса");
  127. break;
  128. case HttpStatusCode.NotFound:
  129. Console.WriteLine("Запрашиваемый ресурс отсутствует на сервере.");
  130. break;
  131. case HttpStatusCode.NotImplemented:
  132. Console.WriteLine("Сервер не поддерживает запрашиваемую функцию");
  133. break;
  134. case HttpStatusCode.NotModified:
  135. Console.WriteLine("Данные ресурса не пересылаются");
  136. break;
  137. case HttpStatusCode.OK:
  138. Console.WriteLine("Запрос завершился успешно и запрашиваемые данные находятся в ответе");
  139. return true;
  140.  
  141. case HttpStatusCode.PartialContent:
  142. Console.WriteLine("Ответ является частичным ответом на запрос ");
  143. break;
  144. case HttpStatusCode.PaymentRequired:
  145. Console.WriteLine("Зарезервирован для дальнейшего использования");
  146. break;
  147. case HttpStatusCode.PreconditionFailed:
  148. Console.WriteLine("");
  149. break;
  150. case HttpStatusCode.ProxyAuthenticationRequired:
  151. Console.WriteLine("Условие, установленное для этого запроса, не соблюдено и запрос " +
  152. "не может быть выполнен");
  153. break;
  154. case HttpStatusCode.RedirectKeepVerb:
  155. Console.WriteLine("Запрашиваемый прокси требует прохождения проверки подлинности");
  156. break;
  157. case HttpStatusCode.RedirectMethod:
  158. Console.WriteLine("Запрашиваемые данные расположены по универсальному коду ресурса");
  159. break;
  160. case HttpStatusCode.RequestEntityTooLarge:
  161. Console.WriteLine("Данные запроса расположены по универсальному коду ресурса");
  162. break;
  163. case HttpStatusCode.RequestedRangeNotSatisfiable:
  164. Console.WriteLine("Приводит к автоматическому перенаправлению клиента на универсальный " +
  165. "код ресурса ");
  166. break;
  167. case HttpStatusCode.RequestTimeout:
  168. Console.WriteLine("Клиент не послал запрос в пределах времени, когда запрос " +
  169. "ожидался сервером");
  170. break;
  171. case HttpStatusCode.RequestUriTooLong:
  172. Console.WriteLine("Универсальный код ресурса (URI) слишком длинный.");
  173. break;
  174. case HttpStatusCode.ResetContent:
  175. Console.WriteLine("Клиент должен сбросить (не перезагрузить) текущий ресурс");
  176. break;
  177. case HttpStatusCode.ServiceUnavailable:
  178. Console.WriteLine("Сервер временно недоступен, обычно из-за высокой нагрузки или " +
  179. "выполняемого обслуживания");
  180. break;
  181. case HttpStatusCode.SwitchingProtocols:
  182. Console.WriteLine("Изменяется протокол или версия протокола");
  183. break;
  184. case HttpStatusCode.Unauthorized:
  185. Console.WriteLine("Для запрашиваемого ресурса требуется аутентификация");
  186. break;
  187. case HttpStatusCode.UnsupportedMediaType:
  188. Console.WriteLine("Запрос этого типа не поддерживается");
  189. break;
  190. case HttpStatusCode.Unused:
  191. Console.WriteLine("Является предлагаемым расширением спецификации HTTP/1.1," +
  192. " которая полностью не определена");
  193. break;
  194. case HttpStatusCode.UpgradeRequired:
  195. Console.WriteLine("Клиент должен переключиться на другой протокол, например на TLS/1.0");
  196. break;
  197. case HttpStatusCode.UseProxy:
  198. Console.WriteLine("Запрос должен использовать прокси-сервер");
  199. break;
  200. }
  201.  
  202. return false;
  203. }
  204. }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement