Exemple #1
0
        private async Task <EpisodeInfo> ParsingLineInTable(HtmlElement element)
        {
            var subjectElement = FindElement("td", "subject", parents: element);

            if (subjectElement != null)
            {
                // 링크가 2개 나옴, 카테고리 | 제목
                var links = subjectElement.GetElementsByTagName("a");
                if (links != null && links.Count >= 2)
                {
                    var subject = links[1].InnerText;
                    Console.WriteLine("[Subject]" + subject);

                    var magneticLinkElement = FindElement("td", "num", parents: element);
                    if (magneticLinkElement != null)
                    {
                        string magnet = string.Empty;

                        var result = await GetPageAsync((document) =>
                        {
                            // 네비게이팅 설정
                            void Navigating(object sender, WebBrowserNavigatingEventArgs e)
                            {
                                // 주소에 마그넷이 있는지 확인
                                if (e.Url.OriginalString.Contains("magnet:"))
                                {
                                    // 마그넷 정보를 담고, 클린 처리
                                    magnet = e.Url.OriginalString;
                                    _browser.Navigating -= Navigating;
                                    e.Cancel             = true;
                                }
                            }
                            _browser.Navigating += Navigating;

                            // 마그넷 링크를 클릭한다.
                            var linkElement = magneticLinkElement.GetElementsByTagName("a");
                            linkElement[0].InvokeMember("click");
                        },
                                                        (document) => string.IsNullOrEmpty(magnet) == false);

                        if (result == PageAsyncResult.None)
                        {
                            return(EpisodeInfo.Create(subject, magnet));
                        }
                        else
                        {
                            MessageBox.Show("Time Out?");
                        }
                    }
                }
            }
            return(null);
        }
Exemple #2
0
        // feeds에 모든 RSS 피드를 채워 넣음
        public async void UpdateRSS()
        {
            _feeds = new List <SyndicationItem>();

            Log.WriteLine("Updating RSS...");

            // 리스트를 클로닝 해서 처리한다, 다른 스레드에서 리스트를 업뎃 할수 있기에
            var rssList = new List <string>(Preference.Instance.RSSList);

            foreach (var uri in rssList)
            {
                var xmlstring = await RequestXMLString(uri);

                if (string.IsNullOrEmpty(xmlstring) == false)
                {
                    Regex regex = new Regex(@"&(?![a-z]{2,5};)");
                    xmlstring = regex.Replace(xmlstring, "&amp;");

                    // for Debuging
                    //Debug_SaveXml("testRSS.xml");

                    try
                    {
                        using (XmlReader reader = XmlReader.Create(new StringReader(xmlstring)))
                        {
                            SyndicationFeed feed = SyndicationFeed.Load(reader);
                            reader.Close();

                            Log.WriteLine(" '{0}' Found Feeds({1})...", uri, feed.Items.Count());

                            foreach (SyndicationItem item in feed.Items)
                            {
                                _feeds.Add(item);
                                //Console.WriteLine("{0}, {1}", item.Title.Text, item.Links[0].Uri);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Error(e.Message);
                    }
                }
            }

            // 성공적으로 새로운 Feed들을 가져왔다면
            // 정보들을 서버로 다시 전송해준다.
            HttpInterface http = null;

            if (_http.TryGetTarget(out http) && _feeds.Count > 0)
            {
                Log.WriteLine("Request to store feeds to server");

                var episodes = new List <EpisodeInfo>(_feeds.Count);
                foreach (var feed in _feeds)
                {
                    episodes.Add(EpisodeInfo.Create(feed.Title.Text, feed.Links[0].Uri.ToString()));
                }

                string rest      = "/store_feeds";
                var    errorCode = await http.RequestWithTimeout <List <EpisodeInfo>, string>(rest, episodes);

                Console.WriteLine("[{0}] {1}", rest, errorCode ?? "Not found error code");
            }
        }