Advertisement
Gistrec

Gismeteo temp parser

May 24th, 2019
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.14 KB | None | 0 0
  1. using System;
  2. using System.Net;
  3. using System.IO;
  4. using System.Text; /** Encoding */
  5. using System.Text.RegularExpressions; /** Regexp */
  6. using System.Collections.Generic; /** List */
  7.  
  8. namespace WindowsServiceHostForMyService {
  9.     class SiteParser {
  10.         /**
  11.          * Парсим погоду с сайта gismeteo.ru
  12.          * @param url - ссылка на сайт с погодой, например https://www.gismeteo.ru/weather-moscow-4368
  13.          * @retrun строка, содержащая 8 значений, разделенных |
  14.          *         Каждое значение - температура в определенное время [0:00, 3:00, ..., 21:00]
  15.          *         Например +10|+11|...|+12|+10
  16.          */
  17.         static public string getWeather(string url) {
  18.             HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
  19.             request.UserAgent = "Mozilla/5.0 (Linux; Android 6.0;";
  20.             HttpWebResponse response = (HttpWebResponse) request.GetResponse();
  21.  
  22.             List<string> weathers = new List<string>(8);
  23.  
  24.             if (response.StatusCode == HttpStatusCode.OK) {
  25.                 Stream receiveStream = response.GetResponseStream();
  26.                 StreamReader readStream = null;
  27.  
  28.                 if (response.CharacterSet == null) {
  29.                     readStream = new StreamReader(receiveStream);
  30.                 } else {
  31.                     readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
  32.                 }
  33.  
  34.                 string html = readStream.ReadToEnd();
  35.  
  36.                 string pattern = "<span class=\"unit unit_temperature_c\">([+-]{1}\\d+)<\\/span><span";
  37.                 Match match = Regex.Match(html, pattern);
  38.  
  39.                 while (match.Success) {
  40.                     weathers.Add(match.Groups[1].Value);
  41.                     match = match.NextMatch();
  42.                 }
  43.  
  44.                 response.Close();
  45.                 readStream.Close();
  46.  
  47.                 return String.Join("|", weathers);
  48.             }
  49.  
  50.             return ""; // В случае ошибки
  51.         }
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement