【问题标题】:I need to strip a Google Alerts URL我需要删除 Google 快讯网址
【发布时间】:2016-12-29 12:52:01
【问题描述】:

作为序言,我知道有类似的主题,但我使用的是 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。是的,丑陋。

因为这会通过 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;
    }        

摆脱结尾的一些帮助会很棒,无论是新的 RegEx 还是一些额外的代码。提前致谢。

【问题讨论】:

    标签: c# url strip google-alerts


    【解决方案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
    

    【讨论】:

    • 哇,这简直太简单了。非常感谢!
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2013-09-04
    • 2014-09-24
    • 2014-06-24
    相关资源
    最近更新 更多