Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486

Парсинг погоды от Яндекс

14.08.2019, 16:02. Показов 10989. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет хочу JSON парсить только вот почему то не выходит Newtonsoft не предлагать.
со своего сервера JSON парсит а от Яндекса почему то не хочет.

вот класс который десериализует

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[DataContract (Name ="fact")]
    public class Fact 
    {
        [DataMember(Name = "temp")]
        public byte Temperature { get; set; }
        [DataMember(Name = "icon")]
        public string ImageSVG { get; set; }
        [DataMember(Name = "wind_speed")]
        public byte WindSpeed { get; set; }
        [DataMember(Name = "pressure_mm")]
        public short AtmospherePressure { get; set; }
        [DataMember(Name = "humidity")]
        public byte HumidityPget { get; set; }
    } 
 
    [DataContract (Name ="forecast")]
    public class Forecast
    {
        [DataMember(Name ="parts")]
        public Parts Parts { get; set; }
    }
    public class Parts
    {
        public string PartsName { get; set; }
    }

тут происходит подключение к API
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   Fact weather = new Fact();
                WebRequest request = WebRequest.Create("https://api.weather.yandex.ru/v1/informers?lat=32.0879122&lon=34.7272058");
                request.Headers.Add("X-Yandex-API-Key: Ключь");
                WebResponse response = request.GetResponse();
                using(Stream stream = response.GetResponseStream())
                {
                    using(StreamReader reader = new StreamReader(stream))
                    {
                       string line = reader.ReadToEnd();
                      
                        DataContractJsonSerializer j = new DataContractJsonSerializer(typeof(Fact));
                        weather = j.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(line))) as Fact;
                       
                    }
                }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2019, 16:02
Ответы с готовыми решениями:

Парсинг погоды с Gismeteo
Здравствуйте. Помогите правильно и рационально спарсить погоду с xml версии Gismeteo (http://informer.gismeteo.ua/xml/33393_1.xml) ...

Парсинг XML файла из Яндекс Метрики
Всем привет. Пишу, ради практики, небольшую прогу, которая будет отображать данные из щетчиков Яндекс Метрики. Уже перерил кучу примеров,...

Парсинг погоды с рамблера.
Идея такая, есть страница, хочу, что бы при входе инфомация о погоде бралась с рамблера и вставлялась в мою страничку. Причем на Рамблере...

13
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
14.08.2019, 16:08
Цитата Сообщение от FerrariF70 Посмотреть сообщение
Newtonsoft не предлагать
,
а System...JavascriptSerialiser, использовать разрешается?
и чем вам не угодил Newtonsoft?
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
14.08.2019, 16:12
А где главный класс? формат ответа не равен формату класса Fact.
нету класса который соответствует этому:
now Время сервера в формате Unixtime. Число
now_dt Время сервера в UTC. Строка
info Объект информации о населенном пункте. Объект
fact Объект фактической информации о погоде. Объект
forecast Объект прогнозной информации о погоде. Объект
Добавлено через 2 минуты
p.s. При этом откуда у Вас взялся byte? если по документации там везде число/строка/логическая/объект?
0
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486
14.08.2019, 16:14  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
и чем вам не угодил Newtonsoft?
просто изначально начал использовать
System.Runtime.Serialization.Json;
System.Runtime.Serialization
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
14.08.2019, 16:16
Цитата Сообщение от FerrariF70 Посмотреть сообщение
просто изначально начал использовать
понятно, а можно пример ответа от сервера?
1
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
14.08.2019, 16:18
Лучший ответ Сообщение было отмечено FerrariF70 как решение

Решение

FerrariF70, У Вас все классы не соответствуют json который приходит, примерно такие надо:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public class Root
{
    public long Now { get; set; }
    public DateTimeOffset NowDt { get; set; }
    public Info Info { get; set; }
    public Fact Fact { get; set; }
    public Forecast Forecast { get; set; }
}
 
public class Fact
{
    public long Temp { get; set; }
    public long FeelsLike { get; set; }
    public string Icon { get; set; }
    public string Condition { get; set; }
    public long WindSpeed { get; set; }
    public double WindGust { get; set; }
    public string WindDir { get; set; }
    public long PressureMm { get; set; }
    public long PressurePa { get; set; }
    public long Humidity { get; set; }
    public string Daytime { get; set; }
    public bool Polar { get; set; }
    public string Season { get; set; }
    public long ObsTime { get; set; }
}
 
public class Forecast
{
    public DateTimeOffset Date { get; set; }
    public long DateTs { get; set; }
    public long Week { get; set; }
    public string Sunrise { get; set; }
    public string Sunset { get; set; }
    public long MoonCode { get; set; }
    public string MoonText { get; set; }
    public List<Part> Parts { get; set; }
}
 
public class Part
{
    public string PartName { get; set; }
    public long TempMin { get; set; }
    public long TempMax { get; set; }
    public long TempAvg { get; set; }
    public long FeelsLike { get; set; }
    public string Icon { get; set; }
    public string Condition { get; set; }
    public string Daytime { get; set; }
    public bool Polar { get; set; }
    public double WindSpeed { get; set; }
    public long WindGust { get; set; }
    public string WindDir { get; set; }
    public long PressureMm { get; set; }
    public long PressurePa { get; set; }
    public long Humidity { get; set; }
    public long PrecMm { get; set; }
    public long PrecPeriod { get; set; }
    public long PrecProb { get; set; }
}
 
public class Info
{
    public double Lat { get; set; }
    public double Lon { get; set; }
    public Uri Url { get; set; }
}
п.с. генерировал классы автоматом по json могут быть косяки
1
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486
14.08.2019, 16:22  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
А где главный класс?
Вы имеете введу что мне прям весь ответ надо прописать все классы?

Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
При этом откуда у Вас взялся byte?
это всего лишь тип данных в диапазоне от 0 до 256 я думаю что градусы не переходят этот максимум не думаю что это влияет на ошибку.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
14.08.2019, 16:23
Цитата Сообщение от FerrariF70 Посмотреть сообщение
Вы имеете введу что мне прям весь ответ надо прописать все классы?
ну да, или пишите свой парсер json который будет брать только нужное
0
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486
14.08.2019, 16:23  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
понятно, а можно пример ответа от сервера?
https://yandex.ru/dev/weather/... o-docpage/
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
14.08.2019, 16:24
Цитата Сообщение от FerrariF70 Посмотреть сообщение
это всего лишь тип данных в диапазоне от 0 до 256 я думаю что градусы не переходят этот максимум не думаю что это влияет на ошибку.
вопрос, какие градусы?
Если угла, то переходят - 360 градусов окружность...
Если цельсия, то возможно, но что-то мне подсказывает что там должно быть дробное число...
0
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486
14.08.2019, 16:24  [ТС]
SeIZVeIZ, спасибо попробую как вы сделать
0
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486
14.08.2019, 19:08  [ТС]
SeIZVeIZ, Спасибо всё получилось. Не совсем понимал как если например json начинается таким образом {...} т.е идёт без названия перед скобками а потом увидел как вы сгенерировали root объект теперь понятно. Ещё хочу отметить одну вещь можно не все свойства реализовывать можно просто выборочно взять то что надо конкретно и всё.

кому интересно в итоге вышло так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
    [DataContract]
    public class Root
    {
        [DataMember(Name ="now")]
        public long Now { get; set; }
        [DataMember(Name ="now_dt")]
        public string NowDt { get; set; }
        [DataMember(Name ="info")]
        public Info Info { get; set; }
        [DataMember(Name ="fact")]
        public Fact Fact { get; set; }
        [DataMember(Name ="forecast")]
        public Forecast Forecast { get; set; }
    }
 
    [DataContract(Name ="fact")]
    public class Fact
    {
        [DataMember(Name ="temp")]
        public double Temp { get; set; }
        [DataMember(Name = "feels_like")]
        //public double FeelsLike { get; set; }
        //[DataMember(Name = "icon")]
        public string Icon { get; set; }
        //[DataMember(Name = "condition")]
        //public string Condition { get; set; }
        //[DataMember(Name = "wind_speed")]
        //public double WindSpeed { get; set; }
        //[DataMember(Name = "wind_gust")]
        //public double WindGust { get; set; }
        //[DataMember(Name = "wind_dir")]
        //public string WindDir { get; set; }
        //[DataMember(Name = "pressure_mm")]
        //public double PressureMm { get; set; }
        //[DataMember(Name = "pressure_pa")]
        //public double PressurePa { get; set; }
        //[DataMember(Name = "humidity")]
        //public double Humidity { get; set; }
        //[DataMember(Name = "daytime")]
        //public string Daytime { get; set; }
        //[DataMember(Name = "polar")]
        //public bool Polar { get; set; }
        //[DataMember(Name = "season")]
        //public string Season { get; set; }
        //[DataMember(Name = "obs_time")]
        //public double ObsTime { get; set; }
    }
    [DataContract]
    public class Forecast
    {
        [DataMember(Name ="data")]
        public string Date { get; set; }
        [DataMember(Name = "date_ts")]
        public long DateTs { get; set; }
        [DataMember(Name = "week")]
        public long Week { get; set; }
        [DataMember(Name = "sunrise")]
        public string Sunrise { get; set; }
        [DataMember(Name = "sunset")]
        public string Sunset { get; set; }
        [DataMember(Name = "moon_code")]
        public long MoonCode { get; set; }
        [DataMember(Name = "moon_text")]
        public string MoonText { get; set; }
        [DataMember(Name ="parts")]
        public List<Part> Parts { get; set; }
    }
 
    [DataContract]
    public class Part
    {
        [DataMember(Name ="part_name")]
        public string PartName { get; set; }
        public long TempMin { get; set; }
        public long TempMax { get; set; }
        public long TempAvg { get; set; }
        public long FeelsLike { get; set; }
        public string Icon { get; set; }
        public string Condition { get; set; }
        public string Daytime { get; set; }
        public bool Polar { get; set; }
        public double WindSpeed { get; set; }
        public long WindGust { get; set; }
        public string WindDir { get; set; }
        public long PressureMm { get; set; }
        public long PressurePa { get; set; }
        public long Humidity { get; set; }
        public long PrecMm { get; set; }
        public long PrecPeriod { get; set; }
        public long PrecProb { get; set; }
    }
    [DataContract]
    public class Info
    {
        public double Lat { get; set; }
        public double Lon { get; set; }
        public string Url { get; set; }
    }
Добавлено через 54 минуты
Цитата Сообщение от FerrariF70 Посмотреть сообщение
Ещё хочу отметить одну вещь можно не все свойства реализовывать можно просто выборочно взять то что надо конкретно и всё.
Ошибка, надо все свойства прописывать т.к произойдёт смещение.
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
14.08.2019, 21:11
У вас "смещение" произошло, потому что у вас после закомментирования строк поле Icon стало мапиться как feels_like. Обратите внимание на строчки 21-24 вашего последнего фрагмента. Десериализовывать действительно можно только необходимые вам свойства
1
17 / 14 / 7
Регистрация: 04.02.2017
Сообщений: 486
14.08.2019, 21:18  [ТС]
Toros1992, ой точно как я прогнал блин спасибо закоментил просто не то и получилось что не с того свойства тянул данные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2019, 21:18
Помогаю со студенческими работами здесь

Парсинг Яндекс.Погоды | Опредленного города
Доброго времени суток. Как можно спарсить восход и закат? &lt;sunrise&gt;07:03&lt;/sunrise&gt; &lt;sunset&gt;15:50&lt;/sunset&gt; Как получить...

Парсинг погоды
Доброго времени суток! Пишу бота на VK, хочу что бы на слово: &quot;погода в Москве, погода в Казани, погода в Кирове, погода в Санкт -...

Парсинг страницы погоды
Доброго времени суток Материала на эту тему много, но он очень сложен для восприятия особенно чайнику новичку Нужно спарсить...

Обработка XML Яндекс Погоды
Сейчас обновили ресурс Погоды Яндекс - https://export.yandex.ru/bar/reginfo.xml?region=10487 И я не знаю как взять значения Элемента....

Парсинг погоды oepnweathermap из xml
Здравствуйте Форумчане! Помогите пожалуйста из вот такого xml файлика получить аттрибуты temperature, humidity, pressure, speed, direction,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru