Net Core Простой способ узнать температуру из Openweather API - PullRequest
0 голосов
/ 21 сентября 2018

Я только начал программировать.Какой простой способ измерить температуру и отобразить ее на экране?Я хочу написать простую программу.

static void Main()
{

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://api.openweathermap.org");
    var response = client.GetAsync($"/data/2.5/weather?q=London,UK&appid={APIKey}&units=metric");

    // What do I place here??


    Console.WriteLine(Main.Temp);


}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Используя ответ Джона:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {

        static async Task Main()
        {

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://api.openweathermap.org");
            var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60");

            // This line gives me error
            var stringResult = await response.Content.ReadAsStringAsync();

            var obj = JsonConvert.DeserializeObject<dynamic>(stringResult);
            var tmpDegreesF = Math.Round(((float)obj.main.temp * 9 / 5 - 459.67),2) ;
            Console.WriteLine($"Current temperature is {tmpDegreesF}°F");
            Console.ReadKey();
        }

     }
}

Найдите что-то похожее на netcoreapp2.1. Под этой строкой добавьте 7.1 - это даст команду VS и компилятору проверить ваш код / ​​скомпилировать ваш код в соответствии с правилами C # 7.1

Обновление. Из того, что я прочитал выше, я могу либо создать классы JSON для представления данных (самый простой способ - использовать меню «Правка | Вставить специальное»), либо десериализовать в динамический.

0 голосов
/ 21 сентября 2018

Здесь необходимо рассмотреть 2 понятия:

Асинхронное программирование

HttpClient.GetAsync() - это асинхронный метод.В документация Microsoft есть хороший пример работы с асинхронными API.

Но суть в том, что метод не возвращает данные из конечной точки.Возвращает «обещание»;то, что представляет данные, которые будут доступны в будущем.Поскольку ваша программа не выполняет никаких других действий, вы можете просто await получить результат, например, так:

var response = await client.GetAsync();

Но, конечно, вам сначала нужно сделать включающий метод async.В вашем случае измените сигнатуру вашей Main() функции на:

static async Task Main(string[] args)

JSON Deserialization

Конечная точка, которую вы вызываете, возвращает свои данные в формате JSON ,Поскольку вы только учитесь, я не стал бы пытаться найти реальную схему или клиентскую библиотеку.

Вместо этого вам нужно создать класс со свойствами для каждого из полей в ответе и десериализовать его, как показано здесь: https://www.newtonsoft.com/json/help/html/DeserializeObject.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...