-
Автор темы
- #1
Всем привет. Данная статья рассчитана больше для новичков.
Часто ли вы встречали на сайтах кнопку "Для разработчиков" и тп? Чаще всего, это кнопка отсылает нас к различным документациям по работе с сайтом, API и тп. Что такое API? Простыми словами, это некоторый способ взаимодействия вашей программы и сайта. Чаще всего, взаимодействие осуществляется через запросы на какой-либо сайт, с указанием вашего APIKeys.
Итак, перед началом написания кода получим данный APIKeys.
1. Заходим на сайт "
2. Итак, ключ для подключения к сайту у нас есть. Что делаем дальше?
Открываем нашу любимую Visual Studio (у меня 2017 года) и создаём консольное приложение (по аналогии можно сделать так же с формой).
Далее, вводим все using, которые нам чуть позже пригодятся:
Далее создаём метод, который будет заходить на наш сайт, брать оттуда информацию и возвращать её нам:
(весь код, который будет далее написан, необходимо писать сюда)
Для начала подключимся к нашему api следующим запросом:
С помощью объекта Request мы создаём запрос по указанной ссылке. Откуда я взял эту ссылку и почему мы делаем запрос именно по ней? Открываем документацию и смотрим:
Что мы здесь видим? При подключении к данному сайту, он "читает" ID нашего города, а затем ApiKey. Для того, чтобы получать данные не только с одного и того же города, введём string переменную CountryID, которую чуть позже опишем (пусть пока что просто будет и всё)
&units=metric - преобразование температуры в градусы
Далее, вставляем следующий код:
С помощью метода POST (есть ещё GET. Советую почитать документацию об этом в интернете) и GetResponse мы возвращаем ответ на интернет запрос, который после мы преобразуем в WebResponse, присвоив его к новому значению response.
Чтож, далее считываем всё, что мы получили с сайта при помощи следующих строк:
(на самом деле, это можно записать вот так и результат будет точно таким же, но для понимания лучше разделить)
Данным кодом мы считываем данные с нашего объекта-переменной (response).
Оператор (не директива) using используем для очистки всех "ресурсов" и более правильного завершения работы с
Далее, закроем наше чтение с помощью команды Close():
Уже на данном этапе можно просмотреть, какие данные мы получили при помощи визуализатора json:
Таким образом, у нас должен получится следующий метод:
3. Подключим наш метод к Main
Вспоминаем про нашу переменную CountryID и перед методом Main вставляем:
Далее, у нас должен получится следующий код в методе Main:
С помощью Try-Catch проверяем, получен ли ответ от сервера по нашему запросу. Если выдаёт ошибку, выводим текст об этом. Также, можно немного изменить catch, добавив Exception ex:
В данном случае, у нас будет появляется информация о том, что пошло не так.
Итак, мы получили какие-то данные с сервера в JSON, но нам их нужно как-то вывести (если хотите посмотреть, как это выглядит, нажмите тоже самое, что на скриншоте:
Подключаем библиотеку Newtonsoft.Json через NuGet.
Создаём класс Weather.cs и вписываем в него следующий код:
Возвращаемся обратно в Program.cs и дописываем после Close()
1 строка - конвертируем из нашего Json объекта информацию в читабельный текст, который можно выводить и тп
2 строка - выводим информацию по данному городу.
3 строка - выводим погоду по данному городу
Обратите внимание!!!
Кароч, обращайте на это внимание
Таким образом, в конце должно получится:
2 класса (Program.cs и Weather.cs)
В Weather.cs -
В Program.cs -
Результат работы:
P.S. ID брать на сайте в адресной строке при открытии определённого города.
Например: https:// openweathermap .org/city/1486209 - Екатеринбург
https:// openweathermap .org/city/524901 - Москва
Ссылка на готовую программу:
Часто ли вы встречали на сайтах кнопку "Для разработчиков" и тп? Чаще всего, это кнопка отсылает нас к различным документациям по работе с сайтом, API и тп. Что такое API? Простыми словами, это некоторый способ взаимодействия вашей программы и сайта. Чаще всего, взаимодействие осуществляется через запросы на какой-либо сайт, с указанием вашего APIKeys.
Итак, перед началом написания кода получим данный APIKeys.
1. Заходим на сайт "
Пожалуйста, авторизуйтесь для просмотра ссылки.
", регистрируемся, переходим на вкладку API, тыкаем сверху Sign In и API keys. Далее, генерируем свой API keys
Пожалуйста, авторизуйтесь для просмотра ссылки.
(в бесплатной подписке данного сайта можно генерировать только 1 ключ. Если ключей у вас будет больше, сайт не будет их принимать. Удалите лишние)2. Итак, ключ для подключения к сайту у нас есть. Что делаем дальше?
Открываем нашу любимую Visual Studio (у меня 2017 года) и создаём консольное приложение (по аналогии можно сделать так же с формой).
Далее, вводим все using, которые нам чуть позже пригодятся:
C#:
using System;
using Newtonsoft.Json;
using System.IO;
using System.Net;
using System.Threading.Tasks;
C#:
public static async Task ConnectAsync()
{
}
Для начала подключимся к нашему api следующим запросом:
WebRequest request = WebRequest.Create("https://api.openweathermap.org/data/2.5/weather?id=" + CountryID + "&units=metric&APPID=APPID, КОТОРЫЙ ВЫ СГЕНЕРИРОВАЛИ");
С помощью объекта Request мы создаём запрос по указанной ссылке. Откуда я взял эту ссылку и почему мы делаем запрос именно по ней? Открываем документацию и смотрим:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Что мы здесь видим? При подключении к данному сайту, он "читает" ID нашего города, а затем ApiKey. Для того, чтобы получать данные не только с одного и того же города, введём string переменную CountryID, которую чуть позже опишем (пусть пока что просто будет и всё)
&units=metric - преобразование температуры в градусы
Далее, вставляем следующий код:
C#:
request.Method = "POST";
WebResponse response = await request.GetResponseAsync();
Чтож, далее считываем всё, что мы получили с сайта при помощи следующих строк:
C#:
using (Stream s = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(s))
{
answer = await reader.ReadToEndAsync();
}
}
C#:
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
answer = await reader.ReadToEndAsync();
}
Оператор (не директива) using используем для очистки всех "ресурсов" и более правильного завершения работы с
Пожалуйста, авторизуйтесь для просмотра ссылки.
(документация:
Пожалуйста, авторизуйтесь для просмотра ссылки.
)Далее, закроем наше чтение с помощью команды Close():
response.Close();
Уже на данном этапе можно просмотреть, какие данные мы получили при помощи визуализатора json:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Таким образом, у нас должен получится следующий метод:
C#:
public static async Task ConnectAsync()
{
WebRequest request = WebRequest.Create("https://api.openweathermap.org/data/2.5/weather?id=" + CountryID + "&units=metric&APPID=??????????");
request.Method = "POST";
WebResponse response = await request.GetResponseAsync();
string answer = string.Empty;
using (Stream s = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
answer = await reader.ReadToEndAsync();
}
}
response.Close();
}
Вспоминаем про нашу переменную CountryID и перед методом Main вставляем:
public static string CountryID;
Далее, у нас должен получится следующий код в методе Main:
C#:
static void Main(string[] args)
{
Console.Write("Введите ID города: ");
CountryID = Console.ReadLine();
try
{
ConnectAsync().Wait();
Console.WriteLine("Успешно");
}
catch
{
Console.Write("Город не найден или что-то пошло не так");
}
Console.ReadKey();
}
C#:
catch (Exception ex)
{
Console.WriteLine(ex);
Console.Write("Город не найден или что-то пошло не так");
}
Итак, мы получили какие-то данные с сервера в JSON, но нам их нужно как-то вывести (если хотите посмотреть, как это выглядит, нажмите тоже самое, что на скриншоте:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Подключаем библиотеку Newtonsoft.Json через NuGet.
Создаём класс Weather.cs и вписываем в него следующий код:
C#:
namespace Test
{
public class Temperatura
{
public double temp;
}
public class WeatherNow
{
public string main;
public string description;
}
public class WeatherResponse
{
public Temperatura main;
public string name;
public WeatherNow[] weather;
}
}
C#:
WeatherResponse response_global = JsonConvert.DeserializeObject<WeatherResponse>(answer);
Console.WriteLine("Средняя температура в данный момент в городе " + response_global.name + " = " + response_global.main.temp);
Console.WriteLine("Погода за окном: \n" + response_global.weather[0].main + "\n" + response_global.weather[0].description);
2 строка - выводим информацию по данному городу.
3 строка - выводим погоду по данному городу
Обратите внимание!!!
Пожалуйста, авторизуйтесь для просмотра ссылки.
Данные названия ОБЯЗАТЕЛЬНО должны совпадать. Иначе всё будет плохо, землетрясение, катаклизмы разные и тп.Кароч, обращайте на это внимание
Таким образом, в конце должно получится:
2 класса (Program.cs и Weather.cs)
В Weather.cs -
Пожалуйста, авторизуйтесь для просмотра ссылки.
В Program.cs -
Пожалуйста, авторизуйтесь для просмотра ссылки.
Результат работы:
Пожалуйста, авторизуйтесь для просмотра ссылки.
P.S. ID брать на сайте в адресной строке при открытии определённого города.
Например: https:// openweathermap .org/city/1486209 - Екатеринбург
https:// openweathermap .org/city/524901 - Москва
Ссылка на готовую программу:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Последнее редактирование: