Блог им. 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 надо повышать эффективность.
а ты в ученики в программировании не берёшь ?)))
Что насчет учеников. Еще бы год назад, взял бы не задумываясь. Мне это и нравится делать и в плане иметь вторую подпитку. Но сейчас просто нехватка времени. Поэтому извините, даже если и соглашусь, подведу потом либо в сроках, либо в отдаче.