C# список ссылок с редиректом + замена ?

iulius

Client
Регистрация
01.10.2011
Сообщения
57
Благодарностей
3
Баллы
8
:bc:При скачивание статей с форумов XENFORO все внешние ссылки зашифрованы с редиректом на страницу с таймером и редиректом.
Такого формата https://domain.com/redirect/?to=aHR0cDovL3RoZW1lLnZpc3VhbG1vZG8uY29tL21hcnZlbC8=

ЗАДАЧА: Собрать список, проити по каждому редиректу, заменить ссылки.

Подскажите какого может быть простое решение, собрать их в 2 списка далее сравнить их с заменой, или сразу из коллекции?

Может кто сталкивался и есть готовое решение.

Буду премного благодарен.
 
Последнее редактирование:

iulius

Client
Регистрация
01.10.2011
Сообщения
57
Благодарностей
3
Баллы
8
Частично написал сбор ссылок в коллекцию и замена в текущем индексе, но как потом в самом HTML коде заменять?
у кого есть идеи, прошу.
Код:
HtmlElementCollection links = instance.ActiveTab.FindElementsByAttribute("a", "class", "externalLink", "regexp");

foreach (HtmlElement link in links)
{
    var href =  link.GetAttribute("href");
    var url = ZennoPoster.HttpGet(href, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly);
    var new_link = Regex.Match(url, @"(?<=<a\ href="").*?(?=""\ class=""forward"">Продолжить)");
    //links.Insert(new_link, links.Current);

}
 

iulius

Client
Регистрация
01.10.2011
Сообщения
57
Благодарностей
3
Баллы
8
для наглядности загоняю в таблицу, туда записываются значения, а Replace не производится.
на выходе в переменной article код с прежними ссылками без замены. Кто подскажет в чем ошибка?
Код:
MatchCollection links = Regex.Matches(article, @"(?<=<a\ href="")https://.*?(?="")");
var table = project.Tables["article_links"];
table.ColSeparator = "~|~";
//add matches links to table
for(int i=0;i<links.Count;i++){
    var link = links[i].Value;

    var pre_link = ZennoPoster.HttpGet(link, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly);
    var new_link = Regex.Match(pre_link, @"(?<=<a\ href="").*?(?=""\ class=""forward"">Продолжить)").Value;
    table.AddRow(link+"~|~"+new_link);

    project.Variables["article"].Value = article.Replace(@link, new_link);
}
Очень странно работает Replace из 6 ссылок заменил 5ую, а остальные проигнорировал.
 
Последнее редактирование:

iulius

Client
Регистрация
01.10.2011
Сообщения
57
Благодарностей
3
Баллы
8
Решил проблему делюсь с вами :-)
Код:
//собрали колекцию по совпадению
MatchCollection links = Regex.Matches(article, @"(?<=<a\ href="")https.*?(?="")");
for(int i=0;i<links.Count;i++){
    string link = links[i].Value;
    //идем по ссылке и забираем прямую ссылку
    var pre_link = ZennoPoster.HttpGet(link, "", "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly);
    var new_link = Regex.Match(pre_link, @"(?<=<a\ href="").*?(?=""\ class=""forward"">Продолжить)").Value;
    link = "\""+link+"\""; // экранируем ссылку
    article= article.Replace(@link,new_link); //замена ссылок
}
return article.Trim();
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)