ฉันต้องตัด 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/virtual-reality-treadmills-help-prevent-falls-in-elderly.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIaODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ug. ใช่น่าเกลียด

เนื่องจากสิ่งนี้เปลี่ยนเส้นทางไปยังบทความจริงผ่าน Google โปรแกรมขูดของฉันจึงไม่ทำงานบนลิงก์เหล่านี้ ฉันได้ลองใช้ 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;
    }        

ความช่วยเหลือบางอย่างในการกำจัดตอนจบจะดีมาก ไม่ว่าจะเป็น RegEx ใหม่หรือโค้ดพิเศษบางอย่าง ขอบคุณล่วงหน้า.


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