2016-08-22 75 views
0

前言,我知道有類似的線程關於這個,但我使用C#,而不是Java,或Python或PHP。一些線程爲單個URL提供了一個解決方案,這不是通用的。謝謝你不要打我。我需要去掉谷歌快訊網址

因此,我使用Google快訊通過電子郵件獲取文章鏈接。我已經編寫了一個程序,可以刪除電子郵件中的URL以及另一個程序來刪除網站。我的問題是,谷歌提醒電子郵件中的鏈接如下所示:

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。是啊,醜陋。

因爲這通過谷歌重定向到實際文章,我的scraping程序不適用於這些鏈接。我從這裏和其他來源的問題中嘗試了一百萬個不同的RegEx。我設法剝去了一切,直到實際文章的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; 
    }   

一些幫助擺脫的結局將是真棒,是一個新的正則表達式或一些額外的代碼。提前致謝。

回答

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 
+0

哇,這非常簡單。非常感謝! –