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

Введение

Выбранный объект для парсинга — сайт meteoservice.ru
С сайта будем брать, как уже и говорилось ранее, температуру воздуха, в градусах цельсия, и тип осадков, если нет — облачность.

Реализация

Итак, приступим к реализации нашего темного дела, кхе-кхе.

Для начала объявим две важные сборки
using System.Net;
using System.Text.RegularExpressions;


Далее получим контент нашей странички.
WebRequest request;
request = WebRequest.Create(@"http://www.meteoservice.ru/weather/now/moskva.html");


Как видно, в качестве города указывается название города, написанное транслитом, в нижнем регистре.

Теперь надо скушать ответ, который нам послал сервер, а также передадим этот поток данных, для работы с ним напрямую.
using (var response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
string data = reader.ReadToEnd();


А здесь, собственно, ключевая роль — парсинг данных. И тут уже есть два самых оптимальных способа.

Первый — обычная string'овая функция Split.
Вторая — регулярные выражения.

В данном случае лучше всего использовать второй вариант, т.к. первый медленнее, да и городить огород с ним не хочется.

Получаем город.
string town = new Regex(@"<h1>(?<town>.*)</h1>").Match(data).Groups["town"].Value;


Температуру.
string temp = new Regex(@"<span class=""temperature"">(?<temp>[^<]+)<span title=""Градус Цельсия"">").Match(data).Groups["temp"].Value;


Тип осадков.
string osadki = new Regex(@"<td class=""title"">Облачность:</td>[^<]*?<td>(?<osadki>[^<]+)</td>").Match(data).Groups["osadki"].Value;


Уведомляем себя любимого о текущей погоде.
Console.WriteLine(town + "\nТемпература воздуха: " + temp + "\nОсадки: " + osadki);
» Добавил: * HELL
» Время добавления: 20 Окт 2015 в 14:31
» Посмотров: 780
» textarea
» Рейтинг: [+0 | -0]
Комментарии [0]
  1. WebRequest request;
  2. request = WebRequest.Create(@"http://www.meteoservice.ru/weather/now/moskva.html");
  3. using (var response = request.GetResponse())
  4. {
  5. using (var stream = response.GetResponseStream())
  6. using (var reader = new StreamReader(stream))
  7. {
  8. string data = reader.ReadToEnd();
  9. string town = new Regex(@"<h1>(?<town>.*)</h1>").Match(data).Groups["town"].Value;
  10. string temp = new Regex(@"<span class=""temperature"">(?<temp>[^<]+)<span title=""Градус Цельсия"">").Match(data).Groups["temp"].Value;
  11. string osadki = new Regex(@"<td class=""title"">Облачность:</td>[^<]*?<td>(?<osadki>[^<]+)</td>").Match(data).Groups["osadki"].Value;
  12. Console.WriteLine(town + "\nТемпература воздуха: " + temp + "\nОсадки: " + osadki);
  13. Console.ReadLine();
  14. }
  15. }
Онлайн: 10
Реклама