Итак, я пишу приложение С# WinForms для захвата изображений из 4chan.
Недавно изображения были размещены в другом домене, поэтому я пытался использовать RegEx для сканирования html-кода потока из домена boards.4chan.org
и использования его для поиска соответствующего изображения на i.4cdn.org
где они теперь хранятся. Я делаю это так, чтобы я мог загружать отдельные потоки вместо всей доски.
private void DownloadImages(string saveDir, string board, string threadNum, string fileType)
{
string htmlString;
int imageNum = 0;
WebClient wc = new WebClient();
try
{
htmlString = wc.DownloadString("http://boards.4chan.org/" + board + "/res/" + threadNum);
}
catch(Exception ex)
{
txtOutput.Text = ex.ToString();
return;
}
txtOutput.Text = "Found thread!";
MatchCollection allMatchResults;
Regex regexObj = new Regex("//i.4cdn.org/" + board + "/src/*." + fileType,RegexOptions.Singleline);
allMatchResults = regexObj.Matches(htmlString);
foreach(Match match in allMatchResults)
{
txtOutput.Text = match.ToString();
try
{
//txtOutput.Text = "Downloading file ";
wc.DownloadFile("http:" + match.Value.ToString() + "." + fileType, saveDir + imageNum + "." + fileType);
Thread.Sleep(1000);
imageNum++;
}
catch (Exception x)
{
txtOutput.Text = x.ToString();
return;
}
}
}
Теперь я не использовал RegEx через некоторое время, и я не использовал его с С# в прошлом, поэтому я не уверен, что я делаю это совершенно неправильно или нет. Я пытаюсь, чтобы он разобрал htmlString
для любых совпадений с //i.4cdn.org
адресом //i.4cdn.org
, с //i.4cdn.org
доски и типа файла (они из checkListBoxes в форме, для специфики).
У меня он захватывает источник веб-страницы в строку, чтобы я мог проанализировать ее и искать URL-адреса изображений, которые затем позволят мне найти соответствующие изображения в домене 4cdn.
Моя проблема в том, что, хотя я получаю сообщение "Найденный поток", как и следовало ожидать, программа никогда не продвигается дальше этого момента - кажется, никогда не входит в цикл foreach
.
Если есть лучший способ сделать это, я открыт для предложений. Я прочитал, что не пытаюсь разобрать html с RegEx.. но я предположил, что я буду в порядке, так как это не тот самый html, который я ищу.
Фактическое регулярное выражение означает следующее:
Поэтому используйте это регулярное выражение:
new Regex("//i.4cdn.org/" + board + "/src/[^.]+\\." + fileType, RegexOptions.Singleline);
что значит