Advertisement
Guest User

Untitled

a guest
Jun 7th, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.97 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Net;
  4. using HtmlAgilityPack;
  5. using MySql.Data.MySqlClient;
  6.  
  7. namespace Grabber
  8. {
  9.     class Parser
  10.     {
  11.         string _website;
  12.         int _tempID = 1;
  13.         int _dateID = 1;
  14.         int _counter = 0;
  15.         int _day = 0;
  16.         int _nodeCounter = 0;
  17.         string _error = null;
  18.         WebClient _wclient = new WebClient();
  19.         HtmlDocument _doc = new HtmlDocument();
  20.  
  21.         public Parser(string town)
  22.         {
  23.             try //исключаем некорректный ввод или отсутствие связи
  24.             {
  25.                 _website = _wclient.DownloadString($"https://yandex.ru/pogoda/{town}");
  26.                 _error = null;
  27.                 _doc.LoadHtml(_website);
  28.                 SelectData();
  29.             }
  30.             catch
  31.             {
  32.                 _error = "error";
  33.                 SelectData();
  34.             }
  35.         }
  36.  
  37.         private void SelectData()
  38.         {
  39.             if (_error == "error") //проверка наличия ошибки ввода или отсутствия связи
  40.             {
  41.                 SetData("UPDATE weather SET town='error' WHERE id=2");
  42.             }
  43.             else
  44.             {
  45.                 string[] div = { "//div [@class='temp fact__temp']",
  46.                 "//div [@class='temp forecast-briefly__temp forecast-briefly__temp_day']",
  47.                 "//div [@class='temp forecast-briefly__temp forecast-briefly__temp_night']"}; //создаем массив с html узлами
  48.                 foreach (string str in div)
  49.                 {
  50.                     foreach (string query in GetWeather(str))
  51.                     {
  52.                         SetData(query); // записываем значения температуры в БД
  53.                         SetData(GetDate()); // записываем значения температуры в БД
  54.                     }
  55.                     _day = 0;
  56.                     _counter++;
  57.                 }
  58.             }
  59.         }
  60.  
  61.         private void SetData (string query)
  62.         {
  63.             string connmysql = "server=localhost;user=root;database=grabber;password=root;";
  64.             MySqlConnection conn = new MySqlConnection(connmysql);
  65.             conn.Open();
  66.             MySqlCommand command = new MySqlCommand(query, conn);
  67.             command.ExecuteNonQuery();
  68.             conn.Close();
  69.         }
  70.  
  71.         private string[] GetWeather(string div)
  72.         {
  73.             HtmlNodeCollection nodes = _doc.DocumentNode.SelectNodes(div); // ищем узлы html
  74.             _nodeCounter = nodes.Count();
  75.             string[] temperatureArray = new string[_nodeCounter];
  76.             int i = 0;
  77.             foreach (HtmlNode node in nodes)
  78.             {
  79.                 var temperatureNode = node.SelectSingleNode("span [@class='temp__value']").InnerText;
  80.                 string query = $"UPDATE weather SET temp = '{temperatureNode}' WHERE id ={Convert.ToString(_tempID)}";
  81.                 temperatureArray[i] = query;
  82.                 i++;
  83.                 _tempID++;
  84.             }
  85.             return temperatureArray;
  86.         }
  87.  
  88.         private string GetDate()
  89.         {
  90.             DateTime date = DateTime.Today.AddDays(_day);
  91.             string query = $"UPDATE weather SET descriptor = '{date.ToString("d")}' WHERE id={_dateID}";
  92.             _dateID++;
  93.             _day++;
  94.             return query;
  95.         }
  96.  
  97.         public static string GetTown ()
  98.         {
  99.             string connmysql = "server=localhost;user=root;database=grabber;password=root;";
  100.             MySqlConnection conn = new MySqlConnection(connmysql);
  101.             conn.Open();
  102.             string query = "SELECT town FROM weather WHERE id=1";
  103.             MySqlCommand comm = new MySqlCommand(query, conn);
  104.             string town = comm.ExecuteScalar().ToString();
  105.             comm.ExecuteNonQuery();
  106.             conn.Close();
  107.             return town;
  108.         }
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement