.Net рдХреЗ рд▓рд┐рдП Yandex Search API

рд╢реБрдн рджреЛрдкрд╣рд░
рдПрдХ .Net рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдпреИрдВрдбреЗрдХреНрд╕ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ .Net рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдпрд╛рдВрдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдмреЗрд╢рдХ, рд╢реБрд░реВ рдореЗрдВ рдореИрдВ рдЦреБрдж рдпрд╛рдВрдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдЖрд╡рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдореБрдЭрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛), рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд▓рдЧрднрдЧ 20 рдорд┐рдирдЯ рдмрд┐рддрд╛рдП рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдХреЛрдИред рдирддреАрдЬрддрди, рдореЗрд░реЗ рдкрд╛рд╕ рдЦреБрдж рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ Yandex API рдкреНрд░рд▓реЗрдЦрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рд╣реИ рдФрд░ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╣реИред

Yandex.XML рд╕реЗрд╡рд╛ рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдереАред рдпрд╣ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде XML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдпреИрдВрдбреЗрдХреНрд╕ рдкрд░ рдПрдХ рдорд╛рдирдХ рдкрдВрдЬреАрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреБрдВрдЬреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдИрдкреА рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддрд┐ рджрд┐рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реАрдорд╛ рд╢реБрд░реВ рдореЗрдВ 10 рд╣реИ, рд▓реЗрдХрд┐рди рдлреЛрди рдирдВрдмрд░ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рдмрд╛рдж рдпрд╣ рдмрдврд╝рдХрд░ 1000 рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдп 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдФрд░ Yandex.XML рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдФрд░ рдЗрд╕ рдЙрддреНрддрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ред

рдЕрдиреБрд░реЛрдз рд╕рдВрд░рдЪрдирд╛


Yandex.XML рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреМрди рд╕реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

< query > - .
< sortby > - :
< rlv > - ,
< tm > - .
< maxpassages > - ( - 5, -2).
< groupings > - < groupby > .
< groupby > - , :
< attr = > - , :
< d > - .
<> - .
< mode = > - :
< flat > - .
< deep > - .
< groups-on-page = > - ( 100).
< docs-in-group = > - .

* This source code was highlighted with Source Code Highlighter .


рд╣рдордиреЗ рдЕрдиреБрд░реЛрдз рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛, рдЕрдм рдЗрд╕реЗ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: POST рд╡рд┐рдзрд┐ рдФрд░ GET рд╡рд┐рдзрд┐ред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ред

рдкреЛрд╕реНрдЯ рд╡рд┐рдзрд┐


рдкреЛрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдзрд╛рд░рд╛ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡рд╛ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд░рд╛рдзрд╛рд░ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдХреЛрдб рджреВрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╣реЛрддрд╛ рд╣реИ:

ServicePointManager.Expect100Continue = false ;

/* , IP,
API.*/
string url = @"http://xmlsearch.yandex.ru/xmlsearch?
user=**********&
key=**********************************"
;

// XML
string command =
@"<?xml version=" "1.0" " encoding=" "UTF-8" "?>
<request>
<query>- </query>
<groupings>
<groupby attr="
"d" "
mode="
"deep" "
groups-on-page="
"10" "
docs-in-group="
"1" " />
</groupings>
</request>"
;

byte [] bytes = Encoding .UTF8.GetBytes(command);
// , .
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST" ;
request.ContentLength = bytes.Length;
request.ContentType = "text/xml" ;
// XML-
using ( Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}

//
HttpWebResponse response =(HttpWebResponse)request.GetResponse();

* This source code was highlighted with Source Code Highlighter .


рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ HttpWebRequest рдСрдмреНрдЬреЗрдХреНрдЯ, POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╕рдордп, HTTP рд╢реАрд░реНрд╖ рд▓реЗрдЦ "рдЙрдореНрдореАрдж: 100-рдЬрд╛рд░реА рд░рдЦреЗрдВ" рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ (Yandex.XML рд╕рд╣рд┐рдд) рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ "(417) рдЙрдореНрдореАрдж рд╡рд┐рдлрд▓рддрд╛ "ред

рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


GET рд╡рд┐рдзрд┐ POST рд╡рд┐рдзрд┐ рд╕реЗ рднрд┐рдиреНрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз рдПрдХ рд╕рд░рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рди рдХрд┐ XML рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧред рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╕реЗрд╡рд╛ рд╕реНрд╡рдпрдВ рдЕрдиреБрд░реЛрдз рдкрд╛рда рд╕реЗ XML рдмрдирд╛рддрд╛ рд╣реИ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ XML рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ (XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ)ред рдХреЛрдб рдЙрджрд╛рд╣рд░рдг:

//, IP.
string key = "***********************************" ;
// .
string user = "*****************" ;
// .
string url = @"http://xmlsearch.yandex.ru/xmlsearch?
query={0}&
groupby=attr%3Dd.
mode%3Ddeep.
groups-on-page%3D10.
docs-in-group%3D1&
user={1}&
key={2}"
;
// .
string completeUrl = String .Format(url, searchQuery, user, key);
//, .
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(completeUrl);
// .
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

* This source code was highlighted with Source Code Highlighter .


рддреЛ, рд╕реЗрд╡рд╛ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдЕрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред .Net рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ XML рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рдереАрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП HttpWebResponse рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ XML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ:

XmlReader xmlReader = XmlReader.Create(response.GetResponseStream());
XDocument xmlResponse = XDocument .Load(xmlReader);

* This source code was highlighted with Source Code Highlighter .


рд╕рднреА рдкреНрд░рд╛рдкреНрдд рдЕрд╡рд╢реЗрд╖ XML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕ рдЙрддреНрддрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ Yandex.XML рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореБрдЭреЗ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рдерд╛:

тАв < url > - URL
тАв < title > -
тАв < headline > -
тАв < modtime > -
тАв < saved-copy-url > -

* This source code was highlighted with Source Code Highlighter .


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рдВрд░рдЪрдирд╛ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдереА рдЬрд┐рд╕рдореЗрдВ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗ:

public struct YaSearchResult
{
//url
public string DisplayUrl,
//saved-copy-url
CacheUrl,
//title
Title,
//headline
Description,
//modtime
IndexedTime;

public YaSearchResult( string url,
string cacheUrl,
string title,
string description,
string indexedTime)
{
this .DisplayUrl = url;
this .CacheUrl = cacheUrl;
this .Title = title;
this .Description = description;
this .IndexedTime = indexedTime;
}
}

* This source code was highlighted with Source Code Highlighter .


XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╣реА, рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдореВрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ:

<group>
<categ attr= "" name= "" />
<doccount> </doccount>
<relevance priority= "" />
-<doc id= "" >
<relevance priority= "" />
<url> </url>
<domain> </domain>
<title> </title>
<modtime> </modtime>
<size> </size>
<charset> </charset>
+<passages>
+<properties>
<mime-type> </mime-type>
<saved-copy-url> </saved-copy-url>
</doc>
</group>

* This source code was highlighted with Source Code Highlighter .


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЦреБрдж (рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЕрдкрдиреЗ рдПрдХреНрд╕рдПрдордПрд▓ рдорд╛рдиреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐):

// doc,
// GetValue , ,
public static string GetValue( XElement group, string name)
{
try
{
return group.Element(┬лdoc┬╗).Element(name).Value;
}
// ,
// .
catch
{
return string .Empty;
}
}


* This source code was highlighted with Source Code Highlighter .


public static List <YaSearchResult> Search( string searchQuery)
{

// YaSearchResult, .
List <YaSearchResult> ret = new List <YaSearchResult>();

// XML' "group" -
var groupQuery = from gr in response.Elements().
Elements( "response" ).
Elements( "results" ).
Elements( "grouping" ).
Elements( "group" )
select gr;

// group SearchResult
for ( int i = 0; i < groupQuery.Count(); i++)
{
string urlQuery = GetValue(groupQuery.ElementAt(i), "url" );
string titleQuery = GetValue(groupQuery.ElementAt(i), "title" );
string descriptionQuery = GetValue(groupQuery.ElementAt(i), "headline" );
string indexedTimeQuery = GetValue(groupQuery.ElementAt(i), "modtime" );
string cacheUrlQuery = GetValue(groupQuery.ElementAt(i),
"saved-copy-url" );
ret.Add( new YaSearchResult(urlQuery, cacheUrlQuery, titleQuery, descriptionQuery, indexedTimeQuery));
}

return ret;
}

* This source code was highlighted with Source Code Highlighter .


рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдкрддреНрд░рдХ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ!

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрджрд┐ рдХреЛрдИ .Net рд╕реЗ рдпрд╛рдВрдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпреИрдВрдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ / рд░рд┐рд╡рд░реНрд╕ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ .Net рдХреЗ рд▓рд┐рдП рдпреИрдВрдбреЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рдкреВрд░реНрдг рдЖрд╡рд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВ, рди рдХреЗрд╡рд▓ рдпрд╛рдВрдбреЗрдХреНрд╕.рдПрдХреНрд╕рдПрдордПрд▓ рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдПрдВ рднреАред

Source: https://habr.com/ru/post/In116479/


All Articles