Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Програмний код






IParsingService.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

 

namespace ParsingService

{

// NOTE: You can use the " Rename" command on the " Refactor" menu to change the interface name " IParsingService" in both code and config file together.

[ServiceContract]

public interface IParsingService

{

[OperationContract]

List< Bank> ParseThePages(List< string> urls);

}

}

 

ParsingService.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

using HtmlAgilityPack;

using System.Net;

using System.IO;

 

namespace ParsingService

{

// NOTE: You can use the " Rename" command on the " Refactor" menu to change the class name " ParsingService" in both code and config file together.

public class ParsingService: IParsingService

{

//функция парсинга указаных страниц по их url адресах

public List< Bank> ParseThePages(List< string> urls)

{

List< Bank> lstOfBanks = new List< Bank> ();

foreach (var bankUrl in urls)

{

lstOfBanks.Add(ParseTheCurrentPage(bankUrl));

}

return lstOfBanks;

}

//функция парсинга одной страницы по ее url адресу

private static Bank ParseTheCurrentPage(string url)

{

var html = GetHtml(url);

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(html);

return GetBank(doc);

}

 

//функция получения обьекта Банка по указаному HTML документу

private static Bank GetBank(HtmlDocument doc)

{

//информация о валюте в формате строки

string info = " ";

//информация о валюте ы формате масива строк

string[] kursInfo = new string[7];

//получение нужной нам таблицы с HTML страницы

var table = doc.DocumentNode.SelectNodes(" //table")[0];

//получаем имя банка

info = doc.DocumentNode.SelectNodes(" //title")[0].InnerText.Substring(11);

info = info.Replace(" & nbsp; ", "; ");

//перебираем все валюты в таблице

foreach (var tr_element in table.ChildNodes)

{

if (tr_element.Name == " tr")

{

//Проверка на соответствие тега < td>

if (tr_element.ChildNodes[1].Name == " td")

{

//добавляем инфомацмию о покупке валюты

info += tr_element.ChildNodes[3].FirstChild.InnerText + "; ";

//добавляем инфомацмию о продаже валюты

info += tr_element.ChildNodes[5].FirstChild.InnerText + "; ";

}

}

}

//разбиваем строку с информацией о банке в масив строк для удобного создания обьекта Банка

if (info! = " ")

kursInfo = info.Split('; ');

//возращаем обьект Банка

return new Bank()

{

Name = kursInfo[0],

UsdBuy = kursInfo[1],

UsdSale = kursInfo[2],

EurBuy = kursInfo[3],

EurSale = kursInfo[4],

RubBuy = kursInfo[5],

RubSale = kursInfo[6]

};

}

 

//Функция для получения HTML страницы

private static string GetHtml(string url)

{

//Делаем запрос по указаному url

HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;

//Получаем ответ по запросу

HttpWebResponse responce = request.GetResponse() as HttpWebResponse;

//Считываем ответ и переводим его в string формат

StreamReader sr = new StreamReader(responce.GetResponseStream(), Encoding.Default);

var html = sr.ReadToEnd();

sr.Close();

return html;

}

}

}

 

Bank.cs

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ParsingService

{

public class Bank

{

public string Name { get; set; }

public string UsdBuy { get; set; }

public string UsdSale { get; set; }

public string EurBuy { get; set; }

public string EurSale { get; set; }

public string RubBuy { get; set; }

public string RubSale { get; set; }

}

}

 

App.config

<? xml version=" 1.0" encoding=" utf-8"? >

< configuration>

< startup>

< supportedRuntime version=" v4.0" sku=".NETFramework, Version=v4.5.1" />

< /startup>

< system.serviceModel>

< services>

< service name=" ParsingService.ParsingService" behaviorConfiguration=" mexBehavior" >

< endpoint address=" ParsingService" binding=" basicHttpBinding" contract=" ParsingService.IParsingService" > < /endpoint>

< endpoint address=" ParsingService" binding=" netTcpBinding" contract=" ParsingService.IParsingService" > < /endpoint>

< endpoint address=" mex" binding=" mexHttpBinding" contract=" IMetadataExchange" > < /endpoint>

< host>

< baseAddresses>

< add baseAddress=" https://localhost: 9001/ParsingService" />

< add baseAddress=" net.tcp: //localhost: 9002/ParsingService" />

< /baseAddresses>

< /host>

< /service>

< /services>

< behaviors>

< serviceBehaviors>

< behavior name=" mexBehavior" >

< serviceMetadata httpGetEnabled=" true" />

< /behavior>

< /serviceBehaviors>

< /behaviors>

< /system.serviceModel>

< /configuration>

 

FormMain.cs

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using ParserClient.ParserService;

 

namespace ParserClient

{

public partial class FormMain: Form

{

ParsingServiceClient _client;

private List< string> _bankUrls = new List< string> ()

{

" https://finance.i.ua/bank/73/",

" https://finance.i.ua/bank/29/",

" https://finance.i.ua/bank/2/",

" https://finance.i.ua/bank/79/",

" https://finance.i.ua/bank/26/",

" https://finance.i.ua/bank/9/",

" https://finance.i.ua/bank/8/",

" https://finance.i.ua/bank/4/",

" https://finance.i.ua/bank/23/",

" https://finance.i.ua/bank/13/",

" https://finance.i.ua/bank/12/",

" https://finance.i.ua/bank/30/",

" https://finance.i.ua/bank/52/"

};

public FormMain()

{

InitializeComponent();

_client = new ParsingServiceClient(" BasicHttpBinding_IParsingService");

}

 

private void btn_Parse_Click(object sender, EventArgs e)

{

//парсим указаный масив url адресов и получаем масив банков.конвертировали в список

List< Bank> banks = _client.ParseThePages(_bankUrls.ToArray< string> ()).ToList< Bank> ();

//вычесляем количество строк таблицы

dgv_ExchangeRate.RowCount = banks.Count;

//заполняем таблицу информацией о банках

FillTheDataGridView(banks);

}

 

private void FillTheDataGridView(List< Bank> banks)

{

for (int i = 0; i < dgv_ExchangeRate.RowCount; i++)

{

dgv_ExchangeRate[0, i].Value = banks[i].Name;

dgv_ExchangeRate[1, i].Value = banks[i].UsdBuy;

dgv_ExchangeRate[2, i].Value = banks[i].UsdSale;

dgv_ExchangeRate[3, i].Value = banks[i].EurBuy;

dgv_ExchangeRate[4, i].Value = banks[i].EurSale;

dgv_ExchangeRate[5, i].Value = banks[i].RubBuy;

dgv_ExchangeRate[6, i].Value = banks[i].RubSale;

}

}

}

}

 

 

MyParsingService.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Linq;

using System.ServiceModel;

using System.ServiceModel.Description;

using System.ServiceProcess;

using System.Text;

using System.Threading.Tasks;

 

namespace WinParsingService

{

public partial class MyParsingService: ServiceBase

{

private ServiceHost _host = null;

public MyParsingService()

{

InitializeComponent();

}

 

protected override void OnStart(string[] args)

{

if (_host! = null)

_host.Close();

_host = new ServiceHost(typeof(ParsingService.ParsingService));

_host.Open();

}

 

protected override void OnStop()

{

if (_host! = null)

{

_host.Close();

_host = null;

}

}

}

}

 

MyParsingService.Designer.cs

namespace WinParsingService

{

partial class MyParsingService

{

/// < summary>

/// Required designer variable.

/// < /summary>

private System.ComponentModel.IContainer components = null;

 

/// < summary>

/// Clean up any resources being used.

/// < /summary>

/// < param name=" disposing" > true if managed resources should be disposed; otherwise, false.< /param>

protected override void Dispose(bool disposing)

{

if (disposing & & (components! = null))

{

components.Dispose();

}

base.Dispose(disposing);

}

 

#region Component Designer generated code

 

/// < summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// < /summary>

private void InitializeComponent()

{

components = new System.ComponentModel.Container();

this.ServiceName = " ParsingService";

}

 

#endregion

}

}

 

namespace ParserClient

{

partial class FormMain

{

/// < summary>

/// Required designer variable.

/// < /summary>

private System.ComponentModel.IContainer components = null;

 

/// < summary>

/// Clean up any resources being used.

/// < /summary>

/// < param name=" disposing" > true if managed resources should be disposed; otherwise, false.< /param>

protected override void Dispose(bool disposing)

{

if (disposing & & (components! = null))

{

components.Dispose();

}

base.Dispose(disposing);

}

 

#region Windows Form Designer generated code

 

/// < summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// < /summary>

private void InitializeComponent()

{

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));

this.btn_Parse = new System.Windows.Forms.Button();

this.dgv_ExchangeRate = new System.Windows.Forms.DataGridView();

this.bankName = new System.Windows.Forms.DataGridViewTextBoxColumn();

this.usdBuy = new System.Windows.Forms.DataGridViewTextBoxColumn();

this.usdSale = new System.Windows.Forms.DataGridViewTextBoxColumn();

this.eurBuy = new System.Windows.Forms.DataGridViewTextBoxColumn();

this.eurSale = new System.Windows.Forms.DataGridViewTextBoxColumn();

this.rubBuy = new System.Windows.Forms.DataGridViewTextBoxColumn();

this.rubSale = new System.Windows.Forms.DataGridViewTextBoxColumn();

((System.ComponentModel.ISupportInitialize)(this.dgv_ExchangeRate)).BeginInit();

this.SuspendLayout();

//

// btn_Parse

//

this.btn_Parse.Location = new System.Drawing.Point(658, 12);

this.btn_Parse.Name = " btn_Parse";

this.btn_Parse.Size = new System.Drawing.Size(101, 36);

this.btn_Parse.TabIndex = 0;

this.btn_Parse.Text = " Вывести курсы валют";

this.btn_Parse.UseVisualStyleBackColor = true;

this.btn_Parse.Click += new System.EventHandler(this.btn_Parse_Click);

//

// dgv_ExchangeRate

//

this.dgv_ExchangeRate.AllowUserToAddRows = false;

this.dgv_ExchangeRate.AllowUserToDeleteRows = false;

this.dgv_ExchangeRate.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;

this.dgv_ExchangeRate.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {

this.bankName,

this.usdBuy,

this.usdSale,

this.eurBuy,

this.eurSale,

this.rubBuy,

this.rubSale});

this.dgv_ExchangeRate.Location = new System.Drawing.Point(12, 12);

this.dgv_ExchangeRate.Name = " dgv_ExchangeRate";

this.dgv_ExchangeRate.ReadOnly = true;

this.dgv_ExchangeRate.RowHeadersVisible = false;

this.dgv_ExchangeRate.Size = new System.Drawing.Size(623, 322);

this.dgv_ExchangeRate.TabIndex = 1;

//

// bankName

//

this.bankName.HeaderText = " Банк";

this.bankName.Name = " bankName";

this.bankName.ReadOnly = true;

this.bankName.Width = 200;

//

// usdBuy

//

this.usdBuy.HeaderText = " USD Покупка";

this.usdBuy.Name = " usdBuy";

this.usdBuy.ReadOnly = true;

this.usdBuy.Width = 70;

//

// usdSale

//

this.usdSale.HeaderText = " USD Продажа";

this.usdSale.Name = " usdSale";

this.usdSale.ReadOnly = true;

this.usdSale.Width = 70;

//

// eurBuy

//

this.eurBuy.HeaderText = " EUR Покупка";

this.eurBuy.Name = " eurBuy";

this.eurBuy.ReadOnly = true;

this.eurBuy.Width = 70;

//

// eurSale

//

this.eurSale.HeaderText = " EUR Продажа";

this.eurSale.Name = " eurSale";

this.eurSale.ReadOnly = true;

this.eurSale.Width = 70;

//

// rubBuy

//

this.rubBuy.HeaderText = " RUB Покупка";

this.rubBuy.Name = " rubBuy";

this.rubBuy.ReadOnly = true;

this.rubBuy.Width = 70;

//

// rubSale

//

this.rubSale.HeaderText = " RUB Продажа";

this.rubSale.Name = " rubSale";

this.rubSale.ReadOnly = true;

this.rubSale.Width = 70;

//

// FormMain

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(774, 362);

this.Controls.Add(this.dgv_ExchangeRate);

this.Controls.Add(this.btn_Parse);

this.Icon = ((System.Drawing.Icon)(resources.GetObject(" $this.Icon")));

this.MaximumSize = new System.Drawing.Size(790, 1000);

this.MinimumSize = new System.Drawing.Size(790, 400);

this.Name = " FormMain";

this.Text = " Курсы валют";

((System.ComponentModel.ISupportInitialize)(this.dgv_ExchangeRate)).EndInit();

this.ResumeLayout(false);

 

}

 

#endregion

 

private System.Windows.Forms.Button btn_Parse;

private System.Windows.Forms.DataGridView dgv_ExchangeRate;

private System.Windows.Forms.DataGridViewTextBoxColumn bankName;

private System.Windows.Forms.DataGridViewTextBoxColumn usdBuy;

private System.Windows.Forms.DataGridViewTextBoxColumn usdSale;

private System.Windows.Forms.DataGridViewTextBoxColumn eurBuy;

private System.Windows.Forms.DataGridViewTextBoxColumn eurSale;

private System.Windows.Forms.DataGridViewTextBoxColumn rubBuy;

private System.Windows.Forms.DataGridViewTextBoxColumn rubSale;

}

}

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.046 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал