Мне нужно удалить URL-адрес Google Alerts

В предисловии я знаю, что есть похожие темы по этому поводу, но я использую C #, а не java, или python, или Php. Некоторые потоки предоставляют решение для одного URL-адреса, что не является универсальным. Спасибо, что не отметили меня.

Поэтому я использую Google Alerts, чтобы получать ссылки на статьи по электронной почте. Я уже написал программу, которая может удалять URL-адреса из электронной почты, а также другую программу для очистки веб-сайтов. Моя проблема в том, что ссылки в электронном письме с оповещениями Google выглядят так:

https://www.google.com/url?rct=j&sa=t&url=http://www.foxnews.com/health /2016/08/19/виртуальная-реальность-беговые дорожки-помощь-предотвращение-падений-в-пожилых Да, некрасиво.

Поскольку это перенаправляет на реальную статью через Google, моя программа очистки не работает с этими ссылками. Я пробовал миллион различных регулярных выражений из вопросов здесь и из других источников. Мне удалось удалить все до http:// самой статьи, но у нее все еще есть хвост, который все портит. Вот что у меня есть до сих пор. Теперь они выглядят так:

http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIaODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ung

    private List<string> GetLinks(string message)
    {
        List<string> list = new List<string>();
        Regex urlRx = new Regex(@"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)", RegexOptions.IgnoreCase);

        MatchCollection matches = urlRx.Matches(message);
        foreach (Match match in matches)
        {
            if(!match.ToString().Contains("news.google.com/news") && !match.ToString().Contains("google.com/alerts"))
            {
                string find = "=http";
                int ind = match.ToString().IndexOf(find);                    
                list.Add(match.ToString().Substring(ind+1));
            }                
        }
        return list;
    }        

Некоторая помощь в избавлении от окончаний была бы потрясающей, будь то новое регулярное выражение или дополнительный код. Заранее спасибо.


person Daniel Kasman    schedule 22.08.2016    source источник


Ответы (1)


Вы можете использовать HttpUtility.ParseQueryString для получения части URL-адреса строки запроса. Он расположен в пространстве имен System.Web (требуется ссылка).

var uri = new Uri("https://www.google.com/url?rct=j&sa=t&url=http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIaODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ung");
var queries = HttpUtility.ParseQueryString(uri.Query);
var foxNews = queries["url"]; //http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html
person Pierre-Alain Vigeant    schedule 22.08.2016
comment
Вау, это было невероятно просто. Большое спасибо! - person Daniel Kasman; 23.08.2016