Блог им. karat39
public static string GetBetweenTagData(string tag, string line) { string Result = ""; string pattern = string.Format(@"\<{0}.*?\>(?<tagData>.+?)\<\/{0}\>", tag.Trim()); // \<{0}.*?\> - открывающий тег // \<\/{0}\> - закрывающий тег // (?<tegData>.+?) - содержимое тега, записываем в группу tegData Regex regex = new Regex(pattern, RegexOptions.ExplicitCapture); MatchCollection matches = regex.Matches(line); if (matches.Count > 0) Result = (matches[0].Groups["tagData"].Value); return Result; } public static string GetTagValue(string param_name, string line) { string Result = ""; //string pattern = string.Format(@".*?{0}=(?<paramData>.+?) ", param_name.Trim()); string pattern = string.Format(@".*?{0}=[\',\''](?<paramData>.+?)('>|'\s)", param_name.Trim()); // \<{0}.*?\> - открывающий тег // \<\/{0}\> - закрывающий тег // (?<tegData>.+?) - содержимое тега, записываем в группу tegData Regex regex = new Regex(pattern, RegexOptions.ExplicitCapture); MatchCollection matches = regex.Matches(line); if (matches.Count > 0) Result = matches[0].Groups["paramData"].Value; return Result; }С чем столкнулся. Столкнулся либо с пока еще нереализованными возможностями самого .Net Framework'а и кое что пришлось переписывать, так же обратил внимание, что много методов в .Net Core 1.0 реализовано для асинхронного запуска. Что тоже пришлось переделывать под Task, async, await.
static async Task<string> DownloadPageAsync() { using (HttpClient httpClient = new HttpClient()) using (HttpResponseMessage httpResponse = await httpClient.GetAsync("http://www.dohod.ru/ik/analytics/dividend")) using (HttpContent content = httpResponse.Content) { string result = await content.ReadAsStringAsync(); return result; } }Кому интересен так же main, привожу. Кстати код парсит заглавную страницу с дивидендными бумагами для дальнейшего анализа и обработки.
public static void Main(string[] args) { string htmlCode = DownloadPageAsync().Result; //Загрузка страницы N компании string htmlTableData = htmlCode.Substring(htmlCode.IndexOf("<tbody>") + 7, htmlCode.IndexOf("</tbody>") - htmlCode.IndexOf("<tbody>") - 7) .Trim() .Replace((char)10, ' ') .Replace('\"', '\''); //Получение таблицы в html string tableRow = ""; string result = ""; int nColumn = 0; while ((tableRow = GetBetweenTagData("tr", htmlTableData).Trim()) != "" ) { //Проход всех строк таблицы string tableCol = ""; result = ""; nColumn = 0; while (tableRow.IndexOf("td") > 0) { //Проход столбцов строки nColumn++; tableCol = GetBetweenTagData("td", tableRow).Trim(); switch (nColumn) { case 1: { if (tableCol.Contains("href")) tableCol = GetTagValue("href", tableCol) + "\t" + GetBetweenTagData("a", tableCol); else tableCol = "\t" + tableCol; } break; case 5: { tableCol = GetTagValue("title", tableCol); } break; case 10: { tableCol = GetTagValue("title", tableCol); } break; } tableRow = tableRow.Remove(0, tableRow.IndexOf("</td>") + 5); result = result + "\t" + tableCol; } if (result.Length > 0) Console.WriteLine(result); htmlTableData = htmlTableData.Remove(0, htmlTableData.IndexOf("</tr>") + 5); } } }Вообщем пока можно сказать, что пришли одни вкусняшки, по мере усложнения задач, будем посмотреть, как оно пойдет. За код сильно не критикуйте. Не кодил c# около 4-5 месяцев. С с++ сразу не перейти на все плюшки.
github.com/dotnet/core/blob/master/roadmap.md
blogs.msdn.microsoft.com/dotnet/2016/06/27/announcing-net-core-1-0/
Показывали даже что-то скомпиленное под Распберри Пи.
Идея в том что кроссплатформенность + опенсорс даёт хороший буст к развитию всего вместе. В том плане что начинают больше всего писать, больше полезных\прикольных\уникальных\интересных решений, больше народа привлекают и т.д.
Как пример — написание приложений, которые работают как на мобильной Win10, так и на десктопной. А .Net Core это шаг ещё дальше, т.е. они хотят быть везде, на любом рынке.
Не то, чтобы не справился. Я взялся переписывать их с действующего кода шарпа. Задачи типовые: http, запросы get/post, бд, pdf и тд. И бросил это дело. Я пока не располагаю стольким временем, чтобы еще и в свободное время столько кодить.
С появлением .Net Core естественно я теперь очень рад. Месяца за 3 потихоньку перенесу код.
— я подсел на linux и полюбил его
— я хочу иметь полностью автономный сервер. Это пожалуй самое главное. Тут и Linux бесплатный, и возможностей расширить все бесплатно всякие плюшки, эффективно тут будет на мой взгляд побольше. А я пришел уже к тому, что нужно сокращать косты. Уже даже и биржа ввела плату за свои данные. Там заплатишь, сям заплатишь, в мес уже может выходить не мало.
— платный
— аренды на win дороже
— затратный по ресурсам (это очень важно для меня), хочу простую консоль
— у меня вся работа на linux. пересаживаться на win, делать что то серьезное глобальное, для меня уже затратно по времени (вникать в нюансы и тд).
А сколько у тебя прибыль при этом?
Всё равно в чем: в енотах североамериканских, в процентах, в деревяшках...?
И я бы не сказал, что это много. Весь анализ автоматический формируется минут за 10 в конце дня.
а в части трейдинга и IT надо повышать эффективность.
а ты в ученики в программировании не берёшь ?)))
Что насчет учеников. Еще бы год назад, взял бы не задумываясь. Мне это и нравится делать и в плане иметь вторую подпитку. Но сейчас просто нехватка времени. Поэтому извините, даже если и соглашусь, подведу потом либо в сроках, либо в отдаче.