Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using System.Net;
- using HtmlAgilityPack;
- using MySql.Data.MySqlClient;
- namespace Grabber
- {
- class Parser
- {
- string _website;
- int _tempID = 1;
- int _dateID = 1;
- int _counter = 0;
- int _day = 0;
- int _nodeCounter = 0;
- string _error = null;
- WebClient _wclient = new WebClient();
- HtmlDocument _doc = new HtmlDocument();
- public Parser(string town)
- {
- try //исключаем некорректный ввод или отсутствие связи
- {
- _website = _wclient.DownloadString($"https://yandex.ru/pogoda/{town}");
- _error = null;
- _doc.LoadHtml(_website);
- SelectData();
- }
- catch
- {
- _error = "error";
- SelectData();
- }
- }
- private void SelectData()
- {
- if (_error == "error") //проверка наличия ошибки ввода или отсутствия связи
- {
- SetData("UPDATE weather SET town='error' WHERE id=2");
- }
- else
- {
- string[] div = { "//div [@class='temp fact__temp']",
- "//div [@class='temp forecast-briefly__temp forecast-briefly__temp_day']",
- "//div [@class='temp forecast-briefly__temp forecast-briefly__temp_night']"}; //создаем массив с html узлами
- foreach (string str in div)
- {
- foreach (string query in GetWeather(str))
- {
- SetData(query); // записываем значения температуры в БД
- SetData(GetDate()); // записываем значения температуры в БД
- }
- _day = 0;
- _counter++;
- }
- }
- }
- private void SetData (string query)
- {
- string connmysql = "server=localhost;user=root;database=grabber;password=root;";
- MySqlConnection conn = new MySqlConnection(connmysql);
- conn.Open();
- MySqlCommand command = new MySqlCommand(query, conn);
- command.ExecuteNonQuery();
- conn.Close();
- }
- private string[] GetWeather(string div)
- {
- HtmlNodeCollection nodes = _doc.DocumentNode.SelectNodes(div); // ищем узлы html
- _nodeCounter = nodes.Count();
- string[] temperatureArray = new string[_nodeCounter];
- int i = 0;
- foreach (HtmlNode node in nodes)
- {
- var temperatureNode = node.SelectSingleNode("span [@class='temp__value']").InnerText;
- string query = $"UPDATE weather SET temp = '{temperatureNode}' WHERE id ={Convert.ToString(_tempID)}";
- temperatureArray[i] = query;
- i++;
- _tempID++;
- }
- return temperatureArray;
- }
- private string GetDate()
- {
- DateTime date = DateTime.Today.AddDays(_day);
- string query = $"UPDATE weather SET descriptor = '{date.ToString("d")}' WHERE id={_dateID}";
- _dateID++;
- _day++;
- return query;
- }
- public static string GetTown ()
- {
- string connmysql = "server=localhost;user=root;database=grabber;password=root;";
- MySqlConnection conn = new MySqlConnection(connmysql);
- conn.Open();
- string query = "SELECT town FROM weather WHERE id=1";
- MySqlCommand comm = new MySqlCommand(query, conn);
- string town = comm.ExecuteScalar().ToString();
- comm.ExecuteNonQuery();
- conn.Close();
- return town;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement